[轉(zhuǎn)]ICE介紹 (RFC 5245)
http://blog.csdn.net/dxpqxb/article/details/22040017
?
1關(guān)于ICE的10個(gè)事實(shí)
1 ICE使用STUN和TURN
2 ICE是一種P2P的NAT穿越方式
3 ICE只需要網(wǎng)絡(luò)提供STUN或TURN服務(wù)器
4 ICE允許在很復(fù)雜的網(wǎng)路環(huán)境下傳輸媒體流
5 ICE只在確定媒體流可到達(dá)情況下才讓電話進(jìn)行振鈴
6 ICE動(dòng)態(tài)發(fā)現(xiàn)終端間媒體流的最短路徑
7 ICE可以附帶消除DoS攻擊
8 ICE可以幾乎和任意類型的NAT和防火墻設(shè)備一起工作
9 ICE不需要終端去發(fā)現(xiàn)NAT類型以及它們的存在
10 ICE只有在最壞的情況下才只用中繼(兩邊都在對稱NAT之后)
2 ICE的步驟
ICE 是一種探索、學(xué)習(xí)和更新式的解決方案。在ICE 算法的開始,通信的2 個(gè)代理并不知道自己的拓?fù)洳渴稹贜AT 后還是不在NAT 后。
2.1 初始請求的發(fā)送
為了探索本地拓?fù)洌?A 執(zhí)行如下操作,收集 3 類候選地址(Candidates):
(1)A 從本地接口上獲得主機(jī)候選地址(Host Candidates)192.168.1.22: 8484;
(2)發(fā)送STUN 綁定請求到STUN 服務(wù)器獲得服務(wù)器反射候選地址(Server Reflexive Candidates)202.199.112.102: 61866;
(3)發(fā)送TURN 分配請求到TURN 服務(wù)器獲得中繼候選地址(Relay Candidates)202.199.112.105: 5006,同時(shí)也獲得了服務(wù)器反射候選地址202.199.112.102: 62072。
這些候選地址是隨后可能用于接收媒體流的地址。
計(jì)算候選的優(yōu)先級。設(shè)置主機(jī)候選的類型優(yōu)先參數(shù)為最高值126,服務(wù)器反射候選的類型優(yōu)先參數(shù)為100,中繼候選的類型優(yōu)先參數(shù)為最低值0。本地參 數(shù)設(shè)為65 535,分組ID為1。經(jīng)計(jì)算,主機(jī)候選的優(yōu)先級為2 130 706 431,服務(wù)器反射候選的優(yōu)先級為1 694 498 815,中繼候選的優(yōu)先級為16 777 215。按候選優(yōu)先級高低排序。分配主機(jī)候選的基礎(chǔ)(Foundation)屬性為1,服務(wù)器反射候選的基礎(chǔ)屬性為2,中繼候選的基礎(chǔ)屬性為3。
按中繼候選、服務(wù)器反射候選、主機(jī)候選次序選擇默認(rèn)候選(該候選包含了默認(rèn)用于接收媒體流的地址和端口),由于A 獲得了中繼候選,因此優(yōu)先選擇連通概率較大的中繼候選202.199.112.105:5006 作為默認(rèn)候選。
將默認(rèn)候選的 IP 地址和端口編輯進(jìn)SDP 的c 行和m 行,并添加收集到的3 個(gè)候選地址到a 屬性,形成發(fā)送請求Offer,通過信令信道傳給B,請求消息內(nèi)容如下所示,修改的參數(shù)和添加的屬性值用粗體顯示。
v=0
o=UserA 2890844526 2890842807 IN IP4 192.168.1.22
s=
c=IN IP4
202.199.112.105
t=0 0
a=ice-pwd:asd88fgpdd777uzjYhagZg
a=ice-ufrag:8hhY
m=audio
5006
RTP/AVP 0
b=RS:0
b=RR:0
a=rtpmap:0 PCMU/8000
a=candidate:1 1 UDP 2130706431
192.168.1.22 8484
typ host
a=candidate:2 1 UDP 1694498815
202.199.112.102 61866
typ
srflx raddr 192.168.1.22 rport 8484
a=candidate:3 1 UDP 16777215
202.199.112.105 5006
typ relay
raddr 202.199.112.102 rport 62072
2.2 應(yīng)答的發(fā)送
當(dāng) B 收到請求,就知道了A 所處的拓?fù)洵h(huán)境(反射候選和主機(jī)候選地址不同,說明A 處于NAT 后)。B 執(zhí)行和A 相同的操作,收集候選,計(jì)算候選優(yōu)先級,設(shè)置基礎(chǔ)(Foundation)屬性,選擇默認(rèn)候選,進(jìn)行SDP 編碼,并發(fā)送應(yīng)答消息Answer 給A。這樣A 也知道B 所處的拓?fù)洵h(huán)境了,反射候選和主機(jī)候選地址不同,說明B 也處于NAT 后。應(yīng)答消息內(nèi)容如下所示:
v=0
o=UserB 2808849004 2808849004 IN IP4 172.16.10.102
s=
c=IN IP4 202.199.112.105
t=0 0
a=ice-pwd:YH75Fviy6338Vbrhrlp8Yh
a=ice-ufrag:9uB6
m=audio 49152 RTP/AVP 0
b=RS:0
b=RR:0
a=rtpmap:0 PCMU/8000
a=candidate:1 1 UDP 2130706431 172.16.10.102 8484 typ host
a=candidate:2 1 UDP 1694498815 202.199.112.87 63756 typ srflx
raddr 172.16.10.102 rport 8484
a=candidate:3 1 UDP 16777215 202.199.112.105 49152 typ relay
raddr 202.199.112.87 rport 63768
決定代理角色。由于A 和B 都是Full 型代理,且A 是請求的發(fā)起端,因此A 充當(dāng)控制代理(Controlling Agent),B 為被控制代理(Controlled Agent)。A和B 開始對候選進(jìn)行配對。A, B 各有3 個(gè)候選,A, B 各選1 個(gè)候選組成對,共有9 個(gè)對。由于不能從服務(wù)器反射選和中繼候選發(fā)送請求,因此剪掉冗余對,A, B 每一方只剩下3 個(gè)對,即從主機(jī)候選分別到對端的主機(jī)候選、服務(wù)器反射候選、中繼候選。
計(jì)算候選對的優(yōu)先權(quán)并對候選對排序。對于控制代理A而言,按優(yōu)先級排序候選對,形成檢查列表所示。
對于被控制代理B,同樣也計(jì)算候選對的優(yōu)先級,并按優(yōu)先級排序,形成自己的檢查列表。
檢查列表的次序決定了將來連通性檢查的次序。設(shè)置檢查列表中最高優(yōu)先級對的狀態(tài)為等待態(tài),其余對為凍結(jié)態(tài)。
2.3 連通性檢查
B 開始它的連通性檢查。B 依次從檢查列表移出最高優(yōu)先級對,對的狀態(tài)由等待態(tài)遷移為進(jìn)行態(tài)(這同時(shí)會(huì)觸發(fā)次高優(yōu)先級對轉(zhuǎn)換為最高優(yōu)先級對,狀態(tài)由凍結(jié)態(tài)變?yōu)榈却龖B(tài)),開始連通性檢 查。對第1 個(gè)對從本地候選172.16.10.102: 8484到遠(yuǎn)程候選192.168.1.22: 8484 發(fā)送STUN綁定請求([RFC5389]),由于遠(yuǎn)程候選處于NAT 后是私有的,不能被路由,檢查失敗。對第2 個(gè)對執(zhí)行連通性檢查,當(dāng)數(shù)據(jù)包抵達(dá)NAT A 時(shí),NAT 會(huì)發(fā)現(xiàn)傳輸?shù)刂?02.199.112.102: 61866 已經(jīng)映射202.199.112.108: 3478 了。而此時(shí)STUN請求的源地址并非202.199.112.108: 3478,所以數(shù)據(jù)包必然會(huì)被NAT A 丟棄。
對第 3 個(gè)對執(zhí)行連通性檢查。由于遠(yuǎn)程候選等于中繼候選,為了有效利用帶寬,應(yīng)從本地候選172.16.10.102: 8484 向遠(yuǎn)程候選202.199.112.105: 5006 發(fā)送信道綁定請求[5]。請求中指出了信道號0x4001 及通信對端A 的地址,請求到達(dá)TURN 服務(wù)器,綁定成功。該綁定的成功,激勵(lì)其學(xué)習(xí)對端反射候選202.199.112.102: 62072,經(jīng)該反射候選到達(dá)對端A,然后產(chǎn)生了一個(gè)成功的響應(yīng),A 的檢查終于成功。B 產(chǎn)生了一個(gè)新的對(202.199.112.105: 49152,202.199.112.105: 5006),該對被增加到有效列表,媒體流分組的ICE 處理遷移到完成態(tài)。至此B 可以利用信道0x4001發(fā)送媒體流分組到A 了。
當(dāng) A 收到應(yīng)答后,也按照候選對的優(yōu)先級次序開始自己的連通性檢查。和B 類似,也失敗了。當(dāng)A 一收到B 檢查成功的消息,馬上開始觸發(fā)檢查,在信道綁定請求中指定信道號0x4002 以及對端B 的地址。由于A 是控制代理,在檢查里可包含USE-CANDIDATE 屬性執(zhí)行強(qiáng)制提名算法,結(jié)果檢查也成功了。代理A 產(chǎn)生了一個(gè)新的對(202.199.112.105:5006, 202.199.112.105:49152),該對被增加到有效列表,并設(shè)置提名標(biāo)志(nominated flag)為TRUE,媒體流分組的ICE 處理遷移到完成態(tài)。A 可以通過信道0x4002 發(fā)送媒體流到B。
至此,通過該算法最終找到了媒體流傳輸?shù)挠行Ш蜻x對,對應(yīng)的最優(yōu)路徑也就隨之確定了。由于有效候選是公網(wǎng)地址,因此通過該路徑媒體流可順利穿越NAT。
參考文獻(xiàn)
[1] 魏立峰等。 一種媒體流穿越 NAT 的算法設(shè)計(jì)與實(shí)現(xiàn),? 《計(jì)算機(jī)工程》, 2009 年12 月
[2]RFC5245: Interactive Connectivity Establishment (ICE):? A Protocol for Network Address Translator (NAT) Traversal for????? Offer/Answer Protocols, 2010 April
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
