《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 對(duì)等網(wǎng)聯(lián)下NAT穿越問(wèn)題的研究
對(duì)等網(wǎng)聯(lián)下NAT穿越問(wèn)題的研究
來(lái)源:電子技術(shù)應(yīng)用2013年第5期
孫衛(wèi)喜, 席少龍
渭南師范學(xué)院 數(shù)學(xué)與信息科學(xué)學(xué)院,計(jì)算機(jī)網(wǎng)絡(luò)工程技術(shù)中心,陜西 渭南 714000
摘要: 采用“打洞”穿越錐型NAT與使用端口預(yù)測(cè)穿越對(duì)稱型NAT相結(jié)合的方法,成功穿越了各種NAT,解決了對(duì)等聯(lián)網(wǎng)下NAT的穿越問(wèn)題。該方案既無(wú)需改變現(xiàn)有網(wǎng)絡(luò)設(shè)備,又能確保內(nèi)網(wǎng)的安全性,同時(shí)還解決了目前穿越方式存在的只能穿越部分類型的NAT、丟包、延時(shí)的問(wèn)題。
中圖分類號(hào): TP393
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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)地址短缺的問(wèn)題,同時(shí)也對(duì)內(nèi)網(wǎng)安全起到了很好的保護(hù)作用。對(duì)等網(wǎng)絡(luò)P2P(Peer to Peer)流媒體技術(shù)被廣泛用于電子商務(wù)、網(wǎng)絡(luò)電視、遠(yuǎn)程教育、在線直播、實(shí)時(shí)視頻會(huì)議、網(wǎng)絡(luò)視頻廣告、視頻點(diǎn)播、遠(yuǎn)程醫(yī)療等。NAT用于實(shí)現(xiàn)內(nèi)外網(wǎng)客戶端間的訪問(wèn),但多數(shù)情況下內(nèi)外網(wǎng)客戶端無(wú)法實(shí)現(xiàn)直接訪問(wèn)[1],因此實(shí)現(xiàn)內(nèi)外網(wǎng)客戶端間的對(duì)等互訪必須解決信息包穿越NAT的問(wèn)題。

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

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

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

 


    若內(nèi)網(wǎng)客戶端A對(duì)應(yīng)的NAT與客戶端B對(duì)應(yīng)的NAT類型不同時(shí),選擇由客戶端A“打洞”或選擇由客戶端B“打洞”其穿越算法、復(fù)雜度、難度等也都不同。通過(guò)對(duì)不同類型NAT穿越中選取不同方“打洞”的實(shí)驗(yàn)分析,給出確定“打洞”方的方法,以降低算法的復(fù)雜度,提高穿越質(zhì)量[11]。
    若NAT類型一方是錐型,另一方是對(duì)稱型時(shí),由錐型一方“打洞”;若一方為完全錐型,另一方為地址受限錐型或端口受限錐型,則由完全錐型一方“打洞”;若一方為地址受限錐型,另一方為端口受限錐型,則由地址受限錐型一方“打洞”;若雙方都是對(duì)稱型NAT,且一方為增量型,另一方為隨機(jī)型,則由增量型一方“打洞”。
    對(duì)稱型NAT越來(lái)越多地被應(yīng)用于安全性要求較高的企業(yè)網(wǎng)中。本文提出的端口預(yù)測(cè)法是穿越對(duì)稱型NAT很有效的方法,該方法克服了STUN無(wú)法穿越對(duì)稱型NAT的缺陷,且保持了STUN方式無(wú)須改動(dòng)現(xiàn)有的NAT設(shè)備、協(xié)議簡(jiǎn)單等特征,同時(shí)還解決了目前穿越對(duì)稱型NAT方案中存在延遲和丟包的問(wèn)題。提高了信息的安全性,節(jié)省了財(cái)力、物力、人力,具有很好的應(yīng)用前景。
參考文獻(xiàn)
[1] 陳明東. OpenH323網(wǎng)絡(luò)視頻會(huì)議中微量化穿越技術(shù)研究[J].計(jì)算機(jī)與現(xiàn)代化,2012,(2):120-123.
[2] 朱光,張?jiān)迫A,盧娟.基于ICE 的VOIP穿越NAT方案研究[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(10):222-224.
[3] 彭李超,譚兵.基于STUNT的Symmetric NAT穿越[J].微計(jì)算機(jī)應(yīng)用,2010,31(10):32-35.
[4] 黃桂敏,朱曉姝.基于UDP協(xié)議穿透NAT設(shè)備的對(duì)等網(wǎng)絡(luò)模型研究[J].計(jì)算機(jī)工程與設(shè)計(jì),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ì)算機(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è)計(jì)與實(shí)現(xiàn)[J].電力系統(tǒng)通信, 2009(4):65-68.
[11] 孫名松,段志鳴.混合式P2P網(wǎng)絡(luò)UDP下NAT穿越方案的研究與設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程, 2010(4):104-107.

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