裝載自:http://blog./10294527/viewspace-121602/ ICE概要 一、ICE產生的背景 基于信令協(xié)議的多媒體傳輸是一個兩段式傳輸。首先,通過信令協(xié)議(如SIP)建立一個會話連接,通過該連接,會話雙方(Agent)通過SIP交互所承載的SDP消息彼此學習傳輸媒體時所必須的信息,針對媒體傳輸機制達成共識。然后,通常采用RTP協(xié)議進行媒體傳輸。 基于傳輸效率的考慮,通常在完成第一階段的交互之后,通信雙方另外建立一條直接的連接傳輸媒體。這樣就會減少傳輸時延、降低丟包率并減少開銷。這樣,用于SIP傳輸的鏈路就不再用于傳輸媒體。現在,問題出現了,由于不采用原來的鏈路,當傳輸雙方中任一方位于NAT之后,新的傳輸鏈接必須考慮NAT穿越問題。 通常有四種形式的NAT,對于每一中NAT方式,都有相應的解決方案。然而,每一種NAT穿越解決方案都局限于穿越對應得NAT方式,對于復雜的網絡環(huán)境來說,將會出現無法進行媒體傳輸的情況,同時這些方案給整個系統(tǒng)帶來了在不同程度上的脆弱性和復雜性。 在這種背景下,Interactive Connectivity Establishment(交互式連通建立方式)也即ICE解決方案應運而生。ICE方式能夠在不增加整個系統(tǒng)的復雜性和脆弱性的情況下,實現對各種形式的NAT進行穿越,使得媒體流在通信雙方順利傳輸。 二、ICE工作的基本原理及特性 ICE是一種探索和更新式的解決方案。通過收集自己的和通信對端的盡可能多的網絡信息(各種網絡地址),嘗試在這些地址之間建立數據通道,并在此過程中不斷更新先前收集到的信息,從而找到和選擇一條能夠進行NAT穿越的數據通道。 其特性如下:ICE實現不是很復雜,支持TCP穿透,對NAT設備沒有要求,支持所有類型的NAT,必須在客戶端實現ICE,在網絡結構中需要STUN/TURN服務器,具有與協(xié)議無關性和良好的可擴展性,安全性和健壯性都比較好。 三、ICE工作的核心 如下內容是ICE實現NAT穿透的所要完成的核心處理。包括收集地址,對地址進行排序、配對,然后執(zhí)行連通性檢查。 1、收集地址 Agent必須確定所有的候選的地址。這些地址包括本地網絡接口的地址和由它派生的其他所有地址。本地網絡地址包括本地網卡地址、VPN網絡地址、MIP網絡地址等。派生地址指的是通過本地地址向STUN服務器發(fā)送STUN請求獲得的網絡地址,這些地址分為兩類,一類是通過STUN的綁定發(fā)現用法得到的地址,稱為服務器反向候選地址(Server Reflexive Candidates)或服務器反向地址。另一類是通過中繼用法得到的,稱為中繼地址(RELAYED CANDIDATES)。上面提到的兩種用法在相應的規(guī)范中提出。 服務器反向地址實際上就是終端的網絡包經過一重或多重NAT穿透之后,由STUN服務器觀察到的經過NAT轉換之后的地址。中繼地址是STUN服務器收到STUN請求后,為請求發(fā)起方在本機上分配的代理地址,所有被路由到該地址的網絡包將會被轉發(fā)到服務器反向地址,繼而穿透NAT發(fā)送到終端,因此如名字所示,它是STUN服務器完成中繼功能的地址。 為了找到服務器反向地址,Agent通過每一個主機候選地址(通過綁定主機某個接口和端口而獲取的候選地址),使用綁定發(fā)現用法(Binding Discovery Usage [11])發(fā)送一個STUN綁定請求給STUN服務器(STUN服務器的地址已經配置或者可以通過某種途徑學習到)。當Agent發(fā)送綁定請求,NAT將分配一個綁定,它映射該服務器反向地址到主機候選地址。這樣,通過主機候選地址發(fā)送的外發(fā)包,將通過NAT轉換為通過服務器反向地址發(fā)送的包。發(fā)往服務器反向候選地址的包,將被NAT轉換為發(fā)往該主機候選地址的包,并轉發(fā)給Agent。 當Agent與STUN服務器之間存在多重NAT,那么STUN請求將會針對每一個NAT創(chuàng)建一個綁定,但是,只有最外部的服務器反向地址會被Agent發(fā)現。如果Agent不在任何NAT之后,那么,基候選傳輸地址將與服務器反向地址相同,服務器反向地址可以忽略。 關于中繼地址,STUN中繼用法允許STUN服務器作為一個媒體中繼器進行工作,在L與R之間進行轉發(fā)。為了發(fā)送消息到L,R必須發(fā)送消息給媒體中繼器,通過媒體中繼器轉發(fā)給L。反之亦然。 從L到R的消息其地址信息將兩次被重寫:第一次被NAT,第二次被STUN中繼服務器。這樣,R所了解的想與之通信的地址就是STUN中繼服務器的地址。這個地址就是中繼地址。 2、連通性檢查 Agent L收集到所有的候選地址后,就將它們按優(yōu)先級高低進行排序,再通過信令信道發(fā)送給Agent R。這些候選地址作為SDP請求的屬性被傳輸。當R收到請求,它執(zhí)行相同的地址收集過程,并且把它自己的候選地址作為響應消息發(fā)給請求者。這樣,每個Agent都將有一個完整的包含了雙方候選地址的列表,然后準備執(zhí)行連通性檢查。 連通性檢查的基本原理是: l 按照優(yōu)先順序對候選地址進行排序。 l 利用每個候選地址發(fā)送一個檢查包。 l 收到另一個Agent的承認檢查包。 首先,Agent將本地地址集和遠程地址集進行配對,如本地有n個地址,遠程有m個地址,那么配成n*m對。對這些地址對進行連通性檢查是通過發(fā)送和接收STUN請求和響應完成的,此時,Agent在每個地址對的本地地址上,必須同時充當STUN服務器和STUN客戶端的角色。若通信雙方以某一地址對通過一個完整的四次握手,那么該地址對就是有效地址對。 四次握手是指:當通過地址對中的本地地址向地址對中遠程地址發(fā)送一個STUN請求,并成功收到STUN響應,稱該地址對是可接收的;當地址對中的本地地址收到地址對中遠程地址的一個STUN請求,并成功地響應,則稱該地址對為可發(fā)送的。若一個地址對是可接收的,同時又是可發(fā)送的,則稱該地址對是有效的,即通過連通性檢查。則此地址對可用于媒體傳輸。 通常在對稱NAT的情況下,在地址對驗證過程中,會出現發(fā)現以前收集地址時沒有收集到的地址對,這時就要對這些新的地址對進行連通性檢查。 3、對候選地址進行排序 由于收集候選地址時,收集的是所有的候選地址,為了能夠更快更好的找到能夠正常工作的候選地址對,對所有組合進行排序是勢在必行的。在此說明進行排序的兩個基本原則,詳細地排序算法將在后續(xù)文檔中描述。 l Agent為它的每個候選地址設置一個數值的優(yōu)先級,這個優(yōu)先級連同候選地址對一起發(fā)送給通信的對端。 l 綜合本地的和遠程的候選地址的優(yōu)先級,計算出候選地址對的優(yōu)先級,這樣,雙方的同一個候選地址對的優(yōu)先級相同。以此排序,則通信雙方的排序結果相同。 4、進行SDP編碼 為了實現基于ICE的NAT穿越,對SDP進行了擴展,主要增加了四個屬性。分別是candidate屬性、ice-ufrag屬性、ice-pwd屬性和remote-candidates屬性。 candidate屬性為通信提供多種可能的候選地址中的一個。這些地址是使用STUN的端到端的連通性檢查為有效的。 remote-candidates屬性提供請求者想要應答者在應答中使用的遠程候選傳輸地址標識。 ice-pwd屬性提供用于保護STUN連通性檢查的密碼。 ice-ufrag屬性提供在STUN連通性檢查中組成用戶名的片斷。 四、一個例子 兩個Agent,L和R,使用ICE。它們都有單個IPv4接口。對于Agent L地址為10.0.1.1,對于R,192.0.2.1。它們都配置了單獨的STUN服務器(實際上是同一個),STUN服務器在192.0.2.2地址的3478端口監(jiān)聽STUN請求。這個STUN服務器同時支持綁定發(fā)現和中繼功能。Agent L位于NAT之后,R位于公網。NAT有一個終端獨立的映射特性和依靠地址的過濾特性。NAT公網端的地址是192.0.2.3。網絡結構圖如下所示。 ![]() 圖一 ICE的典型應用環(huán)境
為了便于理解,傳輸地址用變量名代替。變量名的格式是entity-type-seqno,其中entity是具有該傳輸地址的接口所在實體,具體為是L、R、STUN或NAT之一。type不是PUB(地址位于公網)就是PRIV(地址位于內網)。seqno是在實體上的相同類型的各傳輸地址各自的序列號。每個變量都有一個IP地址和端口號,分別用varname.IP和varname.port表示,varname就是變量名。 STUN服務器有公網的傳輸層地址STUN-PUB-1(192.0.2.2:3478),綁定發(fā)現用法和中繼用法都使用這個地址。但在此處,兩個Agent都不使用中繼用法。 在呼叫過程中,STUN消息有被許多屬性注解。“S=”屬性表明消息的源傳輸地址,“D=”屬性表明消息的目標傳輸地址?!?/span>MA”屬性用于STUN綁定響應消息,指明映射的地址。 基于以上規(guī)定,媒體傳輸的初始過程如下圖所示。 消息1-4獲取服務器反向地址。消息5發(fā)送一個請求給R,該請求包括了本地主機候選地址和服務器反向地址。R收到消息5之后,通過消息6-7獲取服務器反向地址(由于R不在NAT之后,服務器反向地址與主機候選地址相同),然后發(fā)送一個應答(消息8)給L,應答中包括主機候選地址。至此,通信雙方都獲取了彼此的網絡信息。 雙方都對獲取的傳輸地址進行配對,確定優(yōu)先級并排序。之后,R開始執(zhí)行其連通性檢查(消息9),由于來自L的候選地址是一個私有地址,所以此檢查必定失敗,而被丟棄。 同時,L收到應答后,除去包含了服務器反向地址的那對檢查,只剩一對檢查?;诖藢Φ刂?,執(zhí)行連通性檢查(消息10),經過NAT轉換后發(fā)送給R(消息11)。R收到之后發(fā)送響應給L(消息12),該消息中通過MA屬性指明映射地址,經過NAT之后返回給L(消息13),這樣L的連通性檢查成功。L檢查收到的消息13,以NAT-PUB-1為本地地址,R-PUB-1為遠程地址創(chuàng)建新的地址對,并添加到有效列表中。 ICE查看有效列表,發(fā)現有一對存在,就發(fā)送一個更新請求(消息14)給R,這個請求用于刪除沒有被選中的候選地址,并且指示遠程地址。 消息11到達R之后,會觸發(fā)R執(zhí)行一個相同地址對的檢查,消息16-19反映了這個過程,在收到消息19的響應之后,R會像L一樣創(chuàng)建一對新的地址對(以R-PUB-1為本地地址,以NAT-PUB-1為遠程地址),并添加到有效列表中。這樣就可以進行媒體傳輸了。 五、總結 本文檔從ICE的產生背景入手,討論了ICE的基本原理及其特性,并對其工作的幾個核心部位進行了簡單的概述,在此基礎之上,分析了一個基于ICE通信的例子。所涉及的內容都是在宏觀上的考慮,進一步的詳細論述將在后續(xù)工作中展開。 |
|
來自: NaturalWill > 《協(xié)議》