WebRTC技術研究三基於ICE的VoIP穿越NAT改進方案

一 引言

    隨着計算機網絡技術的不斷髮展,互聯網規模飛速膨脹,大量企業和駐地網採用了私有網絡通過NAT/防火牆出口來接入公共網絡。而由於SIP包頭中含有很多對於路由、接續SIP信令和建立呼叫連接必不可少的地址信息,這樣引發了業界對於SIP2穿越NAT/防火牆問題的研究。

    目前,IETF已經對該問題提出了多種解決方案。例如:ALCes(Application Layer Gateways)、MiddleboxControl Protocol、STUN Simple Traversal of UDPthrough NAT)、TURN(Traversal Using Relay NAT)、RSIP(Realm Specific IP)、Symmetric RTP等。然而,當這些技術應用於不同的網絡拓撲時都有着顯著的利弊,以至於只能根據不同的接入方式來應用不同的方案,所以,未能很好地解決A11-NATⅢ的問題,同時還會給系統引入許多複雜性和脆弱性因素。此外,由於NAT/防火牆已經大量應用,SIP設備也已經比較成熟,對它們進行升級來支持多媒體通信穿越NAT/防火牆的代價將相當的大。因此,一種不需要升級任何現有網絡設備,能夠穿越各種NAT/防火牆並且方便在現有網絡中實施的解決方案成爲迫切的需要。

    本文試圖尋找一種能夠穿越各種類型的NAT/防火牆,無需對現有NAT/防火牆沒備做任何改動的解決方案——ICE解決方案,這種方式比以前的解決方案更加靈活,具有廣闊的應用前景。

二   現有NAT解決方案的比較分析

主流的NAT穿越解決方案包括STUN、TURN、Proxy及隧道穿越等,這幾種方式各具優缺點,比較如下:

    (1)STUNml(simple traversal of UDP over NAT)的原理是通過某種機制預先得到內部私有IP地址對應在出口NAT上的對外公網IP地址,然後在報文負載中所描述的地址信息就直接填寫出口NAT上的對外IP地址。其最大的優點是無需對現有NAT/防火牆設備做任何改動。侷限性在於需要應用程序支持STUN CLIENT的功能,同時STUN並不適合支持TCP連接的穿越。

    (2)TURN即通過Relay方式穿越NAT,也是私網中的SIP終端通過某種機制預先得劍TURN SeI-ver上的公網地址,私網終端發出的報文都要經過TURN Serve:進行Relay轉發。這種方式除了具有STUN方式的優點外,還解決了STUN應用無法穿透對稱NAT(SymmetricNAT)以及類似的Firewall設備的缺陷,侷限性在於需要SIP終端支持TURN Client,並增大了包的延遲和丟包的可能性。

    (3)Proxy方式是指通過對私網內用戶呼叫的信令和媒體||d時做Relay來實現對NAT/防火牆的穿越。由於不用對運營商和客戶端的現有網絡設備進行任何改造,具有很強的適應性,組網靈活,可滿是NGN初期多樣化的組網和用戶接入。

    (4)隧道穿越技術的基本思想是通過把需要穿越的數據流封裝徵某種隧道中,從而繞過NAT/防火牆。它在很大程度上解決了對於不問應用協議需要開發不同穿越策略的辦法,但是必須多媒體終端和服務器能夠支持隧道,這是一個比較大的限制條件。

3 穿越NAT/防火牆方案的實現

    3.1 ICE方式

    交互式連通建立方式ICE(Interactive ConnectivityEstablishment)並非一種新的協議,它不需要對STUN,TURN或RSIP進行擴展就可適用於各種NAT。ICE是通過綜合運用上面某幾種協議,使之徵最適合的情況下工作,以彌補單獨使用其中任何一種所帶來的固有缺陷。對於SIP來說,ICE只需要定義一些SDP(Sessionescription Protoc01)附加屬性即可,對於別的多媒體信令協議也需要制定一些相應的機制來實現。本文是針對SIP呼叫流程實現ICE的功能。

    這種方式的優點是可以根據通訊雙方所處的網絡環境,選取適合穿越NAT/防火牆的方式。首先,獲取用戶所徵網絡中NAT的類型,如果用戶沒有設置使用何種方式連接,那麼默隊首先使用UDP連接,如果一定時間內沒有連接成功,接着使用TCP連接,同樣如果沒有在一定時間內連接成功,那麼將採用其他方式如Upnp、Httptunnel。如果所有穿越方案都失敗後,將結果返回給用戶,由用戶決定是否重試。

    3.2 ICE作用

將NAT TURN打包在一起,做一個最優選擇
首先嚐試p2p,如有兩臺服務通過,也會選擇一個最優服務
不通則選擇TURN,如有多個節點,上海TURN不通,則選擇北京的TURN
總之,將所有可能性羅列好,在其中找到一條最優路徑,將數據發送,ICE就是讓兩個終端去得到所有能夠連接到對方終端的通路,並找出最優的可通通路

  • 第一種通路,本機IP,如果兩個終端在一個服務下,直接通過本機IP連通
  • 第二種通路,穿越NAT,雙方終端訪問STUN服務,都拿到外網IP,嘗試P2P穿越,成功既可以連接
  • 第三條通路,P2P不成功,通過中繼服務器Relay server

3.3 ICE 具體工作

  1. 收集 Candidate
  2. 對 Candidate Pair 排序 (對候選者對 進行排序,認爲優先級高的 先做測試)
  3. 連通性檢查(嘗試連通)

3.4 ICE Candidate

每個 candidate(候選者)是一個地址
例如:a = candidate: ...UDP/TCP ...192.169.1.2 1816 type host
每個候選者包括:協議、IP、端口、類型

3.5 Candidate 類型

  • 主機候選者(網卡自己的IP地址和端口)
  • 反射候選者(通過NAT之後的IP地址和端口)
  • 中繼候選者(通過TURN服務開通的IP地址和端口)

3.6 形成 Candidate Pair

  1. 一方收集到所有候選者後,通過信令傳給對方
  2. 同樣,另一方收到候選者後,也做收集工作
  3. 當雙方拿到全部列表後,將候選者形成配對兒

3.7 連通性檢查

  1. 對候選對進行優先級排序
  2. 對每個候選對進行發送檢查
  3. 對每個候選對進行接收檢查(和發送同時進行)

四.webrtc官方samples自帶ICE servers

五.總結

    ICE方式的優勢是顯而易見的,它消除了現有的機制的許多脆弱性。例如,傳統的STUN有幾個脆弱點,其中一個就是發現過程需要客戶端自己去判斷所在NAT類型,這實際上不是一個可取的做法。而應用ICE之後,這個發現過程己經不需要了。另一點脆弱性在於STUN,TURN等機制都完全依賴於一個附加的服務器,而ICE利用服務器分配單邊地址的同時,還允許客戶端直接相連,因此即使STUN或TRUN服務器中有任何一個失敗了,ICE方式仍可讓呼叫過程繼續下去。此外,傳統的STUN最大的缺陷在於,它不能保證在所有網絡拓撲結構中都正常工作,對於TURN或類似轉發方式工作的協議來說,由於服務器的負擔過重,很容易出現丟包或者延遲情況。而ICE方式正好提供了一種負載均衡的解決方案,它將轉發服務作爲優先級最低的服務,從而在最大程度上保證了服務的可靠性和靈活性。此外,ICE的優勢還在於對IPv6的支持。由於廣泛的適應能力以及對未來網絡的支持,ICE作爲一種綜合的解決方案將有着非常廣闊的應用前景。

參考文章:

http://blog.csdn.net/lionzl/article/details/7215978

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

 

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