一種基于ICE的SIP穿越Symmetric NAT設(shè)備的方法
【專利摘要】本發(fā)明一種基于ICE的SIP穿越Symmetric NAT設(shè)備的方法包括:步驟S1,通信雙方先后收集候選地址,互換地址信息并根據(jù)優(yōu)先級(jí)排列形成地址檢測(cè)列表;步驟S2,雙方先后進(jìn)行連通性檢測(cè),根據(jù)主機(jī)地址到中繼地址的地址對(duì)連通性檢測(cè)過(guò)程中是否產(chǎn)生服務(wù)器映射候選地址來(lái)判斷所處的網(wǎng)絡(luò)拓?fù)涫欠翊嬖赟ymmentric NAT,步驟S3,確定Symmentric NAT方源端口選擇策略以及預(yù)測(cè)Symmentric NAT方分配的端口值;步驟S4,對(duì)Symmentric NAT方以預(yù)測(cè)的端口值進(jìn)行連通性檢查,本發(fā)明不僅保留了ICE的優(yōu)點(diǎn),還能適應(yīng)各種NAT環(huán)境,而且利用NAT自身特性,不需要STUN服務(wù)器探測(cè)NAT類型,巧妙地克服了ICE在Symmentric NAT下的不足,從而保證了服務(wù)質(zhì)量,本發(fā)明不必改變現(xiàn)有網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),很好地解決了NAT穿越的靈活性和有效性的問(wèn)題。
【專利說(shuō)明】
_種基于丨GE的SI P穿越Symmetr i c NAT設(shè)備的方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于媒體數(shù)據(jù)網(wǎng)絡(luò)傳輸技術(shù)領(lǐng)域,尤其涉及一種基于ICE的SIP穿越Symmetric NAT設(shè)備的方法。
【背景技術(shù)】
[0002]近年來(lái),由于互聯(lián)網(wǎng)技術(shù)和智能移動(dòng)設(shè)備的迅速發(fā)展,實(shí)時(shí)網(wǎng)絡(luò)音視頻通信VoIP(Voice over IP)成為移動(dòng)社交發(fā)展必不可少的需求。然而NAT (Network AddressTranslator)設(shè)備和技術(shù)的使用,使得SIP無(wú)法直接穿越NAT與處于不同局域網(wǎng)的對(duì)端進(jìn)行通信,嚴(yán)重影響了音視頻的P2P實(shí)現(xiàn)。因此如何有效穿越Symmetric NAT是VoIP在下一代網(wǎng)絡(luò)中P2P面臨的一個(gè)重要難題。針對(duì)基于SIP的NAT穿越問(wèn)題,業(yè)界出現(xiàn)了很多穿越技術(shù),如 STUN 或 TURN、ICE、UpnP等。其中 ICE( Iteractive ConnectivityEstablishment,交互式連接建立)結(jié)合了 STUN和TURN兩種穿越方式,是一種運(yùn)用最為廣泛的綜合穿越策略。
[0003]ICE是一種靈活可靠的方案,綜合利用已有的STUN和TURN等協(xié)議并對(duì)其進(jìn)行適當(dāng)?shù)臄U(kuò)展實(shí)現(xiàn)NAT穿越的,可以適用于各種網(wǎng)絡(luò)拓?fù)湎碌腘AT穿越,對(duì)部署了Symmetric NAT的網(wǎng)絡(luò),使用TURN進(jìn)行中轉(zhuǎn)。ICE框架實(shí)現(xiàn)流程大致如下:1、客戶端收集本地候選者地址;2、將收集的候選地址告訴對(duì)方;3、客戶端按優(yōu)先級(jí)排列本地和遠(yuǎn)程候選者地址,形成地址對(duì);4、對(duì)候選地址對(duì)做連通性檢查;5、如果地址對(duì)連通檢查成功,通知應(yīng)用層直連成功。
[0004]SlPCSess1n Initiat1n Protocol,會(huì)話初始協(xié)議),是一種應(yīng)用層的控制協(xié)議,由IETF的MMUSIC工作組開(kāi)發(fā)而來(lái),可用于創(chuàng)建、修改、更新和結(jié)束多媒體用戶交互式會(huì)話,其中的會(huì)話可以是IP電話、多媒體會(huì)議。相對(duì)于另外一種主要的VoIP信令H.323,SIP在網(wǎng)絡(luò)組建、會(huì)話建立時(shí)間、擴(kuò)展性、靈活性、實(shí)現(xiàn)成本等方面都有較大優(yōu)勢(shì),常用與SDP(Sess1n Descript1n Protocol,會(huì)話描述協(xié)議)應(yīng)用于多媒體的通信系統(tǒng)中。
[0005]SIP與ICE的結(jié)合使用的流程如圖1所示。ICE將幾個(gè)協(xié)議結(jié)合在一起,在兩個(gè)客戶端之間能提供幾條候選路徑,這在最大程度上保證了兩端通信成功的幾率。并且它還提供了在幾條通信路徑中給出優(yōu)先順序的能力,讓使用中繼(中繼的方式代價(jià)比較昂貴)的傳輸方式的優(yōu)先級(jí)降到最低,只有在其他路徑都行不通的情況下,才會(huì)啟用該路徑。然而基于ICE的SIP穿越NAT具有一定的局限性,對(duì)于主機(jī)限制最嚴(yán)格的Symmetric NATJCE采取將穿越NAT收發(fā)數(shù)據(jù)通過(guò)TURN服務(wù)器中轉(zhuǎn)策略,導(dǎo)致效率低、丟包、服務(wù)器負(fù)荷大等問(wèn)題。
[0006]針對(duì)該缺陷,一些專利提出了不同的解決方案。然而大多數(shù)專利解決SymmetricNAT穿越的問(wèn)題均在采用STUN協(xié)議探測(cè)出當(dāng)前雙方設(shè)備所處NAT類型的基礎(chǔ)上。比如現(xiàn)有技術(shù)中公開(kāi)了申請(qǐng)?zhí)枮?01210160837.3的中國(guó)專利“一種VoIP中基于ICE的快速私網(wǎng)穿越方法”,該方法首先進(jìn)行NAT類型檢測(cè),將檢測(cè)結(jié)果分為對(duì)稱型NAT環(huán)境或非對(duì)稱型NAT環(huán)境;還有公開(kāi)了申請(qǐng)?zhí)枮?01510357675.6的中國(guó)專利“一種NAT穿透方法和裝置”,該方法首先進(jìn)行NAT類型檢測(cè),檢測(cè)到一端是Port Restricted Cone另一端是Symmentric,或是兩端都是Symmentric,則做相應(yīng)處理;以及公開(kāi)了申請(qǐng)?zhí)枮?01010204840.1的中國(guó)專利“穿越NAT設(shè)備的方法”和公開(kāi)了申請(qǐng)?zhí)枮?01510352773.0的中國(guó)專利“一種基于SIP和ICE的音視頻通信方法”等等。這些方案雖然成功解決了Symmetric NAT設(shè)備的穿越,然而也引入了不少問(wèn)題。
[0007]探測(cè)通信兩端的NAT設(shè)備類型,其實(shí)現(xiàn)依據(jù)為RFC 3489。而在RFC(5389)已經(jīng)移除了 NAT類型探測(cè)的能力,主要原因是目前網(wǎng)絡(luò)類型紛繁復(fù)雜,越來(lái)越多的實(shí)踐發(fā)現(xiàn),在多層NAT下,類型的探測(cè)不總是有效的,這勢(shì)必會(huì)引進(jìn)不穩(wěn)定因素。同時(shí)RFC 3489探測(cè)NAT類型方案指出必須借助一個(gè)具有雙網(wǎng)卡雙公網(wǎng)IP的STUN服務(wù)器,搭建滿足該要求的STUN服務(wù)器無(wú)疑會(huì)增加成本。同時(shí),目前使用ICE時(shí),均不需要事先探測(cè)NAT類型,客戶端忽略他們各自的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。而上述解決方案中對(duì)于ICE能進(jìn)行穿越的非Symmetric NAT網(wǎng)絡(luò)拓?fù)?,也需要增加?fù)雜的NAT類型探測(cè)過(guò)程,無(wú)疑會(huì)增加不必要的延遲開(kāi)銷。
【發(fā)明內(nèi)容】
[0008]針對(duì)上述存在的問(wèn)題,本發(fā)明提出一種基于ICE的SIP穿越Symmetric NAT設(shè)備的方法,
所述NAT穿透方法包括:步驟SI,通信雙方先后收集候選地址,互換地址信息并根據(jù)優(yōu)先級(jí)排列形成地址檢測(cè)列表;步驟S2,雙方先后進(jìn)行連通性檢測(cè),根據(jù)主機(jī)地址到中繼地址的連通性檢測(cè)過(guò)程中是否產(chǎn)生prf Ix候選地址來(lái)判斷所處的網(wǎng)絡(luò)拓?fù)?,如果檢測(cè)到Symmentric NAT的存在,則跳轉(zhuǎn)到步驟S3,該NAT類型發(fā)現(xiàn)機(jī)制對(duì)于不管是在一個(gè)NAT設(shè)備后面或者多個(gè)NAT后面,允許客戶端發(fā)現(xiàn)對(duì)端以及自身所在網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的信息;步驟S3,確定Symmentric NAT方源端口選擇策略以及預(yù)測(cè)Symmentric NAT方分配的端口值;步驟S4,對(duì)Symmentric NAT方以預(yù)測(cè)的端口值進(jìn)行連通性檢查。
[0009]本發(fā)明的客戶端遵循原ICE流程,收集主機(jī)候選地址、srfIx候選地址以及中繼候選地址,并將這些信息通過(guò)信息服務(wù)通知到對(duì)方;在做連通性檢查時(shí)候,若客戶端發(fā)現(xiàn)所在網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)信息中存在Symmentric NAT,則使用端口預(yù)測(cè)模型確定端口分配規(guī)律,并向預(yù)測(cè)出來(lái)的端口發(fā)送STUN Bind請(qǐng)求包,同時(shí)端口預(yù)測(cè)模型對(duì)其它應(yīng)用程序端口占用進(jìn)行了簡(jiǎn)單地規(guī)避,大大提高直連的幾率。本發(fā)明不僅保留了 ICE的優(yōu)點(diǎn),能適應(yīng)各種NAT環(huán)境,而且利用NAT自身特性,不需要STUN服務(wù)器探測(cè)NAT類型,巧妙地克服了 ICE在Symmentric NAT下的不足,即無(wú)需中繼可實(shí)現(xiàn)媒體流的通信,從而保證了服務(wù)質(zhì)量。本發(fā)明是基于客戶端的解決方案,這樣只需升級(jí)客戶端,不必改變現(xiàn)有網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),很好地解決了 NAT穿越的靈活性和有效性的問(wèn)題。
【附圖說(shuō)明】
[0010]圖1為SIP與ICE結(jié)合使用的流程圖;
圖2為本發(fā)明的系統(tǒng)框架圖;
圖3為本發(fā)明音視頻呼叫流程圖;
圖4為本發(fā)明的流程示意圖;
圖5為本發(fā)明中相關(guān)端口的對(duì)應(yīng)關(guān)系圖; 圖6為本發(fā)明中會(huì)話發(fā)起方的音頻組件一候選地址列表;
圖7為本發(fā)明中應(yīng)答方的音頻組件一候選地址列表;
圖8為本發(fā)明中被叫端B音頻排序后的檢測(cè)地址列表;
圖9為本發(fā)明中主叫端A音頻排序后的檢測(cè)地址列表;
圖10為本發(fā)明中non-symmetric NAT情況下被叫端B音頻通道連通性檢測(cè)過(guò)程;
圖11為本發(fā)明中non-symmetric NAT情況下主叫端A音頻通道連通性檢測(cè)過(guò)程;
圖12為本發(fā)明中non-symmetric NAT情況下被叫端B收到主叫端A的STUN Bind請(qǐng)求后的檢測(cè)過(guò)程;
圖13為本發(fā)明中symmetric NAT情況下被叫端B音頻通道連通性檢測(cè)過(guò)程;
圖14為本發(fā)明中NAT類型發(fā)現(xiàn)機(jī)制的流程圖;
圖15為本發(fā)明被叫端B處于的Symmentric NAT映射端口情況I ;
圖16為本發(fā)明被叫端B處于的Symmentric NAT映射端口情況2;
圖17為本發(fā)明中端口預(yù)測(cè)流程圖;
圖18為本發(fā)明成功預(yù)測(cè)端口后的連通性檢測(cè)流程圖。
[0011]以下結(jié)合實(shí)施例和附圖對(duì)本發(fā)明做進(jìn)一步詳述。
【具體實(shí)施方式】
[0012]為更好地理解本發(fā)明,對(duì)某些術(shù)語(yǔ)說(shuō)明如下:
STUNCSess1n Traversal Utilities for NAT):NAT 會(huì)話穿透效用;
TURNCTraversal Using Relay NAT):通過(guò)Relay方式穿越NAT;
Agent:是在請(qǐng)求/應(yīng)答交換中與協(xié)議實(shí)現(xiàn)相關(guān)的,在一個(gè)請(qǐng)求/應(yīng)答交換中,有兩個(gè)相關(guān)的Agent;
Peer:從一個(gè)會(huì)話中的某個(gè)Agent的角度看,它的peer就是另一個(gè)Agent,進(jìn)一步說(shuō),從請(qǐng)求者的角度看,它的peer就是應(yīng)答者,從應(yīng)答者的角度看,它的peer就是請(qǐng)求者;nominated pair:最終選取進(jìn)行音視頻傳輸?shù)牡刂穼?duì);
val id pair:能使通信雙方能互通的有效地址對(duì),選取優(yōu)先級(jí)最高的一條作為nominated pair;
打洞:內(nèi)部主機(jī)ip和端口通過(guò)NAT訪問(wèn)目的主機(jī),在NAT上留下映射的過(guò)程;穿越:處于外網(wǎng)的目的主機(jī)經(jīng)過(guò)NAT到達(dá)內(nèi)部主機(jī)的過(guò)程,穿越能成功,是在內(nèi)部主機(jī)已在NAT上針對(duì)目的主機(jī)打洞的基礎(chǔ)上;
Host candidate地址:主機(jī)候選地址,是通過(guò)綁定了特定端口到主機(jī)某個(gè)接口獲取的;srflx candidate地址:服務(wù)器映射候選地址,是通過(guò)從主機(jī)候選地址發(fā)送一個(gè)STUN請(qǐng)求到STUN服務(wù)器獲取的,S卩Agent的網(wǎng)絡(luò)包經(jīng)過(guò)一重或多重NAT穿透后,由STUN服務(wù)器觀察到的經(jīng)過(guò)NAT轉(zhuǎn)換后的地址;
relay candidate地址:中繼候選地址,是通過(guò)從主機(jī)候選地址發(fā)送一個(gè)STUN分配請(qǐng)求到TURN服務(wù)器而獲取的一個(gè)候選傳輸?shù)刂?,中繼候選地址是常駐TURN服務(wù)器的,并且TURN服務(wù)器向后轉(zhuǎn)播數(shù)據(jù)包到Agent,中繼候選地址實(shí)際是TURN服務(wù)器為STUN請(qǐng)求的發(fā)起方在本機(jī)上分配的代理地址,所有被路由到該地址的網(wǎng)絡(luò)包將會(huì)被轉(zhuǎn)發(fā)到服務(wù)器反向地址,繼而穿透NAT發(fā)送到終端,因此如名字所示,它是TURN服務(wù)器完成中繼功能的地址。
[0013]首先說(shuō)明本發(fā)明的原理,簡(jiǎn)述NAT涉及以下三個(gè)方面的NAT參數(shù):
1.四種NAT類型
1)Full Cone (全錐型)NAT
一旦一個(gè)內(nèi)網(wǎng)地址iAddr:1Port被映射到一個(gè)外部地址eAddr:ePort,來(lái)自內(nèi)網(wǎng)地址iAddr:1Port的任何數(shù)據(jù)包將通過(guò)外部地址eAddr: ePort發(fā)送且任何外部主機(jī)能夠通過(guò)eAddr: ePort這個(gè)外部地址發(fā)送數(shù)據(jù)包到內(nèi)網(wǎng)地址iAddr:1Port ;
2)Restricted Cone(限制維型)NAT
一個(gè)內(nèi)網(wǎng)地址iAddr:1Port被映射到一個(gè)外部地址eAddr: ePort,來(lái)自內(nèi)網(wǎng)地址iAddr:1Port的任何數(shù)據(jù)包將通過(guò)外部地址eAddr: ePort發(fā)送,且僅只有接收到主機(jī)(iAddr:1Port)通過(guò)外部地址eAddr: ePort發(fā)送的數(shù)據(jù)包的外部主機(jī)通過(guò)該主機(jī)的任何端口發(fā)送到外部地址eAddr: ePort的數(shù)據(jù)包才能夠被正確的轉(zhuǎn)發(fā)到內(nèi)網(wǎng)地址iAddr:1Port.也就是說(shuō)主機(jī)有關(guān)端口無(wú)關(guān);
3)Port Restricted Cone(端口限制維型)NAT
類似于address restricted cone NAT ,但是端口號(hào)有限制;一旦一個(gè)內(nèi)網(wǎng)地址iAddr:1Port被映射到一個(gè)外部地址eAddr:ePort,來(lái)自內(nèi)網(wǎng)地址iAddr:1Port的任何數(shù)據(jù)包將通過(guò)外部地址eAddr:ePort發(fā)送,僅只有接收到主機(jī)(iAddr:1Port)通過(guò)外部地址eAddr: ePort發(fā)送的數(shù)據(jù)包的外部主機(jī)通過(guò)該主機(jī)的相同端口發(fā)送到外部地址eAddr:ePort的數(shù)據(jù)包才能夠被正確的轉(zhuǎn)發(fā)到內(nèi)網(wǎng)地址iAddr:1Port;
4)Symmetric(對(duì)稱型)NAT
來(lái)自相同內(nèi)部ip和port發(fā)送到相同目的地ip和port的請(qǐng)求被映射到唯一的外部ip和port地址;如果相同的內(nèi)部主機(jī)采用相同的ip和port地址發(fā)送到不同的目的地,那么重新分配映射地址,只有先前收到內(nèi)部主機(jī)發(fā)送的包的外部主機(jī)才能夠發(fā)送返回包到內(nèi)部主機(jī)。
[0014]針對(duì)前面三種NAT類型(S卩cone NAT)只要通信雙方彼此知道對(duì)方的內(nèi)部地址和外部地址的映射關(guān)系,然后通過(guò)UDP打洞的方式就可以建立相互連接的通信;但是第四種也就是Symmetric NAT的話,由于每次向不同目的地發(fā)送數(shù)據(jù)包時(shí)采用不同的外部地址,也就沒(méi)辦法通過(guò)直接的方式建立P2P連接。
[0015]2.源端口選擇策略
NAT設(shè)備在傳遞由內(nèi)網(wǎng)發(fā)送至外網(wǎng)的報(bào)文時(shí),會(huì)對(duì)該內(nèi)網(wǎng)報(bào)文的原端口進(jìn)行轉(zhuǎn)換,將轉(zhuǎn)換后的端口稱為源端口;在選擇源端口時(shí)所采用的策略即稱為源端口選擇策略。通常的源端口選擇策略有三種,一種是選擇原端口型,即選擇源端口與內(nèi)網(wǎng)報(bào)文的原端口相同;另一種是遞增選擇型,即以一定的等差值遞增選擇源端口 ;最后一種是隨機(jī)選擇型。
[0016]3.NAT老化時(shí)間
基于硬件的限制,NAT設(shè)備不可能無(wú)限制地創(chuàng)建NAT連接;因此,已經(jīng)創(chuàng)建的NAT通道將設(shè)置一個(gè)老化時(shí)間,以便及時(shí)釋放資源。這個(gè)老化時(shí)間就是NAT老化時(shí)間。
[0017]通過(guò)上述對(duì)NAT的了解,造成基于ICE架構(gòu)的直連效率過(guò)低,是因?yàn)闆](méi)有很好地處理兩端是Symmentric類型,或是一端Port Restricted Cone另一端是Symmentric類型的情況。如果能及時(shí)發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)渲写嬖赟ymmentric NAT,并預(yù)測(cè)Symmentric NAT的分配端口,那么就能處理Symmentric NAT直連。
[0018]如圖2所示,本發(fā)明的系統(tǒng)中服務(wù)器處于公網(wǎng),該服務(wù)器由SIP服務(wù)器、TURN服務(wù)器、STUN服務(wù)器組成,通信雙方的兩個(gè)客戶端分別處于NAT后面,該客戶端由SIP UA、端口預(yù)測(cè)模塊、NAT類型發(fā)現(xiàn)模塊、TURN客戶端以及STUN客戶端組成。
[0019]如圖3所示,其中圓角矩形為在原呼叫流程新增的操作。通信雙方各自包含音頻RTP和RTCPJli^ RTP和RTCP這四條多媒體通道,RFC5245中規(guī)定的ICE組件一和二分別為音視頻RTP、RTCP通道。ICE可根據(jù)客戶端選擇是否需要RTCP通道。以下先討論只含組件一的流程,組件數(shù)為二時(shí)類似。
[°02°] 如圖4所示,本發(fā)明一種基于ICE的SIP穿越Symmetric NAT設(shè)備的方法,包括如下步驟:
步驟S1、通信雙方先后收集候選地址,互換地址信息并根據(jù)優(yōu)先級(jí)排列形成地址檢測(cè)列表;
(1)收集候選地址
主叫端A需要收集的對(duì)象包括本地傳輸?shù)刂泛蛠?lái)源傳輸?shù)刂?,本地傳輸?shù)刂吠ǔS芍鳈C(jī)上I個(gè)物理接口綁定I個(gè)端口而獲得,端口采用portl表示,主叫端A還將訪問(wèn)STUN和TURN服務(wù)器,對(duì)于每一個(gè)本地傳輸?shù)刂?,?huì)話者都可以從服務(wù)器上獲得I組來(lái)源傳輸?shù)刂?,通過(guò)訪問(wèn)STUN及TURN服務(wù)器獲得的地址分別稱為服務(wù)器映射候選地址(srf Ixcandidate)以及中繼候選地址(relay candidate),服務(wù)器映射候選地址通過(guò)使用主機(jī)本地傳輸?shù)刂废騍TUN服務(wù)器發(fā)送STUN Bind請(qǐng)求獲得,中繼候選地址隨機(jī)使用本地空閑端口port2發(fā)送Al locate請(qǐng)求給TURN服務(wù)器獲得,經(jīng)過(guò)NAT后,映射端口用port9,port 10表示,同理假設(shè)視頻組件一通道獲取服務(wù)器映射候選地址和中繼候選地址隨機(jī)使用的本地空閑端口分別為口01^3以及口01^4,通過(guò)嫩1'后,映射端口為口01'1:11401'1:12,相關(guān)端口對(duì)應(yīng)關(guān)系如圖5所示;
采用IPTURN代表TURN服務(wù)器的中繼IP,且假設(shè)TURN服務(wù)器給主叫端A分配的中繼端口為portAl,則會(huì)話發(fā)起方所獲候選地址列表如圖6所示;
(2)啟動(dòng)STUN服務(wù)器
主叫端A獲得一組傳輸?shù)刂?包括本地傳輸?shù)刂泛蛠?lái)源傳輸?shù)刂?后,將在本地傳輸?shù)刂穯?dòng)STUN服務(wù)器,這意味著發(fā)送到來(lái)源地址的STUN服務(wù)將是可達(dá)的,與傳統(tǒng)的STUN服務(wù)不同,客戶端不需要在任何其它IP或端口上提供STUN服務(wù),也不必支持TLS,ICE用戶名和密碼已經(jīng)通過(guò)信令協(xié)議進(jìn)行了交換;
客戶端將在每個(gè)本地傳輸?shù)刂飞贤瑫r(shí)接受STUN請(qǐng)求包和媒體包,所以發(fā)起者需要消除STUN消息與媒體流協(xié)議之間的歧義,可以通過(guò)查看接收到的包的屬性字段“V=”,因?yàn)镽TP與RTCP包總是以0bl0(v=2)打頭,而STUN是ObOO,對(duì)于每個(gè)運(yùn)行STUN服務(wù)器的本地傳輸?shù)刂罚蛻舳硕急仨氝x擇相應(yīng)的用戶名和密碼;用戶名要求必須是全局惟一的,用戶名和密碼將被包含在初始化消息中傳送至響應(yīng)者,由響應(yīng)者對(duì)STUN請(qǐng)求進(jìn)行鑒別;
(3 )確定傳輸?shù)刂返膬?yōu)先級(jí)
STUN服務(wù)器啟動(dòng)后,下一步就是確定傳輸?shù)刂返膬?yōu)先級(jí);優(yōu)先級(jí)反映了 UA在該地址上接收媒體流的優(yōu)先級(jí)別,取值范圍在O到I之間,通常優(yōu)先級(jí)按照被傳輸媒體流量來(lái)確定;流量小者優(yōu)先,而且對(duì)于相同流量的,物理接口產(chǎn)生的本地傳輸?shù)刂肪哂凶罡叩膬?yōu)先級(jí),然后是STUN來(lái)源地址; (4)構(gòu)建初始化信息
初始化消息由一系列媒體流組成,每個(gè)媒體流都有一個(gè)缺省地址和候選地址列表;缺省地址通常被映射到SIP信令消息傳遞地址上,而候選地址列表用于提供一些額外的地址;對(duì)于每個(gè)媒體流來(lái)說(shuō),任意Peer之間實(shí)現(xiàn)最大連通可能性的傳輸?shù)刂肥怯晒W(wǎng)上TURN服務(wù)器提供的地址,客戶端將其編成一個(gè)缺省地址;同時(shí)客戶端將可用的傳輸?shù)刂肪幊梢粋€(gè)候選地址列表并且為每個(gè)候選元素分配一個(gè)會(huì)話中惟一的標(biāo)識(shí)符,該標(biāo)識(shí)符以及上述的優(yōu)先級(jí)都被編碼在候選元素的id屬性中,一旦初始化信息生成后即可通過(guò)INVITE消息發(fā)送至被叫端B;
(5)響應(yīng)處理
連通性檢測(cè)和地址收集:被叫端B接收到初始化信息后,會(huì)同時(shí)做幾個(gè)事情:首先,執(zhí)行步驟(I)中描述的地址收集過(guò)程,所獲得的候選地址列表如圖7所示;接著選取自己的地址與對(duì)方進(jìn)行兩兩配對(duì),刪除重復(fù)的地址對(duì)后和NAT映射地址一起作為發(fā)送檢測(cè)數(shù)據(jù)包源地址的地址對(duì),按照特定的優(yōu)先級(jí)公式計(jì)算候選地址的優(yōu)先級(jí),并進(jìn)行排序形成地址檢測(cè)列表,如圖8所示。
[0021 ]圖8中每行最前面的數(shù)字為根據(jù)優(yōu)先級(jí)排序后的序號(hào),IPTURN為TURN服務(wù)器的中繼IP,包含中繼地址的地址對(duì)處于地址列表中每個(gè)組件的最后,如序號(hào)3、4、5。
[0022]步驟S2、通信雙方先后進(jìn)行連通性檢測(cè),然后根據(jù)主機(jī)地址到中繼地址的地址對(duì)在連通性檢測(cè)過(guò)程中是否產(chǎn)生服務(wù)器映射候選地址來(lái)判斷所處的網(wǎng)絡(luò)拓?fù)渲惺欠翊嬖趕ymmetric NAT;
(1)當(dāng)形成地址檢測(cè)列表后,應(yīng)答方會(huì)按照優(yōu)先級(jí)依次從檢測(cè)地址列表中選取地址對(duì),并將地址對(duì)的左邊地址作為源地址,右邊地址作為目的地址,發(fā)送STUN Bind請(qǐng)求,該請(qǐng)求要求必須包含Username屬性和Password屬性,屬性值為從SDP包的“alt”屬性中得到的用戶名和密碼,該STUN Bind請(qǐng)求消息與收集地址時(shí)的STUN Bind請(qǐng)求消息不一樣,ICE添加了幾個(gè)新的屬性,從而擴(kuò)展了 STUN Bind請(qǐng)求消息:優(yōu)先級(jí)PR1RITY,USE-CANDI DATE,應(yīng)答方ICE-CONTROLLED,發(fā)起方ICE-CONTROLLING,由于有Controlling Agent和ControIledAgent之分,所以主叫端與被叫端的處理有很多不相同的地方,Controlling Agent會(huì)在所有的發(fā)送的請(qǐng)求里都帶上Flag標(biāo)志,即Flag=I,而Controlled Agent不用帶Flag標(biāo)志,即Flag=0,USE-CANDIDATE的值即為該Flag的值,Controlling Agent將會(huì)話發(fā)起端最先談判成功的地址對(duì)選擇為媒體傳輸通道;
在被叫端B開(kāi)始進(jìn)行連通性檢測(cè)時(shí),將同時(shí)構(gòu)建初始化信息發(fā)送給主叫端A,主叫端A在收到信息后,也按照相同的流程形成連通性地址檢測(cè)列表,如圖9所示,并進(jìn)行連通性檢測(cè);
(2)NAT類型發(fā)現(xiàn)機(jī)制
本發(fā)明提出的NAT類型發(fā)現(xiàn)機(jī)制發(fā)生在ICE的連通性檢測(cè)過(guò)程中,假設(shè)通話的雙方為主叫端A和被叫端B,且處于不同局域網(wǎng)內(nèi),下面依照雙方所處NAT均不存在symmetric NAT的non-symmetric NAT情況、有一方存在symmetric NAT情況、或者雙方均為symmetric NAT的情況來(lái)分別說(shuō)明:
1.non-symmetric NAT情況
被叫端B先于主叫端A對(duì)每一個(gè)地址對(duì)發(fā)送STUN Bind請(qǐng)求,如圖10所示,被叫端B先對(duì)優(yōu)先級(jí)最高的第一個(gè)地址對(duì)(內(nèi)網(wǎng)IPB: portl ’ _>內(nèi)網(wǎng)IPA: port I)進(jìn)行連通性檢測(cè),由于主叫端A與被叫端B處于不同的局域網(wǎng)內(nèi),所以由被叫端B主動(dòng)發(fā)出的STUN Bind請(qǐng)求包到達(dá)不了主叫端A,接著被叫端B對(duì)第二個(gè)地址對(duì)進(jìn)行連通性檢測(cè),因?yàn)橹鹘卸薃所處的NAT存在,且主叫端A沒(méi)有主動(dòng)向被叫端B發(fā)送過(guò)請(qǐng)求信息,所以被叫端B以主叫端A的服務(wù)器映射地址作為目的地址發(fā)送的STUN Bind請(qǐng)求信息會(huì)被A’NAT丟棄,無(wú)法送達(dá)主叫端A內(nèi)部,但是該地址對(duì)的連通性檢測(cè)使被叫端B針對(duì)主叫端A的映射地址進(jìn)行了打洞操作,接著被叫端B進(jìn)行下一個(gè)地址對(duì)的連通性檢測(cè),將STUN Bind請(qǐng)求發(fā)送至主叫端A的中繼端口,通過(guò)TURN服務(wù)器的中轉(zhuǎn)一定能到達(dá)主叫端A內(nèi)部,保證了通信的百分百建立,主叫端A收到該請(qǐng)求后,將立即發(fā)送應(yīng)答信息,被叫端B收到該應(yīng)答信息,則將該地址對(duì)作為一個(gè)val id pair,同時(shí)繼續(xù)進(jìn)行下面地址對(duì)的連通性檢測(cè)。
[0023]主叫端A會(huì)稍后于被叫端B進(jìn)行連通性檢測(cè),如圖11所示,同理,主叫端A檢測(cè)列表中第一個(gè)地址對(duì)中的STUN Bind請(qǐng)求無(wú)法到達(dá)被叫端B,然而在進(jìn)行第二個(gè)地址對(duì)的檢測(cè)時(shí),由于上述被叫端B已經(jīng)進(jìn)行了打洞操作,即被叫端B主動(dòng)向主叫端A的映射地址發(fā)送過(guò)請(qǐng)求包,所以,當(dāng)主叫端A以被叫端B的服務(wù)器映射地址作為目的地址發(fā)送STUN Bind請(qǐng)求包時(shí),能夠順利通過(guò)B ’ NAT,到達(dá)被叫端B內(nèi)部,被叫端B收到該請(qǐng)求包后,也將產(chǎn)生一個(gè)STUNResponse給主叫端A,在主叫端A收到被叫端B發(fā)來(lái)的應(yīng)答后,將立即結(jié)束連通性檢測(cè)過(guò)程,并將該地址對(duì)作為nominated pair,被叫端B發(fā)送應(yīng)答的同時(shí)將STUN Bind消息中的源地址和目的地址提取出來(lái),并找到相對(duì)應(yīng)的地址對(duì)(序號(hào)I)重發(fā)STUN Bind請(qǐng)求,如圖12所示,由于主叫端A在上述過(guò)程中也進(jìn)行了打洞操作,所以,被叫端B重發(fā)STUN Bind請(qǐng)求能到達(dá)主叫端A內(nèi)部,同時(shí)收到主叫端A的應(yīng)答,收到應(yīng)答后,被叫端B結(jié)束連通性檢測(cè)過(guò)程,將該地址對(duì)也作為valid pair,最終在所有valid pair中選出優(yōu)先級(jí)最高的地址對(duì)作為nominatedpair,毫無(wú)疑問(wèn),nominated pair即為該地址對(duì),與主叫端A達(dá)成一致;
2.symmetric NAT情況
由上述分析可知,ICE能很好地處理non-symmetric NAT情況,但是對(duì)于網(wǎng)絡(luò)拓?fù)渲幸欢耸荘ort Restricted Cone,另一端是Sy_entric NAT,或是兩端都是Symmentric NAT的情況,由于NAT的特性,主叫端A序號(hào)為I的地址對(duì)的STUN Bind請(qǐng)求也無(wú)法到達(dá)被叫端B,導(dǎo)致最終通信的雙方選擇nominated pair均包含中繼地址,無(wú)法實(shí)現(xiàn)音視頻數(shù)據(jù)的點(diǎn)對(duì)點(diǎn)傳輸,提出NAT發(fā)現(xiàn)機(jī)制解決該問(wèn)題。
[0024]先假設(shè)被叫端B處于symmetric NAT下,而主叫端A處于Cone NAT下,SymmentricNAT不同于Cone NAT的最主要的特性是:NAT下同一主機(jī)地址發(fā)送請(qǐng)求去往不同目的地,映射的ip不一樣,若B’NAT為Symmentric NAT,那么進(jìn)行序號(hào)I地址對(duì)的連通性檢測(cè)時(shí),如圖13所示,通過(guò)B,NAT映射出去的端口將不為port9,,記為New_port I,因?yàn)榇藭r(shí)目的地址不是STUN服務(wù)器的地址(IPTURN: 3478),而是主叫端A的服務(wù)器映射地址;同理進(jìn)行序號(hào)2地址對(duì)的連通性檢測(cè)時(shí),通過(guò)B,NAT映射出去的端口也不為port9,,且不為New_port I,記為New_port2,因?yàn)榇藭r(shí)目的地址為IPTURN:portAl,即主叫端A的中繼地址,而不是IPTURN:3478,而若B’NAT為Cone NAT,圖中New_portl= New_port2= port9’;
通過(guò)上述分析,如果被叫端B在進(jìn)行序號(hào)2地址對(duì)連通性檢測(cè)時(shí),主叫端A將收到該STUNBind請(qǐng)求消息,并可從其SOURCE-ADDRESS參數(shù)中獲得該STUN Bind請(qǐng)求消息的來(lái)源地址,即為被叫端B通過(guò)NAT后的外網(wǎng)映射地址,如果該地址不同于被叫端B的三個(gè)候選地址,將該地址稱為服務(wù)器映射候選地址(prflx candidate),如果產(chǎn)生了服務(wù)器映射候選地址,那么主叫端A可判斷通信對(duì)端所處的NAT類型必定為Symmentric NAT,反之為Cone NAT;同時(shí)被叫端B也將收到主叫端A發(fā)回的應(yīng)答,并從該STUN Respond消息中的MAPPED-ADDRESS參數(shù)得到自身通過(guò)NAT后的外網(wǎng)映射地址,如果該地址不同于自身三個(gè)候選地址中的任意一個(gè),則可以判定,客戶端自身所處的NAT類型一定為Symmentric NAT,反之為Cone NAT;
如圖14所示,本發(fā)明提出的NAT類型發(fā)現(xiàn)機(jī)制能很好地判斷當(dāng)前通信雙方所處的網(wǎng)絡(luò)拓?fù)渲惺欠翊嬖赟ymmentric NAT。
[0025]步驟S3、確定Symmentric NAT方源端口選擇策略以及預(yù)測(cè)Symmentric NAT方分配的端口值;
(I)當(dāng)主叫端A和被叫端B的私網(wǎng)地址網(wǎng)絡(luò)號(hào)一樣時(shí),如主叫端A為192.168.0.66/24,客戶端B為192.168.0.56/24,被叫端B處于的Symmentric NAT映射端口情況如圖15所示,圖中compl代表組件一,圖中①③線段對(duì)應(yīng)的端口為音、視頻內(nèi)網(wǎng)綁定端口收集服務(wù)器映射地址時(shí)在NAT上所留下的端口,分別為port9’和portll ’,其中內(nèi)網(wǎng)占用端口 portl’與port3 ’為音、視頻通道收集的內(nèi)網(wǎng)端口;②與④線段對(duì)應(yīng)的端口為音、視頻通道收集中繼地址時(shí)在NAT上所留下的端口,分別為portlO’與portl2’ ;ICE進(jìn)行連通性檢測(cè)時(shí),是音視頻地址對(duì)交替進(jìn)行檢測(cè),因此⑤⑥線段對(duì)應(yīng)的端口為音、視頻通道進(jìn)行序號(hào)I連通性檢測(cè)在NAT上所留下的端口,即portl3’、portl4’為被叫端B發(fā)送STUN Bind請(qǐng)求至主叫端A的服務(wù)器映射地址所留下來(lái)的端口,也正是需要預(yù)測(cè)的端口,成功穿越Symmentric NAT的關(guān)鍵;⑦⑧線段對(duì)應(yīng)的端口為音、視頻通道進(jìn)行序號(hào)2連通性檢測(cè)在NAT上留下的端口,S卩portl5 ’、portl6 ’為被叫端B發(fā)送STUN Bind請(qǐng)求至主叫端A的中繼地址所留下來(lái)的端口,除port 13’、port 14’外,其余六個(gè)端口均為已知。
[0026]當(dāng)主叫端A收到INVIT E請(qǐng)求后,解析出對(duì)被叫端B的映射端口信息P ο r 19 ’?portl2’,如圖17所示,其通信對(duì)端的端口預(yù)測(cè)流程如下所示:
Stepl.如果通過(guò)NAT類型發(fā)現(xiàn)機(jī)制得出對(duì)端為Symmetric NAT,此時(shí)即已經(jīng)獲得port 15 ’ 及port 16 ’ 的值,轉(zhuǎn)Step3 ;若對(duì)端NAT類型為Cone NAT,則轉(zhuǎn)Step2 ;
Step2.不改變?cè)璉CE流程,直至連通成功;
Step3.通過(guò)port9’?portl2’可以得出NAT的源端口選擇策略:如果portl2’_ portll’=portll’- portlO’= portlO’- port9 ’,車專 Step4;如果 port9 ’ = portl’,portlO’ =port2’,portll’= port3’,portl2’= port4’,即內(nèi)外網(wǎng)端口分配一致,轉(zhuǎn) Step5,否則,轉(zhuǎn)Step6;
Step4.NAT的源端口選擇策略為遞增選擇型,可得等差值為,用comp_cnt表示使用ICE的組件數(shù),若且,轉(zhuǎn)Step7,否則轉(zhuǎn)Step8;
Step5.NAT的源端口選擇策略為選擇原端口型,選擇原端口型對(duì)稱NAT的特點(diǎn)為,第一次使用端口進(jìn)行發(fā)包時(shí),NAT會(huì)映射出與內(nèi)網(wǎng)端口一致的外網(wǎng)端口,若第二次再使用該內(nèi)網(wǎng)端口往不同目的地發(fā)包,則會(huì)呈現(xiàn)出遞增選擇型對(duì)稱NAT的特點(diǎn),以一定的等差值分配端口,端口被占用后的等差值為:,則,,轉(zhuǎn)Step9;
Step6.源端口選擇策略為隨機(jī)型,選擇TURN服務(wù)器中轉(zhuǎn)策略;
Step7.在ICE流程過(guò)程中未出現(xiàn)其它應(yīng)用程序的端口占用問(wèn)題,,,轉(zhuǎn)Step9
StepS.在ICE流程中出現(xiàn)了其它應(yīng)用程序占用NAT外網(wǎng)端口問(wèn)題。則創(chuàng)建大小為的數(shù)組portl3[n]Nportl4[n],jJi!jportl3[0]=portl4[0]=portl5,-,portl3[l]=portl4[l] =ροΓ?Ιδ'-2,portl3[n-l]= portl4[n_lhportlS’ _η,車專SteplO;
Step9.主叫端A以內(nèi)網(wǎng)IPA: port I為源地址,IPB: portl3 ’為目的地址以及IPA: port3為源地址,IPB:portl4’為目的地址發(fā)送STUN Bind請(qǐng)求;
Stepl0.主叫端A 以內(nèi)網(wǎng) IPA: port I為源地址,分別以 IPB: port 13 [O]?IPB: port 13 [n-1]為目的地址,以及IPA:port3為源地址,分別以IPB:portl4[0> IPB:portl4[n_l]為目的地址發(fā)送STUN Bind請(qǐng)求;
(2)主叫端A和被叫端B的私網(wǎng)地址網(wǎng)絡(luò)號(hào)不一樣時(shí),如主叫端A為192.168.0.66/24,而被叫端 B 為 10.0.173.188/24或?yàn)?192.168.1.20/24。
[0027]由于當(dāng)前主叫端A與被叫端B的私網(wǎng)地址網(wǎng)絡(luò)號(hào)不一樣,那么在進(jìn)行序號(hào)為O的地址對(duì)連通性檢測(cè)時(shí),根據(jù)路由原理,發(fā)送的STUN Bind請(qǐng)求會(huì)到達(dá)最外層NAT,并在NAT上留下映射,占用一個(gè)端口,此時(shí)Symmentric NAT映射端口情況如圖16所示,其通信對(duì)端的端口預(yù)測(cè)流程與第一種情況一致,除了將判斷遞增選擇型源端口選擇策略的Symmentric NAT上的端口是否有被其余應(yīng)用程序占用時(shí)條件由“且”改為“且”;
步驟S4JtSymmentric NAT方以預(yù)測(cè)的端口值進(jìn)行連通性檢查,直至成功通過(guò)直連方式發(fā)送音視頻流;
主叫端A在預(yù)測(cè)出對(duì)端端口 port 13 ’與port 14 ’之后,立即發(fā)送STUN Bind請(qǐng)求包,如圖17所示,成功收到被叫端B發(fā)回的應(yīng)答后,即代表預(yù)測(cè)成功,最終的音視頻傳輸路徑將不經(jīng)過(guò)TURN服務(wù)器中轉(zhuǎn),成功實(shí)現(xiàn)Symmentric NAT下的音視頻數(shù)據(jù)的點(diǎn)對(duì)點(diǎn)傳輸。
[0028]本發(fā)明的實(shí)施例中只選取組件數(shù)為I,且主叫端A處于任意Cone NAT,被叫端B處于Symmentric NAT的情況。然而對(duì)于主叫端A與被叫端B均處于Symmentric NAT,以及主叫端A為Symmentric NAT,被叫端B處于任意Cone NAT,以及組件數(shù)為二時(shí),調(diào)整相關(guān)公式參數(shù),本發(fā)明均能很好的實(shí)現(xiàn)Symmentrie NAT源端口選擇策略為遞增選擇型和選擇原端口型時(shí)的穿越。
[0029]以上所述,并非對(duì)本發(fā)明的技術(shù)范圍作任何限制,故凡是依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何細(xì)微修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于ICE的SIP穿越SymmetricNAT設(shè)備的方法,系統(tǒng)中服務(wù)器處于公網(wǎng),該服務(wù)器由SIP服務(wù)器、TURN服務(wù)器、STUN服務(wù)器組成,通信雙方的兩個(gè)客戶端分別處于NAT后面,該客戶端由SIP UA、端口預(yù)測(cè)模塊、NAT類型發(fā)現(xiàn)模塊、TURN客戶端以及STUN客戶端組成,其特征在于包括如下步驟: 步驟S1、通信雙方先后收集候選地址,互換地址信息并根據(jù)優(yōu)先級(jí)排列形成地址檢測(cè)列表; 步驟S2、通信雙方先后進(jìn)行連通性檢測(cè),根據(jù)主機(jī)地址到中繼地址的地址對(duì)連通性檢測(cè)過(guò)程中是否產(chǎn)生服務(wù)器映射候選地址來(lái)判斷所處的網(wǎng)絡(luò)拓?fù)涫欠翊嬖赟ymmentric NAT; 步驟S3、確定Symmentric NAT方源端口選擇策略以及預(yù)測(cè)Symmentric NAT方分配的端口值; 步驟S4 JtSymmentric NAT方以預(yù)測(cè)的端口值進(jìn)行連通性檢查,直至成功,通過(guò)直連方式發(fā)送音視頻流。2.根據(jù)權(quán)利要求1所述的一種基于ICE的SIP穿越SymmetrieNAT設(shè)備的方法,其特征在于具體包括如下步驟: 步驟S1、通信雙方先后收集候選地址,互換地址信息并根據(jù)優(yōu)先級(jí)排列形成地址檢測(cè)列表: (1)收集候選地址 主叫端A需要收集的對(duì)象包括本地傳輸?shù)刂泛蛠?lái)源傳輸?shù)刂?,本地傳輸?shù)刂吠ǔS芍鳈C(jī)上I個(gè)物理接口綁定I個(gè)端口而獲得,端口采用portl表示,主叫端A還將訪問(wèn)STUN和TURN服務(wù)器,對(duì)于每一個(gè)本地傳輸?shù)刂?,?huì)話者都可以從服務(wù)器上獲得I組來(lái)源傳輸?shù)刂?,通過(guò)訪問(wèn)STUN及TURN服務(wù)器獲得的地址分別稱為服務(wù)器映射候選地址以及中繼候選地址,服務(wù)器映射候選地址通過(guò)使用主機(jī)本地傳輸?shù)刂废騍TUN服務(wù)器發(fā)送STUN Bind請(qǐng)求獲得,中繼候選地址隨機(jī)使用本地空閑端口 port2發(fā)送Allocate請(qǐng)求給TURN服務(wù)器獲得,經(jīng)過(guò)NAT后,映射端口用port9,port 10表示,同理假設(shè)視頻組件一通道獲取服務(wù)器映射候選地址和中繼候選地址隨機(jī)使用的本地空閑端口分別為port3以及port4,通過(guò)NAT后,映射端口為portll,portl2; 采用IPTURN代表TURN服務(wù)器的中繼IP,且假設(shè)TURN服務(wù)器給主叫端A分配的中繼端口為portAl,則會(huì)話發(fā)起方獲取候選地址列表; (2)啟動(dòng)STUN服務(wù)器 主叫端A獲得一組包括本地傳輸?shù)刂泛蛠?lái)源傳輸?shù)刂返膫鬏數(shù)刂泛?,將在本地傳輸?shù)刂穯?dòng)STUN服務(wù)器,這意味著發(fā)送到來(lái)源地址的STUN服務(wù)將是可達(dá)的,與傳統(tǒng)的STUN服務(wù)不同,客戶端不需要在任何其它IP或端口上提供STUN服務(wù),也不必支持TLS,ICE用戶名和密碼已經(jīng)通過(guò)信令協(xié)議進(jìn)行了交換; 客戶端將在每個(gè)本地傳輸?shù)刂飞贤瑫r(shí)接受STUN請(qǐng)求包和媒體包,所以發(fā)起者需要消除STUN消息與媒體流協(xié)議之間的歧義,可以通過(guò)查看接收到的包的屬性字段“V=”,對(duì)于每個(gè)運(yùn)行STUN服務(wù)器的本地傳輸?shù)刂罚蛻舳硕急仨氝x擇相應(yīng)的用戶名和密碼;用戶名要求必須是全局惟一的,用戶名和密碼將被包含在初始化消息中傳送至響應(yīng)者,由響應(yīng)者對(duì)STUN請(qǐng)求進(jìn)行鑒別; (3 )確定傳輸?shù)刂返膬?yōu)先級(jí) STUN服務(wù)器啟動(dòng)后,下一步就是確定傳輸?shù)刂返膬?yōu)先級(jí);優(yōu)先級(jí)反映了 UA在該地址上接收媒體流的優(yōu)先級(jí)別,取值范圍在O到I之間,優(yōu)先級(jí)按照被傳輸媒體流量來(lái)確定,流量小者優(yōu)先,而且對(duì)于相同流量的,物理接口產(chǎn)生的本地傳輸?shù)刂肪哂凶罡叩膬?yōu)先級(jí),然后是STUN來(lái)源地址; (4)構(gòu)建初始化信息 初始化消息由一系列媒體流組成,每個(gè)媒體流都有一個(gè)缺省地址和候選地址列表;缺省地址被映射到SIP信令消息傳遞地址上,而候選地址列表用于提供一些額外的地址;對(duì)于每個(gè)媒體流來(lái)說(shuō),任意Peer之間實(shí)現(xiàn)最大連通可能性的傳輸?shù)刂肥怯晒W(wǎng)上TURN服務(wù)器提供的地址,客戶端將其編成一個(gè)缺省地址;同時(shí)客戶端將可用的傳輸?shù)刂肪幊梢粋€(gè)候選地址列表并且為每個(gè)候選元素分配一個(gè)會(huì)話中惟一的標(biāo)識(shí)符,該標(biāo)識(shí)符以及上述的優(yōu)先級(jí)都被編碼在候選元素的id屬性中,一旦初始化信息生成后即可通過(guò)INVITE消息發(fā)送至被叫端B; (5)響應(yīng)處理 即進(jìn)行連通性檢測(cè)和地址收集:被叫端B接收到初始化信息后,先執(zhí)行步驟(I)中描述的地址收集過(guò)程獲得候選地址列表;接著選取自己的地址與對(duì)方進(jìn)行兩兩配對(duì),刪除重復(fù)的地址對(duì)后和NAT映射地址一起作為發(fā)送檢測(cè)數(shù)據(jù)包源地址的地址對(duì),按照特定的優(yōu)先級(jí)公式計(jì)算候選地址的優(yōu)先級(jí),并進(jìn)行排序形成地址檢測(cè)列表; 步驟S2、通信雙方先后進(jìn)行連通性檢測(cè),根據(jù)主機(jī)地址到中繼地址的地址對(duì)連通性檢測(cè)過(guò)程中是否產(chǎn)生服務(wù)器映射候選地址來(lái)判斷所處的網(wǎng)絡(luò)拓?fù)涫欠翊嬖赟ymmentric NAT: (1)當(dāng)形成地址檢測(cè)列表后,應(yīng)答方會(huì)按照優(yōu)先級(jí)依次從檢測(cè)地址列表中選取地址對(duì),并將地址對(duì)的左邊地址作為源地址,右邊地址作為目的地址,發(fā)送STUN Bind請(qǐng)求,該請(qǐng)求包含Username屬性和Password屬性,屬性值為從SDP包的“alt”屬性中得到的用戶名和密碼,該STUN Bind請(qǐng)求消息與收集地址時(shí)的STUN Bind請(qǐng)求消息不一樣,ICE添加了幾個(gè)新的屬性:優(yōu)先級(jí) PR1RITY,USE-CAND IDATE,應(yīng)答方 ICE-CONTROLLED,發(fā)起方 ICE-C0NTR0LLING,Controlling Agent將會(huì)話發(fā)起端最先談判成功的地址對(duì)選擇為媒體傳輸通道; 在被叫端B開(kāi)始進(jìn)行連通性檢測(cè)時(shí),將同時(shí)構(gòu)建初始化信息發(fā)送給主叫端A,主叫端A在收到信息后,也按照相同的流程形成連通性地址檢測(cè)列表,并進(jìn)行連通性檢測(cè); (2)NAT類型發(fā)現(xiàn)機(jī)制 該NAT類型發(fā)現(xiàn)機(jī)制發(fā)生在ICE的連通性檢測(cè)過(guò)程中,如果被叫端B在進(jìn)行地址對(duì)連通性檢測(cè)時(shí),主叫端A收到該STUN Bind請(qǐng)求消息,并可從其SOURCE-ADDRESS參數(shù)中獲得該STUN Bind請(qǐng)求消息的來(lái)源地址,即被叫端B通過(guò)NAT后的外網(wǎng)映射地址,如果該地址不同于被叫端B的三個(gè)候選地址,該地址稱為服務(wù)器映射候選地址,如果產(chǎn)生了服務(wù)器映射候選地址,那么主叫端A可判斷通信對(duì)端所處的NAT類型必定為Symmentric NAT,反之為Cone NAT;同時(shí)被叫端B也將收到主叫端A發(fā)回的應(yīng)答,并從該STUN Respond消息中的MAPPED-ADDRESS參數(shù)得到自身通過(guò)NAT后的外網(wǎng)映射地址,如果該地址不同于自身三個(gè)候選地址中的任意一個(gè),貝1J可以判定,客戶端自身所處的NAT類型一定為Symmentric NAT,反之為Cone NAT; 步驟S3、確定Symmentric NAT方源端口選擇策略以及預(yù)測(cè)Symmentric NAT方分配的端口值; (1)當(dāng)主叫端A和被叫端B的私網(wǎng)地址網(wǎng)絡(luò)號(hào)一樣時(shí),當(dāng)主叫端A收到INVITE請(qǐng)求后,解析出被叫端B的映射端口信息,包括音、視頻分別綁定內(nèi)網(wǎng)端口portl ’與port3 ’收集服務(wù)器映射地址時(shí)在NAT上所留下的端口,記為port9’、portll’,以及音、視頻通過(guò)內(nèi)網(wǎng)端口記為port2’、port4’收集中繼地址時(shí)在NAT上所留下的端口,分別記為口01*1:10’與。01'1:12’ ; 需要預(yù)測(cè)的端口為客戶端B發(fā)送STUN Bind請(qǐng)求至客戶端A的服務(wù)器映射地址所留下來(lái)的端口,記為portl3’、portl4’ ; 預(yù)測(cè)流程如下所示: Stepl.如果通過(guò)NAT類型發(fā)現(xiàn)機(jī)制得出對(duì)端為Symmetric NAT,此時(shí)即可以獲得被叫端B發(fā)送STUN Bind請(qǐng)求至客戶端A的中繼地址在所處NAT上所留下來(lái)的端口,記該音頻與視頻所留下的端口分別為portl5’、portl6’,轉(zhuǎn)Step3;若對(duì)端NAT類型為Cone NAT,則轉(zhuǎn)Step2; Step2.不改變?cè)璉CE流程,直至連通成功; Step3.通過(guò)port9’?portl2’可以得出NAT的源端口選擇策略:如果portl2’_ portll’=portll’- portlO’= portlO’- port9 ’,車專 Step4;如果 port9 ’ = portl’,portlO’ =port2’,portll’= port3’,portl2’= port4’,即內(nèi)外網(wǎng)端口分配一致,轉(zhuǎn) Step5,否則,轉(zhuǎn)Step6; Step4.NAT的源端口選擇策略為遞增選擇型,可得等差值為,用comp_cnt表示使用ICE的組件數(shù),若且,轉(zhuǎn)Step7,否則轉(zhuǎn)Step8; Step5.NAT的源端口選擇策略為選擇原端口型,選擇原端口型對(duì)稱NAT的特點(diǎn)為,第一次使用端口進(jìn)行發(fā)包時(shí),NAT會(huì)映射出與內(nèi)網(wǎng)端口一致的外網(wǎng)端口,若第二次再使用該內(nèi)網(wǎng)端口往不同目的地發(fā)包,則會(huì)呈現(xiàn)出遞增選擇型對(duì)稱NAT的特點(diǎn),以一定的等差值分配端口,端口被占用后的等差值為:,則,,轉(zhuǎn)Step9; Step6.源端口選擇策略為隨機(jī)型,選擇TURN服務(wù)器中轉(zhuǎn)策略; St ep7.在I CE流程過(guò)程中未出現(xiàn)其它應(yīng)用程序的端口占用問(wèn)題,,,轉(zhuǎn)St ep9 StepS.在ICE流程中出現(xiàn)了其它應(yīng)用程序占用NAT外網(wǎng)端口問(wèn)題,則創(chuàng)建大小為的數(shù)組portl3[n]Nportl4[n],jJi!jportl3[0]=portl4[0]=portl5,-,portl3[l]=portl4[l] =ροΓ?Ιδ'-2,portl3[n-l]= portl4[n_lhportlS’ _n,車專SteplO; Step9 ?主叫端A以內(nèi)網(wǎng)IPA: port I為源地址,IPB: port 13’為目的地址以及IPA: port3為源地址,IPB:portl4’為目的地址發(fā)送STUN Bind請(qǐng)求; Stepl0.主叫端A以內(nèi)網(wǎng)IPA:portl為源地址,分別以IPB:portl3[O]?IPB:port 13[n-1]為目的地址,以及IPA:port3為源地址,分別以IPB:portl4[0> IPB:portl4[n_l]為目的地址發(fā)送STUN Bind請(qǐng)求; (2)主叫端A和被叫端B的私網(wǎng)地址網(wǎng)絡(luò)號(hào)不一樣時(shí),在進(jìn)行序號(hào)為O的地址對(duì)連通性檢測(cè)時(shí),根據(jù)路由原理,發(fā)送的STUN Bind請(qǐng)求會(huì)到達(dá)最外層NAT,并在NAT上留下映射,占用一個(gè)端口,此時(shí)對(duì)端的端口預(yù)測(cè)流程與(I)一致,除了將判斷遞增選擇型源端口選擇策略的Symmentric NAT上的端口是否有被其余應(yīng)用程序占用時(shí)條件由“且”改為“且”; 步驟S4 JtSymmentric NAT方以預(yù)測(cè)的端口值進(jìn)行連通性檢查,直至成功通過(guò)直連方式發(fā)送音視頻流: 主叫端A在預(yù)測(cè)出對(duì)端端口之后,立即發(fā)送STUN Bind請(qǐng)求包,成功收到被叫端B發(fā)回的應(yīng)答后,即代表預(yù)測(cè)成功,最終的音視頻傳輸路徑將不經(jīng)過(guò)TURN服務(wù)器中轉(zhuǎn),成功實(shí)現(xiàn) Symmentri c NAT下的音視頻數(shù)據(jù)的點(diǎn)對(duì)點(diǎn)傳輸。
【文檔編號(hào)】H04L12/26GK105827748SQ201610311912
【公開(kāi)日】2016年8月3日
【申請(qǐng)日】2016年5月12日
【發(fā)明人】鄧小嬌, 侯剛, 蔡方誼, 易駿
【申請(qǐng)人】東莞市南星電子有限公司