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