賀卿
摘要:隨著P2P 網(wǎng)絡(luò)技術(shù)的應(yīng)用普及,更多的局域網(wǎng)主機(jī)需要連接到P2P的網(wǎng)絡(luò),但P2P對(duì)等網(wǎng)絡(luò)要求網(wǎng)絡(luò)中所有節(jié)點(diǎn)都能直接對(duì)等交換信息,這就使得P2P網(wǎng)絡(luò)應(yīng)用必須解決NAT 穿透,實(shí)現(xiàn)雙向?qū)Φ韧ㄓ崱N恼峦ㄟ^(guò)對(duì)NAT 穿透技術(shù)的原理分析,設(shè)計(jì)了一種NAT 類型檢測(cè)的算法,從而提高實(shí)際NAT 穿透過(guò)程中的效能。
關(guān)鍵詞:P2P對(duì)等網(wǎng)絡(luò);NAT穿越;STUN;TRUN;ICE
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)21-4980-03
近年來(lái),Skype電話、BT下載、PPTV流媒體等互聯(lián)網(wǎng)應(yīng)用的普及與成功,使P2P技術(shù)成為IT 界的一個(gè)熱門話題。P2P(Peer to Peer)技術(shù),也稱為對(duì)等網(wǎng)絡(luò)技術(shù),這是一種網(wǎng)絡(luò)結(jié)構(gòu)的思想和方法論。它與目前網(wǎng)絡(luò)中占主導(dǎo)地位的客戶端/服務(wù)器(Client/Server,C/S)結(jié)構(gòu)的一個(gè)本質(zhì)區(qū)別是,整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中不存在中心節(jié)點(diǎn)。在P2P結(jié)構(gòu)中,每個(gè)節(jié)點(diǎn)(Peer)大都同時(shí)具有信息消費(fèi)者、信息提供者和信息通訊等功能。在P2P 網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)所擁有的權(quán)利和義務(wù)都是對(duì)等的。
P2P技術(shù)打破了傳統(tǒng)的服務(wù)器與客戶端的界限,消除了傳統(tǒng)的IPv4與DNS 域名系統(tǒng)的局限性,讓所有聯(lián)網(wǎng)并參與到P2P 應(yīng)用來(lái)的所有機(jī)器聯(lián)合起來(lái),組成一個(gè)威力強(qiáng)大的并行計(jì)算機(jī),從而實(shí)現(xiàn)計(jì)算能力與計(jì)算資源的突破。P2P所帶來(lái)的效益,首先將體現(xiàn)在運(yùn)營(yíng)成本的大幅降低上,甚至可以讓一些原本高成本服務(wù)的實(shí)際成本接近零,從而,讓一些原本是不可能實(shí)現(xiàn)的商業(yè)模式成為可能。
現(xiàn)有的互聯(lián)網(wǎng)是基于IPv4架構(gòu),隨著計(jì)算機(jī)接入數(shù)量的不斷增加,IP 地址資源愈加匱乏,NAT的引入解決了這個(gè)問題,通過(guò)部署NAT 可以使一個(gè)局域網(wǎng)所有主機(jī)通過(guò)一個(gè)或幾個(gè)公網(wǎng)IP 地址來(lái)訪問互聯(lián)網(wǎng),不僅如此,NAT 實(shí)際應(yīng)用中還有負(fù)載均衡、保護(hù)內(nèi)部局域網(wǎng)和優(yōu)化重疊網(wǎng)絡(luò)等功能。但由于局域網(wǎng)與互聯(lián)網(wǎng)編址方式不同,NAT 設(shè)備掩藏了參與構(gòu)建P2P 網(wǎng)絡(luò)的大量用戶節(jié)點(diǎn)。因此位于不同NAT 之后的用戶節(jié)點(diǎn)如何發(fā)現(xiàn)對(duì)方、如何彼此建立直接連接就成為P2P 亟待解決的問題之一。
1 NAT類型
根據(jù)NAT的工作方式不同,可以分四種類型:完全圓錐型NAT(Full Cone NAT),地址限制圓錐型NAT (Address Restricted Cone NAT),端口限制圓錐型NAT (Port Restricted Cone NAT),對(duì)稱型NAT (Symmetric NAT)。假設(shè)節(jié)點(diǎn)A 在內(nèi)網(wǎng),內(nèi)網(wǎng)IP地址記為Aip,端口號(hào)Aport;穿越NAT 后的外部IP地址記為Aip / port,外網(wǎng)設(shè)備節(jié)點(diǎn)B的地址為Bip / port。以下圖網(wǎng)絡(luò)結(jié)構(gòu)為例,分別說(shuō)明四種類型的特點(diǎn)。
完全圓錐型NAT情況下,NAT外的任意設(shè)備如節(jié)點(diǎn)B,訪問Aip / port 即可訪問Aip / port;
地址限制圓錐型NAT情況下,NAT外的任意設(shè)備如節(jié)點(diǎn)B,訪問Aip / port 即可訪問Aip / port,但是B 要能訪問A,必須A 先訪問B的IP 地址Bip;
端口限制圓錐型NAT情況下,NAT外的任意設(shè)備如節(jié)點(diǎn)B,訪問Aip / port 即可訪問Aip / port,但是B 要能訪問A,必須A 先訪問B的IP 地址Bip以及端口B port;
以上三種類型有個(gè)共同特點(diǎn),不管節(jié)點(diǎn)A 訪問NAT 以外的任何地址,穿越NAT 后映射為公網(wǎng)地址Aip / port,即只要從同一個(gè)內(nèi)部地址和端口出來(lái)的包,NAT都將它轉(zhuǎn)換成同一個(gè)外部地址和端口。因此,它們被統(tǒng)稱為Cone NAT。
而在對(duì)稱型NAT情況下,NAT 內(nèi)的節(jié)點(diǎn)A(Aip / port)訪問特定的NAT 外的節(jié)點(diǎn)B(Bip / port),使用相同的外部地址Aip / port。如果節(jié)點(diǎn)A訪問NAT 外的其他節(jié)點(diǎn),將使用不同的外部地址和端口號(hào);而且必須先有內(nèi)部節(jié)點(diǎn)首先訪問外部節(jié)點(diǎn),外部節(jié)點(diǎn)才能訪問內(nèi)部節(jié)點(diǎn)。如此設(shè)計(jì)是出于安全性考慮,一些功能較強(qiáng)的NAT 提供這種可選的工作模式。
2 NAT穿越技術(shù)
不少方案已經(jīng)被應(yīng)用于解決穿透NAT問題,例如:ALGs(Application Layer Gateways)、Middlebox Control Protocol、STUN (Simple Traversal of UDP through NAT)、TURN(Traversal Using Relay NAT)、RSIP(Realm Specific IP)、symmetric RTP等。然而,當(dāng)這些技術(shù)應(yīng)用于不同的網(wǎng)絡(luò)拓?fù)鋾r(shí)都有著顯著的利弊,以至于我們只能根據(jù)不同的接入方式來(lái)應(yīng)用不同的方案,為了適應(yīng)各種NAT 環(huán)境,出現(xiàn)了一種ICE的解決方案。
ICE(Interactive Connectivity Establishment)本身不是一種新技術(shù),它只是把原來(lái)的一些技術(shù)綜合運(yùn)用。作為最為全面的一種解決NAT 穿越方案,ICE的設(shè)計(jì)方案大多綜合使用STUN 和 TURN 這兩種穿越技術(shù),最大限度地利用STUN,當(dāng)STUN 無(wú)法作用的時(shí)候才使用TRUN,這樣就能避免單獨(dú)使用STUN 不能穿越某些NAT 的弊病和最大限度的減少TRUN 的使用。其中NAT 設(shè)備的類型對(duì)于ICE 選擇穿越技術(shù)有很重要的影響,所以在穿越NAT設(shè)備前應(yīng)先檢測(cè)NAT 設(shè)備的類型。
3 NAT類型檢測(cè)實(shí)現(xiàn)方案
假設(shè)節(jié)點(diǎn)Client 在內(nèi)網(wǎng),通過(guò)NAT 設(shè)備連接Internet,Internet 設(shè)備節(jié)點(diǎn)A的會(huì)話地址為ServerA:PortX,Internet設(shè)備節(jié)點(diǎn)B的會(huì)話地址為ServerB:PortX和ServerB:PortY,其中ServerA 和ServerB 是兩個(gè)不同的公網(wǎng)IP,網(wǎng)絡(luò)布局如下圖所示:
那么怎么來(lái)檢測(cè)該網(wǎng)絡(luò)中的NAT 設(shè)備的類型呢?網(wǎng)絡(luò)傳輸協(xié)議TCP / IP 協(xié)議簇中傳輸層的協(xié)議包括TCP(Transmission Control Protocol 傳輸控制協(xié)議)和UDP (User Datagram Protocol 用戶數(shù)據(jù)報(bào)協(xié)議),TCP 相比UDP而言更為復(fù)雜,因?yàn)門CP 是面向連接的服務(wù),需要三次握手機(jī)制,會(huì)涉及到連接狀態(tài)的保持等問題,UDP雖然是一個(gè)不可靠的協(xié)議,但它是分發(fā)信息的一個(gè)理想?yún)f(xié)議,UDP具有TCP所望塵莫及的速度和性能優(yōu)勢(shì)。NAT網(wǎng)絡(luò)檢測(cè)需要傳輸?shù)臄?shù)據(jù)量少,對(duì)傳輸可靠性的依賴小,因此選擇基于UDP 協(xié)議來(lái)實(shí)現(xiàn)方案,圖3是具體的程序算法流程圖。
在UDP 通訊中,內(nèi)網(wǎng)中的節(jié)點(diǎn)Client 主動(dòng)向外發(fā)送數(shù)據(jù)包請(qǐng)求,并根據(jù)返回包的信息判定內(nèi)網(wǎng)中NAT 設(shè)備的類型。Internet 設(shè)備節(jié)點(diǎn)A和節(jié)點(diǎn)B都有回應(yīng)Client返回包的功能,而且節(jié)點(diǎn)A還具備接收節(jié)點(diǎn)Client的申請(qǐng)轉(zhuǎn)發(fā)數(shù)據(jù)包給節(jié)點(diǎn)B的能力。
4 結(jié)束語(yǔ)
P2P技術(shù)已經(jīng)被大量運(yùn)用于各種互聯(lián)網(wǎng)應(yīng)用中,在實(shí)現(xiàn)P2P 應(yīng)用的過(guò)程中,如果某個(gè)節(jié)點(diǎn)(Peer)位于私有網(wǎng)絡(luò)則必定會(huì)遇到NAT 穿越的問題,換而言之,這樣的節(jié)點(diǎn)在與其他節(jié)點(diǎn)通訊時(shí)必須先完成NAT 穿越。NAT 類型檢測(cè)算法使NAT 的穿越更加智能,檢測(cè)NAT 的類型的結(jié)果可以用于選擇合適的NAT 穿透技術(shù)方案,提高了穿透的效能,具有很大靈活性。
參考文獻(xiàn):
[1] Egevang K,F(xiàn)rancis P.Rfc 1631: The ip network address translator(nat) [S].1994.
[2] Rosenberg J,Mahy R.Session Traversal Utilities for NAT(STUN) [S] .RFC 5389, IETF, 2008.
[3] Rosenberg J,Mahy R,Matthews P.Traversal using relays aroundnat (TURN): Relay extensions to session traversal utilities for nat (stun)[S].RFC 5766 (Review Copy), IETF, 2010.
[4] Rosenberg J,Mahy R, jdrosen.net.Interactive Connectivity Establishment (ICE):A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols[S].RFC5245, IETF, 2010.
[5] 張澤鵬. P2P網(wǎng)絡(luò)中NAT穿透技術(shù)的研究與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2010.
[6] Gary R,Wright W.Richard Stevens. TCP/IP詳解(卷2) :實(shí)現(xiàn)[M].陸學(xué)瑩,譯.北京:機(jī)械工業(yè)出版社,2000.
[7] 劉楊.基于ICE方式的綜合性SIPNAT解決方案設(shè)計(jì)與實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2006(5).