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