文獻標識碼: A
文章編號: 0258-7998(2013)05-0132-03
在迅猛發(fā)展的互聯(lián)網中,網絡地址轉換NAT(Network Address Translator)技術有效緩解了網絡之間互連協(xié)議IP(Internet Protocol)地址短缺的問題,同時也對內網安全起到了很好的保護作用。對等網絡P2P(Peer to Peer)流媒體技術被廣泛用于電子商務、網絡電視、遠程教育、在線直播、實時視頻會議、網絡視頻廣告、視頻點播、遠程醫(yī)療等。NAT用于實現(xiàn)內外網客戶端間的訪問,但多數(shù)情況下內外網客戶端無法實現(xiàn)直接訪問[1],因此實現(xiàn)內外網客戶端間的對等互訪必須解決信息包穿越NAT的問題。
1 NAT
NAT是一個互聯(lián)網工程任務組IETF(Internet Engineering Task Force)標準,它將只能在私網中使用的內網IP地址通過與少量的公網IP地址建立映射關系,實現(xiàn)內網客戶端對互聯(lián)網的訪問。當內網客戶端需要訪問Internet時,NAT將信息流中的內網IP地址修改為可以在Internet上路由的公網IP地址,從而實現(xiàn)內網客戶端與外網客戶端之間的通信,同時建立內網地址與外網地址間的映射關系表。同樣,當外網客戶端需要與內網客戶端通信時,NAT對照建立的映射表,把經過信息流中的IP地址修改為與其對應的內網IP地址發(fā)往內網客戶端[2]。NAT緩解了公網IP地址的短缺,使私網地址得以復用,同時加強了內網安全性。
2 NAT的分類及特點
UDP(User Datagram Protocol)是用戶數(shù)據包協(xié)議,IETF制定了UDP數(shù)據包穿越NAT 的簡單協(xié)議STUN(Simple Traversal of UDP over NATs),它將NAT分為4類,即:完全錐型NAT,地址受限錐型NAT,端口受限錐型NAT和對稱型NAT。
(1)完全錐型NAT:當內網的客戶端A連接外網客戶端時,NAT會為其分配一個端口,此后外網所有發(fā)到這個端口的UDP數(shù)據包都可以到達內網客戶端A。
(2) 地址受限錐型NAT:當內網的客戶端A連接外網的客戶端B時, NAT會為其分配一個端口,此后B可以用任何端口與A通信,但其他的外網客戶端則不能與A通信。
(3) 端口受限錐型 NAT:當內網的客戶端A連接外網的客戶端B時, NAT會為其分配一個端口,此后B只能用此端口與A通信。B用其他端口或其他客戶端均不能與A通信。
(4) 對稱型NAT:與前三種錐型NAT不同,對稱型NAT內網客戶端在連接外部客戶端時隨連接的目標不同分配的端口也將發(fā)生改變,或者說當內外網客戶端連接時,內網客戶端分配到的IP地址和端口、外網客戶端分配到的目標IP地址和端口,其中任一項發(fā)生改變,都會引起連接路徑將隨之改變。
3 NAT類型的檢測
不同類型的NAT在端口分配和映射記錄等細節(jié)上差異很大,其穿越方法也有所不同,因而穿越NAT前需要對NAT的設備類型進行檢測[3-4], NAT類型檢測流程如圖1所示。
檢測方法步驟為:
(1)客戶端向服務器的IP1: Prot1發(fā)送源地址的請求包,其中有包的源地址IP3: Port3。若客戶端的地址為IP0:Prot0,比較IP0:Prot0與IP3: Port3是否相同,若相同,則客戶端前沒有NAT;否則轉步驟(2)。
(2)客戶端向具有兩個公網IP地址(IP1、IP2)和兩個端口(Prot1、Prot2)的服務器依次發(fā)起4次連接,即IP1: Prot1、P1: Prot2、IP2: Prot1、IP2: Prot2,每次連接都能從服務器返回的數(shù)據包中找到客戶端經過NAT轉換后的映射關系。比對客戶端相鄰兩次連接請求所分配的端口號,并計算端口的增量,如果無增量,則NAT為錐型NAT,轉步驟(3);有增量則為對稱性NAT,轉步驟(5)。
(3)客戶端再向服務器端IP1: Prot1發(fā)送報文,要求使用IP2: Prot1回復。如果收到回復,則說明該NAT類型是完全錐型NAT;如果請求若干次都收不到響應消息,則不是完全錐型NAT,轉步驟(4)。
(4)客戶端再向IP1: Prot1發(fā)送消息,要求用IP1: Prot2回復,如果收到回復,則說明該NAT 是地址受限錐型NAT,如果發(fā)送若干次請求消息都沒有收到響應消息, 則說明該NAT 是端口受限錐型 NAT。
(5)如果每次的增量均相同,則為增量型NAT;如果增量不同,則為隨機型NAT。
4 NAT的穿越方案
按照映射關系中端口的變化將NAT分為錐型NAT和對稱型NAT,其中錐型NAT包括完全錐型、地址受限錐型、端口受限錐型3種。錐型NAT的映射與目的地址無關,即源地址相同映射就相同;而對稱型NAT的映射則同時關聯(lián)源地址和目的地址,穿越過程相對復雜[5]。
4.1 錐型NAT的穿越
錐型NAT使用已經成熟的UDP“打洞”技術[6-7],即利用STUN服務器得到客戶端的映射地址,當雙方需要通信時,可以通過服務器的配合獲取對方的地址和端口,建立P2P直連??蛻舳薃與客戶端B的連接如圖2所示。
客戶端A與客戶端B通信穿越的步驟為:
(1)通信時NAT A將客戶端A的內網地址和端口轉換為NAT A的外網地址和端口,并建立映射關系。同樣NAT B也將客戶端B的內網地址和端口轉換為NAT B的外網地址和端口,建立映射關系。
(2)客戶端A通過服務器S向客戶端B發(fā)出連接請求。服務器S向客戶端A、B發(fā)送對方的NAT映射地址,即外部地址。
(3)客戶端B收到客戶端A的外部地址后,將A的外部地址作為目的地址發(fā)送UDP數(shù)據包“打洞”,該數(shù)據包使B端網絡的NAT設備允許后續(xù)的、以A端地址為源地址的UDP數(shù)據包進入其內部網絡。形象地稱B向A打了一個“洞”。
(4)客戶端A收到客戶端B的外部地址后,以B的外部地址為目的地址發(fā)送探測UDP數(shù)據包,同樣該數(shù)據包也在A端網絡的NAT設備上建立對應映射。
(5)客戶端B收到客戶端A的探測數(shù)據包后,向A發(fā)送確認數(shù)據包,A、B就此建立UDP連接。
4.2 對稱型NAT的穿越
STUN 協(xié)議不能穿越對稱型NAT,原因是對稱型NAT的映射關系是由源地址、源端口、目的地址、目的端口共同決定的,如果其中一方發(fā)生變化,則映射關系也將改變。如對稱型NAT內網的客戶端與外網不同的客戶端發(fā)生連接時,其分配的端口號會不同,相應地映射關系也就不一樣。因此,發(fā)生連接時NAT會為不同的目標節(jié)點分配新的端口號,這與其先前在服務器上建立映射關系時使用的端口號不同,發(fā)送方無法得知向接收方發(fā)送數(shù)據包時NAT所分配的新端口號,因此也就不能完成連接。正是由于對稱型NAT相對于錐型NAT映射關系要復雜得多,因而其安全性更高[8-10],更適合對安全性要求高的企業(yè)使用。
本文是在對目前使用的各種NAT穿越方法認真比對后,通過對NAT及其穿越原理的細致分析研究,給出了使用預測端口的方法穿越對稱型NAT。該方法將對稱型NAT分為增量型NAT和隨機型NAT兩類。
對稱型NAT對每次的連接要求為“源IP、源端口、 目標IP、目標端口”的順序在NAT映射表中找匹配項,若沒有找到完全匹配項,則按新連接對待并為其分配新端口號。對于增量型NAT,新端口號的分配原則是在前次分配的端口值上增加一個固定值進行分配,如前次分配的端口號為P,則新端口號就為P1=P+n(n為整數(shù))。對于隨機型NAT,新端口號的分配原則是在前次分配的端口值上增加一個在一定端口(1024,65535)范圍內的隨機量進行分配,如前次分配的端口號為P,則新端口號就為P1=P+n(n為某一范圍內隨機整數(shù))。客戶端獲取新的端口后連接過程類似于STUN 協(xié)議,如NAT A、NAT B都為對稱型NAT, 客戶端A與客戶端B通信的具體穿越步驟如下(可參見圖2):
(1)客戶端A(或B)向具有兩個IP地址IP1、IP2,兩個端口Prot1、Prot2的服務器S依次發(fā)起4次連接,即IP1: Prot1、IP1: Prot2、IP2: Prot1、 IP2: Prot2,每次連接都能從服務器S返回的數(shù)據包中找到客戶端A(或B)經過NAT轉換后的映射關系。比對客戶端A(或B)相鄰兩次連接請求所分配的端口號,計算端口的增量,如果每次的增量都相同,則獲得固定增量,轉步驟(2),如果增量不同,則為隨機增量,轉步驟(6)。
(2)客戶端A將從NAT A上獲得的增量發(fā)送給服務器S并通知S與B的連接請求,服務器S通知客戶端A、B的連接請求,并發(fā)送客戶端A的預測地址給客戶端B。
(3)客戶端B通過端口映射,把從NAT B上得到的預測增量由服務器S發(fā)送給A,客戶端A向B的預測地址發(fā)送連接請求,報文穿越NAT A建立來自B的映射規(guī)則。
(4)由于客戶端B向客戶端A的預測端口發(fā)送信息包前在NAT A上已經建立了映射,因而客戶端B的連接請求能直接通過。
(5)客戶端A獲得連接請求后發(fā)送確認包,建立了客戶端A與B間的直接通信,也就不再需要服務器S。
(6)NAT A對新連接端口分配是隨機變化的, 兩次之間的變化量為△t(△t為整數(shù)),雖然△t值都是由NAT設備通過某種方式隨機選擇的,但通常每次分配的端口號之間都會具有一定的函數(shù)關系或是統(tǒng)計上的相關性,這主要取決于具體的設備和網絡環(huán)境。如客戶端A發(fā)生新的連接時, NAT A為其分配新的端口號P1,假定NAT A為客戶端A上次連接分配的端口號為P,則必然存在P1=P+△t,△t= f(P)。通過在多種網絡條件下的測試和分析, 也證實了多數(shù)情況下存在具有某種特征的分布特性值△t。因此,可以通過其分布特性來預測△t所屬范圍,并對該范圍端口進行試探,以實施穿越。
4.3 NAT穿越中“打洞”方的確定
若內網客戶端A對應的NAT與客戶端B對應的NAT類型不同時,選擇由客戶端A“打洞”或選擇由客戶端B“打洞”其穿越算法、復雜度、難度等也都不同。通過對不同類型NAT穿越中選取不同方“打洞”的實驗分析,給出確定“打洞”方的方法,以降低算法的復雜度,提高穿越質量[11]。
若NAT類型一方是錐型,另一方是對稱型時,由錐型一方“打洞”;若一方為完全錐型,另一方為地址受限錐型或端口受限錐型,則由完全錐型一方“打洞”;若一方為地址受限錐型,另一方為端口受限錐型,則由地址受限錐型一方“打洞”;若雙方都是對稱型NAT,且一方為增量型,另一方為隨機型,則由增量型一方“打洞”。
對稱型NAT越來越多地被應用于安全性要求較高的企業(yè)網中。本文提出的端口預測法是穿越對稱型NAT很有效的方法,該方法克服了STUN無法穿越對稱型NAT的缺陷,且保持了STUN方式無須改動現(xiàn)有的NAT設備、協(xié)議簡單等特征,同時還解決了目前穿越對稱型NAT方案中存在延遲和丟包的問題。提高了信息的安全性,節(jié)省了財力、物力、人力,具有很好的應用前景。
參考文獻
[1] 陳明東. OpenH323網絡視頻會議中微量化穿越技術研究[J].計算機與現(xiàn)代化,2012,(2):120-123.
[2] 朱光,張云華,盧娟.基于ICE 的VOIP穿越NAT方案研究[J].計算機應用與軟件,2011,28(10):222-224.
[3] 彭李超,譚兵.基于STUNT的Symmetric NAT穿越[J].微計算機應用,2010,31(10):32-35.
[4] 黃桂敏,朱曉姝.基于UDP協(xié)議穿透NAT設備的對等網絡模型研究[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技術的實現(xiàn)[J].通信技術,2008,41(13):65-68.
[8] 暢巨崢,汪瀅,王慶輝.利用ICE實現(xiàn)VOIP媒體流穿越[J].計算機應用技術,2010(6):105-108.
[9] 劉娟娟,陶加祥.一種基于第三方服務器的P2P穿透NAT的實現(xiàn)方法[J].軟件導刊,2010,9(1):121-123.
[10] 王秀欣,戚宇林,王鼎.基于NATT 協(xié)議的NAT 穿越技術的設計與實現(xiàn)[J].電力系統(tǒng)通信, 2009(4):65-68.
[11] 孫名松,段志鳴.混合式P2P網絡UDP下NAT穿越方案的研究與設計[J].計算機與數(shù)字工程, 2010(4):104-107.