【ICE】ICE協議看明白

這個文件描述了以UDP爲基礎的請求/回答模式的多媒體會話的NAT穿越的協議。這個協議名叫ICEICE利用了STUN協議和它的擴展版本TURNICE可以被任何請求/問答模式的協議利用。例如sip

1. 簡介

RFC 3264 定義了一個雙向會話描述協議(SDP),以建立多媒體回話。這種請求/回答模式被sip利用。

       請求/回答的協議很難穿越NAT。因爲它們想要建立一個媒體包的流。它們想要攜帶媒體源的IP地址和端口,並且將這些東西放入消息中。這些東西很難通過NAT。這個協議也想直接在兩個夥伴之間創建會話。這樣的話,就可以減少媒體數據的延遲,減少報的丟失,並且減少應用程序的消耗。然而很難克服nat穿越的問題。各種各樣的情況很難解決,但這正是本協議的目的。

各種各樣的方法已經被一些協議定義了用於nat的穿越。例如turnstunSdp。但是每種協議都有優點和缺點。我們缺少的是一種試用於多種環境的方法來解決NAT穿越。

       這個說明書定義了ICE作爲NAT穿越的方法,他可以被擴展成其他的傳輸協議。ICE是一種請求問答模式的擴展版本,

2. 預覽ICE

在經典的ICE中,我們有兩個端點想要交流。它們可以通過一些傳輸協議直接交流。客戶端可能位於也可能沒有位於NAT的後面,ICE讓客戶端來發現路徑使他們之間交流。

顯示了一個經典的環境。兩個點是LR。它們倆都在NAT的後面。NAT的類型並不知道。客戶LR想進行一個請求/問答模式的交流來交換SDP信息。交流將通過SIP 服務器進行。

ICE主要關心的是網絡中的STUN或者TURN服務器。每個客戶端都有自己的STUNTURN服務器,或者它們的一樣。

       ICE的基本觀念如下:每個客戶端有幾個個傳輸地址端口對的組合。它們可以通過這些組合同其他客戶端交流。

       這些組合包括以下:

       。在子網的傳輸地址

       。在NAT上的傳輸地址

       。在TURN Server上的轉發地址

       圖中L的任何一個組合都可以被用來同R的組合中的任何一個組合交流。然而,有些組合可能用不到。例如,如果LR都在NAT之後,它們的子網傳輸地址不能直接進行交流。ICE的目的是發現哪個地址對可以交流。ICE的目的就是嘗試所有可能的對,來找到一個或多個可以用來通信。

2.1 獲取候選者地址

爲能用好客戶端必須找到所有的地址候選者。候選者是一個ip端口對。這篇文章定了三種類型的候選者。在子網的傳輸地址叫做HOST CANDIDATE

若一個客戶端是多路的。它包含來自每一個IP地址的候選者。對於peer來說,client可被peer到達通過各種各樣的方式。若peerclient一個子網,則用子網的候選者。若在外網則用外網候選者。爲了找出哪個候選者最近,client包含了所有的候選者。

       若使用TURN協議則候選者有Relayed AddressServer Reflexive AddressLocal Address

client IP 地址和端口 X:x發送了一個TURN Allocate requestnat將會映射一個Server Reflexive Address,數據包將由host 地址候選者到Reflexive地址候選者。

當這裏有多個NAT位於client server之間時,turn request將在任何一個nat上綁定,但是隻有最靠近serverreflexisive候選者被client發現。

然後allocate request到大TURN serverTurn server分配了端口y,地址y,然後產生了一個allocate迴應。然後通知客戶端這是relayed candidateTurn服務器也通過迴應通知client 它的server reflexive 候選者—X1x1

當僅僅STUN服務器被利用的時候,客戶端發送一個STUN綁定請求道STUN serverSTUN server將通知客戶端它的server reflexive 候選者 X1x1 

2.2 連接檢查

L收集了所有的候選者信息,它將他們由高到低的優先級順序組織起來,並將他們放到SDP請求的屬性中發到R。當R接收到請求後,它進行相同的收集過程並將自己的候選者都進行了回覆。最後,每一個client都有了他們對方的完整的候選者集合。它將他們組織好,放到CANDIDATE PAIRS中,來看哪個pairs有效,每個代理進行了一些檢查。每個檢查都是一個STUN  request/response傳輸。

連接檢查的步驟很簡單:

將候選者進行優先級組織。

發送檢查每個優先級對

回覆從其他代理中收到的每個檢查。

檢查是一個四次握手的過程。

2.3 整理候選者

依照上述的搜索規則找到了所有的候選者對,爲了更快的得到記過,候選者被用一個特定的規則進行了整理。整理候選者的結果列表被叫做CHECK LIST.zhge規則在4.1.2

中被描述。它遵循兩個基本規則。

       。每個代理給候選者一個數字優先級。伴隨着候選者發送到peer中。

       。本地和遠處的候選者的優先級被結合到一起。

LR的前面都有NAT時,第二條特性對於讓ICE去工作很重要。大多數情況下,NAT將不允許包從主機發來。因此,ICE檢查每個方向,直到兩邊都有了迴應才能確定聯通。

2.4 凍結候選者

先前介紹的情況僅僅符合代理想要用一個組件來建立媒體會話的情況。一個多媒體六可能要求各種各樣的組件。每個組建必須爲這個多媒體流工作。例如RTP組件和RTCP組建。Agent通常需要建立一個或多個流的連通性。

每個流的網絡特性可能都非常相似。通常需要爲另一個組建改變候選者。

每個候選者都與一個叫FOUNDATION的屬性相關。當兩個候選者相似時,他們由相同的foundation。相同的類型,從相同的主機候選者獲得,並且STUN贏相同的協議。否則他們的foundation是不一樣的。若一個候選者有

 2.6 總結ICE

 ICE 檢查在特定的環境下執行,高優先級的候選者被率先檢查,然後是低優先級。得出結論的一個方法是隻要一個媒體流的每個組件都成功完成通信,我們就宣告成功。實際上,這是一個合理的方法。詳細的介紹在下面進行提供。然而,如果這個高優先級的連接在建立過程中,若丟了一個包,則會失敗,那我們會朝低優先級找。我們不如多花一些時間來繼續檢查,可能產生更好的後果。然而,更多的是,通過這種規則得出的優先級可能不會得到最好的效果。

所以,ICE指定了agents中得一個作爲CONTROLLING AGENT,其他的是CONTROLLED AGENT。controlling agent從所有有效的候選者中找出適用於媒體的一個進行任命。它可以用一下兩種方法。用REGULAR NOMINATION和AGGRESSIVE NOMINATION。

在regular nomination中,the controlling agent讓檢查繼續,知道至少一個有效的候選者被找到。然後在這些有效的候選者中挑選,向它任命的候選者對中發送第二次STUN請求

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