rfc5245-概要翻譯2

對此rfc的翻譯正確性不做任何保證。按照它而導致的任何問題後果自負。轉載請註明原地址。

2.3. 候選排序

由於算法搜索所有的候選對,所以不管候選地址是按什麼順序加入的,可用對(working pair)如果有的話,肯定能發現。爲了更快更好的搜索,我們用了特殊算法對候選排序。排序後的候選對結果列表叫做檢查表(CHECK LIST)。4.1.2介紹了算法,在這裏先介紹下思路:

1每個agent給出自己候選地址的數字優先級,然後連候選地址一起發給對端。

2遠程和本地的優先級混合,這樣每個agent的候選對順序是一樣的。

當L和R在NAT後面時,思路2很重要。因爲通常外網不許向NAT內網發數據,除非內網agent向外網發數據。所以ICE直到各agent從各自的NAT後發送check,都沒法成功檢測。

agent通過定期爲列表中下個候選對發送STUN request來完成檢測。這過程叫普通檢測( ORDINARY CHECKS)。

總之,相同類型的候選對獲得相似的優先級,更多直連路徑的優先級高於非直連。按照上面的原則,agnet在調整算法時有很多自由度。

2.4. 凍結候選

上面只描述了agent希望爲一個媒體會話獲得一個組件(COMPONENT)的情況。然而媒體流中每一塊要一個傳輸層地址,所以一個媒體流要多個組件。比如RTP和RCTP。

每個組件的網絡狀況類似(比如RTP和RCTP的IP地址是相同的)。因此常常可以通過一個組件獲得另個組件的最佳候選地址。ICE靠"凍結候選"機制實現它。

每個候選地址有個關聯屬性"基礎"(FOUNDATION)。當兩個候選地址類似(類型相同、主機地址相同、STUN服務器協議相同)時基礎是一樣的。候選地址對也有"基礎",它由相關的兩個候選地址的"基礎"組成。開始,只有獨立"基礎"的候選對被測試,其他(重複"基礎")的候選對只有在剛纔候選對檢查成功時再檢查(先被“凍結”了)。這樣避免了檢查那些看上去會成功但實際失敗的候選對。

儘管我們單獨討論了“凍結”,但實際上這是作爲ICE候選排序的一部分。

2.5檢查的安全性

爲避免媒體流被劫持到別的地址,STUN的連接測試中夾帶消息認證碼(MAC)(密鑰交換在信令中)。MAC確保消息正確和來源可靠。進一步,如果SIP使用ICE,而且分叉了,ICE在每個分叉上的交互是獨立的。信令上的密鑰交互幫助了ICE和各接收者的信息交互。

2.6ICE結束

ICE根據候選對的優先級來檢查。一種實現方法是當一個候選對檢查成功時便宣佈勝利。的確這是個合理的算法。但是,一旦丟包,一個高優先級的檢查可能會花更多時間。所以讓ICE多運行會會比較好。更本質的問題是,上面的優先級高的也許不是最優解。可以用往返時間RTT來證明。

所以ICE叫一個agent控制端,另個被控端。控制端決定用什麼候選地址。有兩種實現方法:經常提名或進取型提名( REGULAR NOMINATION or AGGRESSIVE NOMINATION)。

經常提名時,控制端一直檢查,直到至少發現一個有效候選對。然後控制端選一個未提名的候選對,在上面發送第二個STUN Request,不過在這請求上打上個標記告訴對方這個對被提名了。如下所示:

 L                        R
   -                        -
   STUN request ->             \  L's
             <- STUN response  /  check

              <- STUN request  \  R's
   STUN response ->            /  check

   STUN request + flag ->      \  L's
             <- STUN response  /  check

                       Figure 4: Regular Nomination

當最後打標記的STUN事物完成了,雙方都取消對此地址對的檢測,然後就用它傳媒體流。這個地址對叫選擇對(SELECTED PAIR)。

進取型提名時,控制端在每個STUN request上打上flag。這意味着一旦第一個檢查成功,ICE流程結束。選擇的對也就是最高優先級的。進取型提名更快但靈活性弱。


L                        R
   -                        -
   STUN request + flag ->      \  L's
             <- STUN response  /  check

              <- STUN request  \  R's
   STUN response ->            /  check

                      Figure 5: Aggressive Nomination

當媒體流建立時,如果媒體流中的候選地址(m行和c行)(默認地址)和ICE的選擇對不同時,控制端發送更新請求。

當ICE結束時,雙方都通過發更新請求來重啓。

2.7簡易實現

爲了用ICE,所有agent必須要支持它。然而有些agent在公網上。爲了這些agent,ICE定義了簡易實現。簡易實現不收集候選地址,它只包括主機地址。簡易agent不發出連接檢查,但會對連接檢查做響應。當簡易實現和完全實現互聯時,完全實現做控制端,另個做被控端。兩個簡易實現互聯時,沒有事發生。

附錄A表示什麼時候簡易實現是恰當的。

簡易實現只是個過度,如果可能最好都完全實現。

3術語

(略)

4發送初始offer

(待續)






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章