《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 對等網(wǎng)聯(lián)下NAT穿越問題的研究
對等網(wǎng)聯(lián)下NAT穿越問題的研究
來源:電子技術(shù)應(yīng)用2013年第5期
孫衛(wèi)喜, 席少龍
渭南師范學(xué)院 數(shù)學(xué)與信息科學(xué)學(xué)院,計算機(jī)網(wǎng)絡(luò)工程技術(shù)中心,陜西 渭南 714000
摘要: 采用“打洞”穿越錐型NAT與使用端口預(yù)測穿越對稱型NAT相結(jié)合的方法,成功穿越了各種NAT,解決了對等聯(lián)網(wǎng)下NAT的穿越問題。該方案既無需改變現(xiàn)有網(wǎng)絡(luò)設(shè)備,又能確保內(nèi)網(wǎng)的安全性,同時還解決了目前穿越方式存在的只能穿越部分類型的NAT、丟包、延時的問題。
中圖分類號: TP393
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)05-0132-03
The NAT traversal research in the peer-to-peer network linking
Sun Weixi, Xi Shaolong
Center of Computer Network Engineering Technology, College of Mathematics and Information Science, Weinan Normal University, Weinan 714000, China
Abstract: By combining the ‘holes’ crossing through the cone NAT with the combination of symmetric NAT, we successfully went across all the NAT and solved the Peer-to-Peer networking of the NAT traversal problem. The scheme can go without changing the existing network equipment and ensure the security of the internal network, and it also overcomes the shortage of tradition scheme can only go across some certain types of NAT that currently exist across the way, packet lost, delaying and other shortcomings.
Key words : P2P; NAT ; classification; type detection; traversal

    在迅猛發(fā)展的互聯(lián)網(wǎng)中,網(wǎng)絡(luò)地址轉(zhuǎn)換NAT(Network Address Translator)技術(shù)有效緩解了網(wǎng)絡(luò)之間互連協(xié)議IP(Internet Protocol)地址短缺的問題,同時也對內(nèi)網(wǎng)安全起到了很好的保護(hù)作用。對等網(wǎng)絡(luò)P2P(Peer to Peer)流媒體技術(shù)被廣泛用于電子商務(wù)、網(wǎng)絡(luò)電視、遠(yuǎn)程教育、在線直播、實(shí)時視頻會議、網(wǎng)絡(luò)視頻廣告、視頻點(diǎn)播、遠(yuǎn)程醫(yī)療等。NAT用于實(shí)現(xiàn)內(nèi)外網(wǎng)客戶端間的訪問,但多數(shù)情況下內(nèi)外網(wǎng)客戶端無法實(shí)現(xiàn)直接訪問[1],因此實(shí)現(xiàn)內(nèi)外網(wǎng)客戶端間的對等互訪必須解決信息包穿越NAT的問題。

1 NAT
    NAT是一個互聯(lián)網(wǎng)工程任務(wù)組IETF(Internet Engineering Task Force)標(biāo)準(zhǔn),它將只能在私網(wǎng)中使用的內(nèi)網(wǎng)IP地址通過與少量的公網(wǎng)IP地址建立映射關(guān)系,實(shí)現(xiàn)內(nèi)網(wǎng)客戶端對互聯(lián)網(wǎng)的訪問。當(dāng)內(nèi)網(wǎng)客戶端需要訪問Internet時,NAT將信息流中的內(nèi)網(wǎng)IP地址修改為可以在Internet上路由的公網(wǎng)IP地址,從而實(shí)現(xiàn)內(nèi)網(wǎng)客戶端與外網(wǎng)客戶端之間的通信,同時建立內(nèi)網(wǎng)地址與外網(wǎng)地址間的映射關(guān)系表。同樣,當(dāng)外網(wǎng)客戶端需要與內(nèi)網(wǎng)客戶端通信時,NAT對照建立的映射表,把經(jīng)過信息流中的IP地址修改為與其對應(yīng)的內(nèi)網(wǎng)IP地址發(fā)往內(nèi)網(wǎng)客戶端[2]。NAT緩解了公網(wǎng)IP地址的短缺,使私網(wǎng)地址得以復(fù)用,同時加強(qiáng)了內(nèi)網(wǎng)安全性。
2 NAT的分類及特點(diǎn)
     UDP(User Datagram Protocol)是用戶數(shù)據(jù)包協(xié)議,IETF制定了UDP數(shù)據(jù)包穿越NAT 的簡單協(xié)議STUN(Simple Traversal of UDP over NATs),它將NAT分為4類,即:完全錐型NAT,地址受限錐型NAT,端口受限錐型NAT和對稱型NAT。
    (1)完全錐型NAT:當(dāng)內(nèi)網(wǎng)的客戶端A連接外網(wǎng)客戶端時,NAT會為其分配一個端口,此后外網(wǎng)所有發(fā)到這個端口的UDP數(shù)據(jù)包都可以到達(dá)內(nèi)網(wǎng)客戶端A。
 (2) 地址受限錐型NAT:當(dāng)內(nèi)網(wǎng)的客戶端A連接外網(wǎng)的客戶端B時, NAT會為其分配一個端口,此后B可以用任何端口與A通信,但其他的外網(wǎng)客戶端則不能與A通信。
 (3) 端口受限錐型 NAT:當(dāng)內(nèi)網(wǎng)的客戶端A連接外網(wǎng)的客戶端B時, NAT會為其分配一個端口,此后B只能用此端口與A通信。B用其他端口或其他客戶端均不能與A通信。
 (4) 對稱型NAT:與前三種錐型NAT不同,對稱型NAT內(nèi)網(wǎng)客戶端在連接外部客戶端時隨連接的目標(biāo)不同分配的端口也將發(fā)生改變,或者說當(dāng)內(nèi)外網(wǎng)客戶端連接時,內(nèi)網(wǎng)客戶端分配到的IP地址和端口、外網(wǎng)客戶端分配到的目標(biāo)IP地址和端口,其中任一項(xiàng)發(fā)生改變,都會引起連接路徑將隨之改變。
3 NAT類型的檢測
 不同類型的NAT在端口分配和映射記錄等細(xì)節(jié)上差異很大,其穿越方法也有所不同,因而穿越NAT前需要對NAT的設(shè)備類型進(jìn)行檢測[3-4], NAT類型檢測流程如圖1所示。

    檢測方法步驟為:
    (1)客戶端向服務(wù)器的IP1: Prot1發(fā)送源地址的請求包,其中有包的源地址IP3: Port3。若客戶端的地址為IP0:Prot0,比較IP0:Prot0與IP3: Port3是否相同,若相同,則客戶端前沒有NAT;否則轉(zhuǎn)步驟(2)。
    (2)客戶端向具有兩個公網(wǎng)IP地址(IP1、IP2)和兩個端口(Prot1、Prot2)的服務(wù)器依次發(fā)起4次連接,即IP1: Prot1、P1: Prot2、IP2: Prot1、IP2: Prot2,每次連接都能從服務(wù)器返回的數(shù)據(jù)包中找到客戶端經(jīng)過NAT轉(zhuǎn)換后的映射關(guān)系。比對客戶端相鄰兩次連接請求所分配的端口號,并計算端口的增量,如果無增量,則NAT為錐型NAT,轉(zhuǎn)步驟(3);有增量則為對稱性NAT,轉(zhuǎn)步驟(5)。
    (3)客戶端再向服務(wù)器端IP1: Prot1發(fā)送報文,要求使用IP2: Prot1回復(fù)。如果收到回復(fù),則說明該NAT類型是完全錐型NAT;如果請求若干次都收不到響應(yīng)消息,則不是完全錐型NAT,轉(zhuǎn)步驟(4)。
 (4)客戶端再向IP1: Prot1發(fā)送消息,要求用IP1: Prot2回復(fù),如果收到回復(fù),則說明該NAT 是地址受限錐型NAT,如果發(fā)送若干次請求消息都沒有收到響應(yīng)消息, 則說明該NAT 是端口受限錐型 NAT。
    (5)如果每次的增量均相同,則為增量型NAT;如果增量不同,則為隨機(jī)型NAT。
4 NAT的穿越方案
    按照映射關(guān)系中端口的變化將NAT分為錐型NAT和對稱型NAT,其中錐型NAT包括完全錐型、地址受限錐型、端口受限錐型3種。錐型NAT的映射與目的地址無關(guān),即源地址相同映射就相同;而對稱型NAT的映射則同時關(guān)聯(lián)源地址和目的地址,穿越過程相對復(fù)雜[5]。
4.1 錐型NAT的穿越
 錐型NAT使用已經(jīng)成熟的UDP“打洞”技術(shù)[6-7],即利用STUN服務(wù)器得到客戶端的映射地址,當(dāng)雙方需要通信時,可以通過服務(wù)器的配合獲取對方的地址和端口,建立P2P直連??蛻舳薃與客戶端B的連接如圖2所示。
    客戶端A與客戶端B通信穿越的步驟為:
    (1)通信時NAT A將客戶端A的內(nèi)網(wǎng)地址和端口轉(zhuǎn)換為NAT A的外網(wǎng)地址和端口,并建立映射關(guān)系。同樣NAT B也將客戶端B的內(nèi)網(wǎng)地址和端口轉(zhuǎn)換為NAT B的外網(wǎng)地址和端口,建立映射關(guān)系。
    (2)客戶端A通過服務(wù)器S向客戶端B發(fā)出連接請求。服務(wù)器S向客戶端A、B發(fā)送對方的NAT映射地址,即外部地址。
    (3)客戶端B收到客戶端A的外部地址后,將A的外部地址作為目的地址發(fā)送UDP數(shù)據(jù)包“打洞”,該數(shù)據(jù)包使B端網(wǎng)絡(luò)的NAT設(shè)備允許后續(xù)的、以A端地址為源地址的UDP數(shù)據(jù)包進(jìn)入其內(nèi)部網(wǎng)絡(luò)。形象地稱B向A打了一個“洞”。
    (4)客戶端A收到客戶端B的外部地址后,以B的外部地址為目的地址發(fā)送探測UDP數(shù)據(jù)包,同樣該數(shù)據(jù)包也在A端網(wǎng)絡(luò)的NAT設(shè)備上建立對應(yīng)映射。
    (5)客戶端B收到客戶端A的探測數(shù)據(jù)包后,向A發(fā)送確認(rèn)數(shù)據(jù)包,A、B就此建立UDP連接。
4.2 對稱型NAT的穿越
    STUN 協(xié)議不能穿越對稱型NAT,原因是對稱型NAT的映射關(guān)系是由源地址、源端口、目的地址、目的端口共同決定的,如果其中一方發(fā)生變化,則映射關(guān)系也將改變。如對稱型NAT內(nèi)網(wǎng)的客戶端與外網(wǎng)不同的客戶端發(fā)生連接時,其分配的端口號會不同,相應(yīng)地映射關(guān)系也就不一樣。因此,發(fā)生連接時NAT會為不同的目標(biāo)節(jié)點(diǎn)分配新的端口號,這與其先前在服務(wù)器上建立映射關(guān)系時使用的端口號不同,發(fā)送方無法得知向接收方發(fā)送數(shù)據(jù)包時NAT所分配的新端口號,因此也就不能完成連接。正是由于對稱型NAT相對于錐型NAT映射關(guān)系要復(fù)雜得多,因而其安全性更高[8-10],更適合對安全性要求高的企業(yè)使用。
    本文是在對目前使用的各種NAT穿越方法認(rèn)真比對后,通過對NAT及其穿越原理的細(xì)致分析研究,給出了使用預(yù)測端口的方法穿越對稱型NAT。該方法將對稱型NAT分為增量型NAT和隨機(jī)型NAT兩類。
    對稱型NAT對每次的連接要求為“源IP、源端口、 目標(biāo)IP、目標(biāo)端口”的順序在NAT映射表中找匹配項(xiàng),若沒有找到完全匹配項(xiàng),則按新連接對待并為其分配新端口號。對于增量型NAT,新端口號的分配原則是在前次分配的端口值上增加一個固定值進(jìn)行分配,如前次分配的端口號為P,則新端口號就為P1=P+n(n為整數(shù))。對于隨機(jī)型NAT,新端口號的分配原則是在前次分配的端口值上增加一個在一定端口(1024,65535)范圍內(nèi)的隨機(jī)量進(jìn)行分配,如前次分配的端口號為P,則新端口號就為P1=P+n(n為某一范圍內(nèi)隨機(jī)整數(shù))。客戶端獲取新的端口后連接過程類似于STUN 協(xié)議,如NAT A、NAT B都為對稱型NAT, 客戶端A與客戶端B通信的具體穿越步驟如下(可參見圖2):

    (1)客戶端A(或B)向具有兩個IP地址IP1、IP2,兩個端口Prot1、Prot2的服務(wù)器S依次發(fā)起4次連接,即IP1: Prot1、IP1: Prot2、IP2: Prot1、 IP2: Prot2,每次連接都能從服務(wù)器S返回的數(shù)據(jù)包中找到客戶端A(或B)經(jīng)過NAT轉(zhuǎn)換后的映射關(guān)系。比對客戶端A(或B)相鄰兩次連接請求所分配的端口號,計算端口的增量,如果每次的增量都相同,則獲得固定增量,轉(zhuǎn)步驟(2),如果增量不同,則為隨機(jī)增量,轉(zhuǎn)步驟(6)。
    (2)客戶端A將從NAT A上獲得的增量發(fā)送給服務(wù)器S并通知S與B的連接請求,服務(wù)器S通知客戶端A、B的連接請求,并發(fā)送客戶端A的預(yù)測地址給客戶端B。
    (3)客戶端B通過端口映射,把從NAT B上得到的預(yù)測增量由服務(wù)器S發(fā)送給A,客戶端A向B的預(yù)測地址發(fā)送連接請求,報文穿越NAT A建立來自B的映射規(guī)則。
    (4)由于客戶端B向客戶端A的預(yù)測端口發(fā)送信息包前在NAT A上已經(jīng)建立了映射,因而客戶端B的連接請求能直接通過。
    (5)客戶端A獲得連接請求后發(fā)送確認(rèn)包,建立了客戶端A與B間的直接通信,也就不再需要服務(wù)器S。
    (6)NAT A對新連接端口分配是隨機(jī)變化的, 兩次之間的變化量為△t(△t為整數(shù)),雖然△t值都是由NAT設(shè)備通過某種方式隨機(jī)選擇的,但通常每次分配的端口號之間都會具有一定的函數(shù)關(guān)系或是統(tǒng)計上的相關(guān)性,這主要取決于具體的設(shè)備和網(wǎng)絡(luò)環(huán)境。如客戶端A發(fā)生新的連接時, NAT A為其分配新的端口號P1,假定NAT A為客戶端A上次連接分配的端口號為P,則必然存在P1=P+△t,△t= f(P)。通過在多種網(wǎng)絡(luò)條件下的測試和分析, 也證實(shí)了多數(shù)情況下存在具有某種特征的分布特性值△t。因此,可以通過其分布特性來預(yù)測△t所屬范圍,并對該范圍端口進(jìn)行試探,以實(shí)施穿越。
4.3 NAT穿越中“打洞”方的確定

 


    若內(nèi)網(wǎng)客戶端A對應(yīng)的NAT與客戶端B對應(yīng)的NAT類型不同時,選擇由客戶端A“打洞”或選擇由客戶端B“打洞”其穿越算法、復(fù)雜度、難度等也都不同。通過對不同類型NAT穿越中選取不同方“打洞”的實(shí)驗(yàn)分析,給出確定“打洞”方的方法,以降低算法的復(fù)雜度,提高穿越質(zhì)量[11]。
    若NAT類型一方是錐型,另一方是對稱型時,由錐型一方“打洞”;若一方為完全錐型,另一方為地址受限錐型或端口受限錐型,則由完全錐型一方“打洞”;若一方為地址受限錐型,另一方為端口受限錐型,則由地址受限錐型一方“打洞”;若雙方都是對稱型NAT,且一方為增量型,另一方為隨機(jī)型,則由增量型一方“打洞”。
    對稱型NAT越來越多地被應(yīng)用于安全性要求較高的企業(yè)網(wǎng)中。本文提出的端口預(yù)測法是穿越對稱型NAT很有效的方法,該方法克服了STUN無法穿越對稱型NAT的缺陷,且保持了STUN方式無須改動現(xiàn)有的NAT設(shè)備、協(xié)議簡單等特征,同時還解決了目前穿越對稱型NAT方案中存在延遲和丟包的問題。提高了信息的安全性,節(jié)省了財力、物力、人力,具有很好的應(yīng)用前景。
參考文獻(xiàn)
[1] 陳明東. OpenH323網(wǎng)絡(luò)視頻會議中微量化穿越技術(shù)研究[J].計算機(jī)與現(xiàn)代化,2012,(2):120-123.
[2] 朱光,張?jiān)迫A,盧娟.基于ICE 的VOIP穿越NAT方案研究[J].計算機(jī)應(yīng)用與軟件,2011,28(10):222-224.
[3] 彭李超,譚兵.基于STUNT的Symmetric NAT穿越[J].微計算機(jī)應(yīng)用,2010,31(10):32-35.
[4] 黃桂敏,朱曉姝.基于UDP協(xié)議穿透NAT設(shè)備的對等網(wǎng)絡(luò)模型研究[J].計算機(jī)工程與設(shè)計,2010,31(2):317-320.
[5] ROSENBERG J, WEINBERGER J, HUITEMA C. et al.STUN-simple traversal of UDP(User Datagram Protocol) through NATs(Network Address Translators)[C]. RFC 3489.March 2003.
[6] WG M,TAKEDA Y. Symmetric NAT traversal using STUN[S].IETF, 2003.
[7] 李航,馬林華.音視頻穿越IP NAT技術(shù)的實(shí)現(xiàn)[J].通信技術(shù),2008,41(13):65-68.
[8] 暢巨崢,汪瀅,王慶輝.利用ICE實(shí)現(xiàn)VOIP媒體流穿越[J].計算機(jī)應(yīng)用技術(shù),2010(6):105-108.
[9] 劉娟娟,陶加祥.一種基于第三方服務(wù)器的P2P穿透NAT的實(shí)現(xiàn)方法[J].軟件導(dǎo)刊,2010,9(1):121-123.
[10] 王秀欣,戚宇林,王鼎.基于NATT 協(xié)議的NAT 穿越技術(shù)的設(shè)計與實(shí)現(xiàn)[J].電力系統(tǒng)通信, 2009(4):65-68.
[11] 孫名松,段志鳴.混合式P2P網(wǎng)絡(luò)UDP下NAT穿越方案的研究與設(shè)計[J].計算機(jī)與數(shù)字工程, 2010(4):104-107.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。