NAT穿越下的STUN,TURN和ICE

前言

最近由於在研究WebRTC,由於對音頻視頻模塊基本都已經瞭解,就對其中的網絡模塊針對性的瞭解一下。算法

clipboard.png
這裏面Transport層主要涉及3個層次SRTP、Multiplexing、P2P(STUN+TURN+ICE),如今就主要針對P2P這部分STUN、TURN和ICE的來源和設計初衷作個簡單的介紹,不涉及具體的算法和技術實現,主要內容主要是翻譯自外網的這篇文章。裏面有一些公司介紹廣告就不說了。安全

IP地址和視頻鏈接的一個棘手問題是NAT的限制和防火牆對創建可靠呼叫的影響(A setback to IP and Video connectivity has been the restriction NATs and firewalls pose to reliable call completion.這句原話的語法拆解了很久= =)。NAT和防火牆在安全和增強因特網的可用性上扮演了很重要的角色,可是同時也形成了在創建IP終端上嚴重的問題。IETF(國際互聯網工程任務組 The Internet Engineering Task Force,簡稱 IETF)建立裏STUN, TURN和ICE標準來解決NAT穿越的問題。服務器

STUN能幫助鏈接IP終端:網絡

  • 發現他們是否在NAT或者防火牆後面
  • 肯定公網IP地址和防火牆的類型。STUN而後使用這些信息去協助創建點對點的IP鏈接

雖然STUN在解決大部分用戶設備(路由器之類的)的NAT問題上頗有效,可是它在不少公司網絡上問題上不是頗有效。TURN,全稱Traversal Using Relay NAT,經過提供使用一個流媒體預備服務來實現終端之間的流媒體傳輸的降級NAT穿越技術。框架

ICE是一個權衡STUN、TURN來提供能夠來的IP創建和媒體傳輸的框架,經過一個SIP提供一個終端交換候選IP地址和端口的模型(好比一個私有地址和TURN服務地址)。ide

什麼是NAT

NAT是指Network Address Translation。歸納來講就是路由器把本地私有子網IP地址轉換稱公網(一般是一個由因特爾服務供應商ISP分配的IP地址)IP地址的修改IP信息的過程。現有的一個主要挑戰就是在網絡中的客戶端之間創建直接鏈接。編碼

如今有4中NAT在現在的路由器中,根據最少限制性到最多限制性來排序能夠分爲:spa

Full cone(全錐型)

一旦一個內網地址(iAddr:iPort)被映射到一個外部網絡地址(eAddr:ePort),任何iAddr:iPort的包都會經過eAddr:ePort來發送。任何外部主機均可以經過給eAddr:ePort發送網絡包來給iAddr:iPort傳送信息。翻譯

Address-restricted cone(限制型錐形)

一旦一個內網地址(iAddr:iPort)被映射到一個外部網絡地址(eAddr:ePort),任何iAddr:iPort的包都會經過eAddr:ePort來發送。可是一個外部的主機(hAddr:any)只有在iAddr:iPort以前給hAddr:any發送過網絡包的狀況下才能夠經過eAddr:ePort給iAddr:iPort發送網絡包,any這裏指任意端口。(總結下來就是隻有內部給外部主機發送過信息,才能經過外部地址端口往內部發送)。設計

Port-restricted cone(端口限制型錐型)

一旦一個內網地址(iAddr:iPort)被映射到一個外部網絡地址(eAddr:ePort),任何iAddr:iPort的包都會經過eAddr:ePort來發送。可是一個外部的主機(hAddr:hPort)只有在iAddr:iPort以前給hAddr:hPort發送過網絡包的狀況下才能夠經過eAddr:ePort給iAddr:iPort發送網絡包,any這裏指任意端口。和地址限制錐型差很少,只是還多了外部主機的端口的限制。

Symmetric(對稱型)

每一個從相同內部IP地址和端口到特定目標IP地址和端口的請求都會被映射到一個特殊的外部源IP地址和都端口上,若是相同的內部主機發送了包給相同的源地址和端口,可是是不一樣的目標,也會使用不一樣的映射。只有一個外部的主機從內部主機接收到過包,才能發送回去。

什麼是STUN

STUN是指Session Traversal Utilities for NAT。是一個被NAT穿越算法用來協助發現網絡環境信息的網絡協議/包格式(IETF RFC 5389) 。發送方在發送服務器和發送客戶端之間傳輸使用STUN包。
若是端之間的路由器使用了全錐型,限制型錐形、端口限制型錐型,那麼就會發現一個單獨STUN的直接鏈接。若是有有路由器使用了對稱型NAT,那麼只有在其餘路由不用對稱型或者端口限制型NAT的狀況下才能發現一個STUN包的鏈接。可是不用擔憂!發送方會自動的發現一個替換TURN的路徑。

什麼是TURN

TURN是指Traversal Using Relays around NAT。就像STUN,它是一個被NAT穿越算法用來協助發現網絡內終端直接鏈接路徑的網絡協議/包格式(IETF RFC 5766)。和STUN不一樣的是它用了一個公網的替換中介提換終端之間的包。當沒有其餘選擇可用的時候,發送方使用TURN來交換流媒體包。由於它定製了服務資源因此也會由於這多的一步產生必定的延遲。

TURN只有在一個端使用了對稱型NAT,而且其餘的端使用了對稱型NAT或者端口限制型NAT的時候才須要。

什麼是ICE

ICE是指Interactive Connectivity Establishment。它定義了一個技術來使用SDP,STUN和TURN來發現網絡裏端之間的路徑。發送方實現符合標準的ICE specification(IETF RFC 5245) ,就能兼容其餘的端來實現一樣的spec。

每一個RTP包都有一個7位的payload類型(0-127)和一個二進制payload。payload類型用於區分payload的格式,而且在建立發送方鏈接的時候須要定義好。IANA留出了一些payload type用於特定的格式。若是你在用一個不被IANA識別的編碼格式,那麼根據他們的建議,最好用96-127中的數字。

發送方惟一的限制是payload類型72-76是留給RTCP的。這些payload類型不能被使用由於可能影響內部RTCP的處理流程。

相關文章
相關標籤/搜索