王夢杰口,何加銘
(1.寧波大學(xué)通信技術(shù)研究所,浙江寧波315211; 2.浙江省移動網(wǎng)應(yīng)用技術(shù)重點實驗室,浙江寧波315211)
NAT[1]已應(yīng)用于各種網(wǎng)絡(luò)環(huán)境中,它是一種將 局域網(wǎng)IP地址轉(zhuǎn)換為公共IP地址的地址轉(zhuǎn)換技術(shù)[21。 NAT主要工作在網(wǎng)絡(luò)層,當(dāng)報文在經(jīng)過NAT設(shè)備時’ 應(yīng)用層中包含的地址信息不做任何修改,只修改網(wǎng)絡(luò) 層和傳輸層中的報文信息,其中包含的地址信息也會 被修改。SIP協(xié)議是應(yīng)用層協(xié)議,當(dāng)SIP終端使用SIP信 令建立會話通信時,后續(xù)流媒體和信令的交互使用的 傳輸?shù)刂范际荢IP[3]信令中描述的私網(wǎng)IP地址,而這個 私網(wǎng)IP地址不能在公網(wǎng)上進行路由,所以媒體通道不 能正常建立w。
為解決NAT穿越問題,IETF提出了一些NAT 穿越的技術(shù)規(guī)范,例如:ALGs (Application Layer Gateways)、中間盒技術(shù)、STUN (Simple Traversal of UDP through NAT) ?, TURN (Traversal Using Relay NAT)等氣這些方案都有局限性,只能根據(jù)不 同的網(wǎng)絡(luò)情況選擇合適的方案,沒有很好地解決NAT 穿越問題。所以,目前需要一種全面綜合性NAT穿越 方法,而ICE技術(shù)正好是一種NAT穿越的綜合性解決 方案,它結(jié)合了STUN和TURN的穿越NAT方式使 之能在各種NAT情況下進行穿透。
本文詳細介紹了ICE算法,并針對ICE在對稱型 NAT穿越上提出了優(yōu)化方案,使ICE穿越NAT的時間 更短,同時也改進了ICE連通性測試時間較長的不足。
內(nèi)網(wǎng)主機從相同的IP地址和端口號發(fā)出的所有請 求都會被完全圓錐NAT映射成相同的外網(wǎng)IP地址和端 口號。同時,通過這個映射的外網(wǎng)IP地址和端口號, 任何外網(wǎng)主機都能夠向這個內(nèi)網(wǎng)主機發(fā)送數(shù)據(jù)包。
內(nèi)網(wǎng)主機從相同的IP地址和端口號發(fā)出的所有請 求都會被受限圓錐NAT映射成相同的外網(wǎng)IP地址和端 口號,但不同于完全圓錐NAT的是、只有內(nèi)網(wǎng)主機先 向外網(wǎng)的某個主機地址發(fā)送數(shù)據(jù)后,才能接收到該外 網(wǎng)主機發(fā)送給內(nèi)網(wǎng)主機的數(shù)據(jù),而拒絕其他外網(wǎng)主機 發(fā)送的數(shù)據(jù)包,支持數(shù)據(jù)包過濾功能。
在映射規(guī)則上,端口受限錐形NAT和受限圓錐 NAT—樣,但是在接收數(shù)據(jù)包上面有差別,差別在于 加了端口號的限制,內(nèi)網(wǎng)主機只會接收之前巳經(jīng)發(fā)送 過信息的外網(wǎng)主機IP地址和固定端口號,其他的IP地 址和端口號發(fā)送的數(shù)據(jù)都不會被接收。
對稱型NAT和前面的3種類型NAT在映射規(guī)則上 都不一樣。只有當(dāng)目的地址和端口號一樣時,從相同 的內(nèi)網(wǎng)IP地址和端口號發(fā)出的所有請求才會被映射為 相同的外網(wǎng)IP和端口號,否則映射的端口號會不同。 同樣,內(nèi)網(wǎng)主機只會接收之前已經(jīng)發(fā)送過信息的外網(wǎng) 主機IP地址和固定端口號,其他的IP地址和端口號發(fā) 送的數(shù)據(jù)都不會被接收。
交互式連通建立方式ICE[7]是一種適用于各種 NAT類型下的NAT穿越解決方案,它結(jié)合了STUN 和TURN的NAT穿越方式,不需要對NAT設(shè)備做任 何修改,且會根據(jù)上面的協(xié)議選擇最好的NAT穿越方 式。針對SIP穿越NAT的問題,只需要對ICE擴展SDP (Session Description Protocol) [8〗的~"些附加屬性。
(1)候選地址信息收集
所有能夠用于會話的地址和端口都要被會話發(fā)起 方收集起來,其中包括本機地址和端口、NAT映射地 址和端口、服務(wù)器中繼地址和端口。一般而言,本機 地址和端口是主機上的一個物理接口綁定一個端口而 獲得,NAT映射地址和端口是從STUN服務(wù)器獲得, 而服務(wù)器中繼地址和端口則是TURN服務(wù)器提供。
(2)候選地址優(yōu)先級確定
候選地址的優(yōu)先級反映了會話者在該地址上接受 媒體流的優(yōu)先級別,所以需要對其優(yōu)先級進行排序, 其取值范圍從0到1。通常所收集的候選地址優(yōu)先級從 高到低是:本機地址、NAT映射地址、服務(wù)器中繼地 址。而缺省候選地址則按連通可能性的大小來判定優(yōu) 先級,一般是:服務(wù)器中繼地址、NAT映射地址、本 機地址
(3) 初始化消息創(chuàng)建
初始化消息由一系列媒體流組成,每個媒體流 包含候選地址列表和一個缺省地址。在SDP媒體描述 中,缺省IP地址在c屬性行,缺省端口和媒體參數(shù)在m 屬性行,而所有收集的候選地址都在a屬性行。將SDP 媒體描述作為消息體嵌入到SIP數(shù)據(jù)包中,同時提供地 址信息和媒體參數(shù)用于建立媒體流,完成呼叫和媒體 惶道的建立。會話發(fā)起者通過信令通道將初始化消息 發(fā)送給接受者。
(4)響應(yīng)處理
會話接受者接收到初始化請求后,首先,會執(zhí)行 候選地址和端口的收集,其過程與上文中描述一樣。 為減少呼叫建立的時間,候選地址的收集過程可以在 呼叫前完成;其次,會對這些候選地址進行優(yōu)先級排 序,其規(guī)則與上文中描述一樣;最后,會話接受者會 決定是否接受該會話通信,若拒絕則ICE過程將會被終 止,若接受則會話接受者會發(fā)送Accept消息給會話發(fā) 起者。Accept消息的創(chuàng)建過程與上文中類似。
(5)連通性檢測
如果會話接受者不支持ICE方式,則Accept消息 中將不會包含候選地址列表信息,而只包含缺省的地 址信息,這樣會話發(fā)起者將不會執(zhí)行連通性檢測。否 則,會話雙方得到雙方的候選地址列表信息后,首先 會進行地址信息的配對,保證一方的每個地址都會與 對方的所有地址組成一個配對;然后對這些地址對進 行優(yōu)先級排序,形成一個連通性檢測列表;最后會話 雙方進行連通性檢測,獲得有效的候選地址對,該地 址對就是雙方進行會話通信的傳輸?shù)刂稴這個過程的 時間會根據(jù)候選地址的多少和網(wǎng)絡(luò)情況而變化,一般 候選地址越少、網(wǎng)絡(luò)情況越好,時間就會越短。
(6)附加ICE過程
在候選地址連通性檢測的過程中,如果某些 STUN事物沒有結(jié)束,或者會話雙方在信息交換的過 程中提供了新的候選地址,則會話雙方的候選地址收 集過程將會繼續(xù),
(7) ICE到SIP的映射
當(dāng)SIP采用ICE方式穿越NAT時,必須映射ICE定 義的相關(guān)參數(shù)到SIP消息中,如候選地址信息。同時 擴展SDP屬性,在SDP的Media塊中定義一個新屬性 "a=candidate"來支持ICE。Media塊中可以有多個該 屬性,它包含候選地址信息,SDP接受端可以用該地 址信息替換c、m屬性行中的地址和端口。
ICE過程中的候選地址連通性檢査在網(wǎng)絡(luò)情況很 差時需要較長時間[111。因為連通性檢査是在接收方拿 起聽筒準備講話的時候,如果測試時間過長,則接收 方用戶說的話需要很長時間才能傳回到發(fā)起方,這會 增加通話延時,影響通話質(zhì)量。
如果通話雙方是在對稱型NAT下,ICE實際就是 使用TURN,通話雙方的數(shù)據(jù)都要經(jīng)過服務(wù)器中轉(zhuǎn), 這樣避免不了TURN造成的語音延遲問題,且會給服 務(wù)器造成較大壓力。
針對ICE方法的不足,提出以下改進方法:
(1)連通性測試時間過長的改進
ICE在連通性測試時,增加NAT類型檢測功能, 如果會話一方位于對稱型NAT后,而另一方位于對稱 型NAT或端口限制型NAT后,則只對中繼候選地址進 行連通性檢查,不對本機地址、NAT映射地址作連通 性檢查,節(jié)省連通性檢查所消耗的時間。同時在連通 性測試的過程中,當(dāng)發(fā)起方和接收方測試到一個可以 互通的地址時就產(chǎn)生應(yīng)答消息。因為候選地址的連通 性檢查是按照地址對的優(yōu)先級來測試的,所以可以保 證連通的那個地址對一定是優(yōu)先級最高的。
(2)對稱型NAT下穿越方式的改進
通話雙方在連通性檢測時檢測各自的NAT類型, 如果會話一方(設(shè)為A)在對稱型NAT后,而另一方 (設(shè)為B)在完全圓錐NAT或受限圓錐NAT后,這時B 的NAT映射地址和端口是可以連通的,而A的NAT映 射地址和端口是不可連通的。此時讓A發(fā)送消息到B的 NAT映射地址和端口,當(dāng)B接受到A的數(shù)據(jù)時,解析出 源地址和端口》并將該地址作為A通信的NAT映射地 址和端口,之后B發(fā)送響應(yīng)數(shù)據(jù)到該源地址和端口,從 而實現(xiàn)NAT的穿越,與A建立連接,實現(xiàn)數(shù)據(jù)通信。 如果是其他情況,則采用TURN的方式進行穿越。
假設(shè)會話發(fā)起方A和會話接收方B都位于對稱型 NAT后.,現(xiàn)在SIP終端A要與終端B進行通信,A的內(nèi) 網(wǎng)地址是192.168.1.100,外網(wǎng)地址是218.0.4.145,B的 內(nèi)網(wǎng)地址是10..22.70.90,外網(wǎng)地址是115.236.94.200。 ICE服務(wù)器綁定了2個公網(wǎng)IP_,地址是132.177.123.5 和132.177.123.6,其中STUN服務(wù)的端口使用3478和 3479, TURN服務(wù)的端口使用5566。
A發(fā)起請求,進行候選地址收集,B接受到消息, 同時也進行候選地址收集.候選地址收集過程如圖1所 示:
圖1 A、B收集候選地址過程
A、B雙方收集到的候選地址列表如表1所示:
表1 A、B的候選地址列表
NAT類型的判斷根據(jù)STUN協(xié)議提出的NAT類型 檢測算法[12】,當(dāng)判斷出A、B兩端都是對稱型NAT時, 則直接對服務(wù)器中繼地址進行連通性檢測,而不需要 對本機地址、NAT映射地址作連通性檢測,此過程與 原ICE相比,減少了需要測試的地址對,縮短了連通性 測試時間。B的連通性檢測如圖2所示。
B在連通性檢測完成后,會給A發(fā)送一組應(yīng)答消 息,當(dāng)A收到來自B的應(yīng)答消息后,也開始執(zhí)行連通性 檢測,如圖3所示。
A、B雙方的連通性檢測完成后,就會得到一 條A、B通信的線路。A發(fā)送到B的媒體流將使用 地址132.177.123.5=5566:,然后ICE服務(wù)器通過 端口 8888轉(zhuǎn)發(fā)至B、而B到A的媒體流將發(fā)送至 132.177.123.5:8889,然后ICE服務(wù)器通過端口5566轉(zhuǎn) 發(fā)至A。
圖2 B的連通性檢測
圖3 A的連通性檢測
在測試TURN地址連通性的過程中,A、B雙方還 會收集中繼候選地址。A、B的ICE附加過程如圖4所示。
以上是基于改進后的ICE方式穿越雙方都在對稱 型NAT后的簡化過程。而基于改進后的ICE方式穿越 非對稱型NAT的過程則與原ICE方案類似。
圖4 A、B的ICE附加過程
測試環(huán)境的搭建:服務(wù)器搭建在Ubumu系統(tǒng)上, 該服務(wù)器采用ICE技術(shù),結(jié)合了STUN和TURN服務(wù) 器的功能,同時在該服務(wù)器上安裝MySQL數(shù)據(jù)庫, 建立了sdpinfo、candidate、p2paddress這3張表,.分 別記錄SDP消息、候選地址和成功穿透后的地址對。 客戶端A、B在Windows系統(tǒng)上進行測試。A的內(nèi)網(wǎng)地 址是192.168.1.100,外網(wǎng)地址是218.0.4.145,B的內(nèi) 網(wǎng)地址是10.66.4.38,外網(wǎng)地址是202.107.195.199。 ICE服務(wù)器綁定了2個公網(wǎng)IP,地址是115.236.94.208 和115.236.94.209,其中STUN服務(wù)的端口使用3478和 3479, TURN服務(wù)的端口使用5566。
在測試過程中,根據(jù)數(shù)據(jù)庫中存儲的數(shù)據(jù)信息, 得出A、B的候選地址列表如表2所示:
表2 A、B的候選地址列表
然后A、B雙方進行NAT類型檢測,結(jié)果測出A 在對稱型NAT后,而B在受限錐形NAT后,根據(jù)改 進后的ICE方案,此時會讓A向B的NAT映射地址發(fā) 送消息,B記錄下這個地址,并作為A的最新NAT 映射地址,將應(yīng)答消息發(fā)送到這個最新的地址和端 口。此時A、B就建立了連接,也即完成了連通性測 試,實現(xiàn)了NAT穿越。最后雙方通信的地址對為: 218.0.4.145:65421< >202.107.195.199:53391..。
在實驗過程中,改進后的ICE實現(xiàn)了一方在對稱 型NAT后,而另一方在受限錐形NAT后時,不采用 TURN方式也可以穿越NAT、同時在實驗中,A、B雙 方并沒有對所有的地址進行連通性檢測,與原ICE方案 相比節(jié)省了一半的時間。
同時,對多種NAT情況下做實驗測試,并與原 ICE進行比較,測試結(jié)果如表3所示。
表3 原ICE與改進ICE的實驗對比
ICE方式與其他NAT穿越方式相比有較明顯的優(yōu) 勢,克服了其他穿越方式的單一局限性,能夠穿越 任何NAT、本文對ICE的改進主要體現(xiàn)在候選地址連 通性檢測和穿越對稱型NAT這2個方面。在連通性檢 測時,只要測試到一個可以互通的地址就產(chǎn)生應(yīng)答消息,同時針對一方位于對稱型NAT后,而另一方位于 對稱型NAT或端口限制型NAT后時,則只對中繼候選 地址進行連通性檢查,不對本機地址、NAT映射地址 作連通性檢查。在穿越對稱型NAT時,則根據(jù)NAT類 型的檢測,判斷出雙方是否都在對稱型NAT環(huán)境下, 再作出相應(yīng)的穿越方案,既避免了對稱型NAT卞完全采用TURN方式,同時又有效節(jié)省了連通性檢測時間。
[1] Srisuresh P, Holdrege M. RFC2663. IP Network Address Translator (NAT) Terminology and Considerations [S]. IETF, 1999.
[2]王健婷,趙霞,劉杰,等.基于P2PSIP的NAT穿透方法的研 究[J].北京工商大學(xué)學(xué)報,2008,5(5): 615-618.
[3] Rosenberg J, Schulzrinne H, Camarillo G, et al. RFC3261. SIP: Session Initiation Protocol[S]. IETF, 2002.
[4]梅小山.基于SIP的NAT穿越方案的研究與實現(xiàn)p].西 安:長安大學(xué),2009.
[5]朱光,張云華,盧娟.基于ICE的VoIP穿越NAT方案的研 究00.計算機應(yīng)用與軟件,2011,28(10): 223-224.
[6]曹申會.NAT穿越技術(shù)研究與實現(xiàn)[D].南京:南京郵電 大學(xué)’ 2013.
[7] Rosenberg J. RFC5245. Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Ofier/Answer Protocols[S]. IETF, 2010.
[8] Mandley M, Jacobson V,Perkins C. RFC4566. SDP: Session Description Protocol[S]. IETF, 2006.
[9]杜得榮,劉建明,李宏周,等.移動互聯(lián)網(wǎng)環(huán)境下SIP穿越 NAT的研究[J].微電子學(xué)與計算機,2013,30(7): 112113.
[10]曾立,吳平,高萬林,等.基于ICE方式SIP穿透Symmetric NAT技術(shù)研究[J].計算機工程與設(shè)計,2005,26(11): 3018-3019.
[11]劉磊.基于ICE方式的SIP穿越NAT技術(shù)的研究[D].天 津:天津大學(xué)’ 2007.
[12] Rosenberg J, Weinberger J, Huitema C, et al. RFC3489. STUN—Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)[S]. IETF, 2003.*