文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)05-0132-03
在迅猛發(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.