一種確定nat類型的方法及裝置的製作方法
2023-11-10 02:33:52 1
專利名稱:一種確定nat類型的方法及裝置的製作方法
技術領域:
本發明涉及網絡地址轉換(NAT)技術,尤指一種確定NAT類型的方法及裝置。
背景技術:
隨著接入Internet的計算機數量的不斷猛增,網際網路協議(IP)地址資源也就愈加顯得捉襟見肘,在這種情況下,網絡地址轉換(NAT)技術便應運而生了。一時間,NAT作為一種解決IPv4地址短缺以避免保留IP位址困難的方案而流行起來。不僅如此,通過使用NAT技術還能夠有效地避免來自網絡外部的攻擊,隱藏並保護網絡內部的計算機。雖然 NAT技術在解決IP位址資源短缺以及保護內部計算機方面起到了積極作用,但是,另一方面,NAT技術也無疑與網際網路的開放特性背道而馳,使許多應用受到了極大的影響。為此, 人們開始研究如何穿越NAT,STUN協議在此起到了積極的作用,通過使用STUN協議,可以檢測出位於NAT之後的客戶端的NAT類型以及經過轉換後所對應的公網IP位址和埠,為後期的打洞以及端到端(P2P)系統中的節點選擇起到了至關重要的作用。常見的NAT類型可分為四種,分別是完全圓錐型NAT(Full Cone NAT)、受限圓錐型 NAT (Address Restricted Cone NAT)、埠受限圓錐型 NAT (Port-Restricted Cone NAT), 以及對稱NAT (Symmetric NAT)。下面分別對這四種NAT類型進行簡單介紹。1)完全圓錐型NAT,也就是一對一的NAT。一旦一個內部地址(iAddr :portl)映射到外部地址(eAddr :port2),所有發自 (iAddr :portl)的包都經由(eAddr :port2)向外發送。任意外部主機都能通過給(eAddr port2)發包到達(iAddr :portl)。2)受限圓錐型NAT。一旦一個內部地址(iAddr :portl)映射到外部地址(eAddr :port2),所有發自 (iAddr :portl)的包都經由(eAddr :port2)向外發送。在內部地址(iAddr :portl)之前發送過包到任意外部主機(hostAddr :any)的情況下,任意外部主機(hostAddr :any)都能通過給(eAddr :port2)發包到達(iAddr :portl),其中,「any」也就是說埠不受限制。3)埠受限圓錐型NAT。類似受限圓錐型NAT (Restricted cone NAT),還包括埠限制。一旦一個內部地址(iAddr :portl)映射到外部地址(eAddr :port2),所有發自 (iAddr :portl)的包都經由(eAddr :port2)向外發送。在內部地址(iAddr :portl)之前發送過包到外部主機(hostAddr :port3)的情況下,一個外部主機(hostAddr :port3)能夠發包到達(iAddr :portl)。4)對稱 NAT。每一個來自相同內部IP與port的請求到一個特定目的地的IP位址和埠,都被映射到一個獨特的外部來源的IP位址和埠。同一個內部主機發出一個信息包到不同的目的端,將使用不同的映射。STUN 協議的全稱是 Simple Traversal of User Datagram ProtocolThroughNetwork Address Translate-ors,主要功能是檢測是否位於NAT後面,如果位於 NAT後面,經過NAT轉換後的地址和埠是什麼,另外可以檢測NAT的類型。STUN協議的基本思想是在私網內部安裝一個STUN客戶端(STUNClient),在公網上安裝兩個STUN伺服器(STUN Server), STUN協議定義了一些消息格式,大體上分成請求 / 響應 Request/Response, STUN Client 向 STUNServer 發送 Request, STUN Server 發送 Response 給 STUN Client。在 STUN Server 收到來自 STUN Client 的 UDP包後,STUN Server 將接收到該用戶數據報協議(UDP)包的地址和埠,並利用UDP傳回給STUN Client, STUN Client將收到的地址和埠與本機的IP位址和埠進行比較,如果不同,說明在NAT後面, 否則,說明就位於NAT之前(即沒有經過地址轉換的IP)。為了檢測出不同類型的NAT,STUN協議定義了一些消息屬性,要求STUNServer有不同的動作,比如發送響應時使用不同的IP位址和埠,或者改變埠等等。
圖1為現有STUN測試方案的示意圖,如圖1所示,為了確定NAT後的STUN Client 所對應的公網IP和埠及其NAT類型,需要有兩個STUN Server和STUN Client之間遵循一定的協議,進行相互配合才可完成。為了達到這一目的,在圖1所示的技術方案中,需要有四個測試項,其中,虛箭頭線表示測試項1,單點劃箭頭線表示測試項2、雙點劃箭頭線表示測試項3,實箭頭線表示測試項4。需要說明的是,在一次STUN測試中,並非所有的測試項都會進行,從第一項測試開始進行順序測試,只要經過中間任一步驟能夠最終確定NAT 類型及其公網地址時,測試即可終止。這四項測試的具體內容如表1所示。
權利要求
1.一種確定網絡地址轉換NAT類型的方法,其特徵在於,包括STUN客戶端同時向第一 STUN伺服器的第一埠和第二埠分別發送第一測試項的請求包和第二測試項的請求包;第一 STUN伺服器和第二 STUN伺服器返回相應的應答包;STUN客戶端根據收到的應答包判斷客戶端的NAT類型。
2.根據權利要求1所述的方法,其特徵在於,所述第一測試項的請求包的目的地址為所述第一 STUN伺服器的IP位址和所述第一 STUN伺服器的第一埠號;所述第二測試項的請求包的目的地址為所述第一 STUN伺服器的IP位址和所述第一 STUN伺服器的第二埠號。
3.根據權利要求2所述的方法,其特徵在於,所述第一STUN伺服器和第二 STUN伺服器返回相應的應答包為所述第一 STUN伺服器從第一埠反饋第一應答包,在第一應答包中攜帶有第一埠反饋的客戶端的公網IP和埠,所述第一 STUN伺服器從第二埠反饋第二應答包,在第二應答包中攜帶有第二埠反饋的客戶端的公網IP和埠 ;所述第一 STUN伺服器從第三埠反饋第三應答包,從所述第二 STUN伺服器向客戶端返回第四應答包。
4.根據權利要求3所述的方法,其特徵在於,所述第一STUN伺服器和第二 STUN伺服器為配置為雙網卡設備的同一 STUN伺服器;所述第一應答包,第二應答包和第三應答包由雙網卡中的第一網卡綁定的IP返回;所述第四應答包由雙網卡中的第二網卡綁定的IP返回。
5.根據權利要求3或4所述的方法,其特徵在於,STUN客戶端根據收到的應答包判斷客戶端的NAT類型包括如果所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠不一致,則確定所述STUN客戶端的NAT類型為對稱型 NAT ;如果所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包中攜帶的公網IP位址和埠或第二應答包中攜帶的公網IP位址和埠,與所述STUN客戶端的本地 IP位址和埠號相同,並且,所述STUN客戶端收到第四應答包,則確定所述STUN客戶端具有公網IP ;如果所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包中攜帶的公網IP位址和埠和第二應答包中攜帶的公網IP位址和埠,與所述STUN客戶端的本地 IP位址和埠號相同,但是,所述STUN客戶端未收到第四應答包,則確定所述STUN客戶端在防火牆後;如果所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠相同,但與所述STUN客戶端的本地IP位址和埠號不相同,並且,所述STUN客戶端收到第四應答包,則確定所述STUN客戶端的NAT類型是完全圓錐型NAT ;如果所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠相同,但與所述STUN客戶端的本地IP位址和埠號不相同,並且,所述STUN客戶端未收到第四應答包、收到第三應答包,則確定所述STUN客戶端的NAT類型是限制圓錐型NAT ;如果所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠相同,但與所述STUN客戶端的本地IP位址和埠號不相同,但是,所述STUN客戶端未收到第四應答包、未收到第三應答包,則確定所述STUN客戶端的NAT類型是埠限制圓錐型NAT。
6.根據權利要求3或4所述的方法,其特徵在於,如果所述STUN客戶端沒有收到任何應答包,則UDP不通,結束本流程。
7.一種確定網絡地址轉換NAT類型的裝置,其特徵在於,包括STUN客戶端、第一 STUN 伺服器和第二 STUN伺服器,其中,STUN客戶端,用於同時向第一 STUN伺服器的第一埠和第二埠分別發送第一測試項的請求包和第二測試項的請求包;接收來自第一 STUN伺服器和第二 STUN伺服器的應答包,並根據收到的應答包判斷客戶端的NAT類型;第一 STUN伺服器,用於接收請求包並返回相應應答包;第二 STUN伺服器,用於返回相應的應答包。
8.根據權利要求7所述的裝置,其特徵在於,所述第一測試項的請求包的目的地址為所述第一 STUN伺服器的IP位址和所述第一 STUN伺服器的第一埠號;所述第二測試項的請求包的目的地址為所述第一 STUN伺服器的IP位址和所述第一 STUN伺服器的第二埠號;所述第一 STUN伺服器,具體用於從第一埠反饋第一應答包,在第一應答包中攜帶有從第一埠反饋的客戶端的公網IP和埠 ;從第二埠反饋第二應答包,在第二應答包中攜帶有從第二埠反饋的客戶端的公網IP和埠 ;從所述第一 STUN伺服器的第三埠反饋第三應答包;所述第二 STUN伺服器,具體用於向客戶端返回第四應答包。
9.根據權利要求8所述的裝置,其特徵在於,所述第一STUN伺服器和第二 STUN伺服器可為配置為雙網卡設備的同一 STUN伺服器;所述第一應答包,第二應答包和第三應答包由雙網卡中的第一網卡綁定的IP返回;所述第四應答包由雙網卡中的第二網卡綁定的IP返回。
10.根據權利要求8或9所述的裝置,其特徵在於,所述STUN客戶端具體用於在所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠不一致時,確定所述STUN客戶端的NAT類型為對稱型 NAT ;在所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包中攜帶的公網IP位址和埠或第二應答包中攜帶的公網IP位址和埠,與所述STUN客戶端的本地IP 地址和埠號相同,並且,所述STUN客戶端收到第四應答包時,確定所述STUN客戶端具有公網IP ;在所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包中攜帶的公網IP位址和埠和第二應答包中攜帶的公網IP位址和埠,與所述STUN客戶端的本地IP 地址和埠號相同,但是,所述STUN客戶端未收到第四應答包時,確定所述STUN客戶端在防火牆後;在所述STUN客戶端收到 第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠相同,但與所述STUN客戶端的本地IP位址和埠號不相同,並且,所述STUN客戶端收到第四應答包時,確定所述STUN客戶端的NAT類型是完全圓錐型NAT ;在所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠相同,但與所述STUN客戶端的本地IP位址和埠號不相同,並且,所述STUN客戶端未收到第四應答包、收到第三應答包時,確定所述STUN客戶端的NAT類型是限制圓錐型NAT ;在所述STUN客戶端收到第一應答包和第二應答包,並且所述第一應答包和第二應答包中分別攜帶的公網IP位址和埠相同,但與所述STUN客戶端的本地IP位址和埠號不相同,但是,所述STUN客戶端未收到第四應答包、未收到第三應答包時,確定所述STUN客戶端的NAT類型是埠限制圓錐型NAT ;在所述STUN客戶端沒有收到任何應答包時,UDP不通。
全文摘要
本發明提供了一種確定NAT類型的方法及裝置,包括STUN客戶端同時向第一STUN伺服器的第一埠和第二埠分別發送第一測試項的請求包和第二測試項的請求包;第一STUN伺服器和第二STUN伺服器返回相應的應答包;STUN客戶端根據收到的應答包判斷客戶端的NAT類型。本發明的確定NAT類型的方法不依賴於測試包的先後順序,而且通過並行測試,節省了的NAT類型檢測的時間,不僅如此,本發明的NAT類型判斷方法也更加簡潔高效。
文檔編號H04L29/12GK102196057SQ201010143479
公開日2011年9月21日 申請日期2010年3月3日 優先權日2010年3月3日
發明者王志華, 邵穎哲, 陳謙, 魯小鎖 申請人:騰訊科技(深圳)有限公司