ICE協議摘錄---draft-ietf-mmusic-ice-19

1、簡介

  ICE協議是一種NAT穿透技術,用於通過offer/answer模型建立的基於UDP的流媒體傳輸場景(可以擴展來處理其它協議如TCP)。ICE協議是offer/answer模型的一種擴展,使用在SDP offers和SDP answers中提供的多個ip地址及端口工作,這些IP及端口會被用於連通性檢查(connectivity check) 連通性檢查通過修正過的STUN協議[Session Travelsal Utilities for NAT]進行。 ICE也使用TURN協議。
在這裏插入圖片描述

2、ICE協議預覽

  典型的ICE使用場景中會有兩個需要進行通信終端(endpoint)叫做agent。這個兩個agent能通過使用一些信令如sip來進行間接的SDP信息交換。 ICE啓動時,agent並不知道他自身的網絡拓撲結構,但是ICE允許agent去發現他自己的拓撲結構和找出兩個agent之間可能進行通信的所有網絡路徑。
在這裏插入圖片描述
  下圖展示了ICE使用的典型場景。兩個**agent分別是 L 和 R,都位於各自的NAT之後,而且NAT的類型及屬性未知。這個兩個agent能通過offer/answer模式來交換SDP信息。一般的這個SDP信息交換是通過sip服務器來進行的。
在這裏插入圖片描述
  每個agent都有自己的STUN或TURN服務器。 ICE協議的本質:每一個agent有一系列的
候選傳輸地址**(這些候選地址由ip地址、端口及傳輸協議構成,在這個文檔裏傳輸協議只能是UDP)可用於與其它agent通信。這些可用於和其他agent通信的候選地址可能包括以下幾種:

《1》、內網地址;
《2》、server reflexive地址:服務器反射地址,一般是agent所在的NAT的公網地址;
《3》、中繼地址(relayed addreaa):TURN 服務器分配的傳輸地址;

在這裏插入圖片描述
   理想情況下L的所有候選地址都能與R通信,但是通常情況下L的大多數候選地址是不能和R通信,此時就需要ICE協議去發現L和R的哪些地址對之間是可以通信,這也是ICE存在的原因。ICE通過有組織的嘗試所有可能地址對來發現可用的地址對
在這裏插入圖片描述

3、收集候選地址

  候選地址一般有三種—本機地址,服務器反射地址及中繼地址。agent會使用STUN或TURN協議來發現候選地址。當有使用TURN 服務器時,服務器反射地址及中繼地址都通過TURN協議被發現。如果只使用了STURN服務器,則只能發現服務器反射地址。
TURN協議是使用Allocation請求,STUN協議是使用STUN Bing Request
在這裏插入圖片描述

4、連通性檢查(Connectivity Checks)

  當L將它的候選地址採集完畢之後,它會將他們按照優先級從高到低排序然後通過信令通道(如sip信令)發送給R。當R接收到這個消息後會進行相同的候選地址流程然後將自己的候選地址通過響應信令的方式發送給L。當這個流程結束是L和R都擁有了自己和對端的所有候選地址的列表。 接着L和R都會將這些候選地址配對,產生所有可能的候選地址對列表。爲了檢測哪對地址可用,每個agent會進行一些列的CHECK操作。每個檢測都通過在一個地址對之間發送STUN Binding請求/響應事務來實現,客戶端發送STUN Bind請求,對端響應該請求
在這裏插入圖片描述
基本的連通性檢查流程:
在這裏插入圖片描述
  注意:STUN請求的發送和接收使用的IP地址和端口必須和流媒體(如RTP和RTCP)使用的的IP地址及端口一致。因此agent通過數據包的內容來分辨STUN和RTP/RTCP而不是使用端口來進行。
在這裏插入圖片描述
   因爲STUN Binding被用於連通性檢查,所以STUN Binding響應會包含agent的所在的NAT的公網傳輸地址。如果該公網傳輸地址不在已經保存的候選地址列表中,這個地址會成爲新的候選地址,成爲對端反射地址(PEER REFLEXIVE CANDIDATE)。 當R接收到L發送的檢測消息時,R馬上在相同地址對上發送一個聯通檢測消息給L。這樣做加速了查找有效地址對的流程,稱爲觸發檢查(TRIGGERED CHECK)
在這裏插入圖片描述
抓包:
在這裏插入圖片描述
在這裏插入圖片描述

5、候選地址排序

   爲了能更快的找到候選地址對,agent會按照特定規則對候選地址進行排序。排序後的候選地址對稱爲CHECK LIST。該特殊規則簡化爲一下兩點:
《1》、每個agent將候選地址一個數字優先級,然後該優先級隨地址一起被髮往對端。
《2》、將本地及對端的優先級組合在一起,這樣每個agent就擁有了一樣的候選地址對排序列表。
在這裏插入圖片描述
   如果R和L都位於NAT之後,上面第2個規則對ICE來說就非常重要。NAT一般會將來自外部主機不請自來的數據包丟棄,除非位於NAT內部的agent先發送給外部主機(建立NAT映射表)。因此當位於NAT內部的兩個agent都未發送check請求之前,ICE 在兩個方向的連通性檢查會失敗。
在這裏插入圖片描述

6、Fronzen候選者COMPONENT

   媒體流中僅含有一個傳輸地址的部分,如音頻,視頻都算一個**COMPONENT**;每個媒體流可能包含很多component,每個component都單獨的爲這個媒體流執行所需功能。對於基於RTP的流媒體,它有兩個component,一個是RTP,另一個是RTCP。
在這裏插入圖片描述

7、Concluding ICE(ICE推斷??)

   ICE將一個agent命名爲CONTROLLING AGENT,與之通信的另一個爲CONTROLLED AGENT。controlling agent會從所有有效的候選地址對中推薦一個用於媒體傳輸。這種推薦通過可通過以下兩種方法實現:
REGULAR NOMINATION: controlling agent通過該方法進行連通性檢測時會一致按列表順序檢測,直到遇到至少一個可用地址對。controlling agent選中該地址對後會在該地址對上發送第二次STUN請求,這個請求需要攜帶一個flag標誌,用以告訴對端這個地址是controlling推薦使用的地址。一旦對端對對這個帶flag的地址進行了正確響應,兩個agent端的剩餘地址對檢測就要全部停止,接下來就要用這個推薦的地址來進行媒體傳輸,這個推薦的地址對被稱爲SELECTED PAIR。
在這裏插入圖片描述
AGGRESSIVE NOMATION: 在使用該種方法是,controlling agent發送的每個STUN 請求都帶有flag標誌,因此無需發送第二次STUN 請求。這種方法比regular推薦方法快但是沒那麼靈活。
在這裏插入圖片描述

在這裏插入圖片描述

8、簡化實現(Lite Implementations)

爲了使ICE在電話撥打中使用,兩邊agent都需要支持簡化版本的ICE實現。對於只實現簡版的agent其需要有一個公網IP簡化版本的ICE不會收集候選地址,其候選地址只包含本機IP,也不包含任何狀態機(進行連通性檢查時候選地址對有狀態變化)。 簡化版本的ICE不需要進行連通性檢查,只需要對發送過來的連通性檢查進行響應。 當一個簡化版本的agent和全面版本的agent連接時,後者充當controlling角色,前者作爲controlled。當兩個簡版agent進行連接時,兩個agent都不會進行連通性檢查。

9、原網站

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