1. 程式人生 > >STUN, TURN, ICE介紹

STUN, TURN, ICE介紹

技術 即使 否則 探索 收集 服務器 用戶 應用層 不支持

STUN

STUN協議為終端提供一種方式能夠獲知自己經過NAT映射後的地址,從而替代位於應用層中的私網地址,達到NAT穿透的目的。STUN協議是典型的Client-Server協議,各種具體應用通過嵌入STUN客戶端與STUN Server端通訊來完成交互。

技術分享

在典型的運用STUN進行NAT穿透的場景中,STUN客戶端首先向位於公網上的STUN服務器 發送Binding Request消息,STUN服務器接收到請求消息後識別出經過NAT轉換後的公網地址60.1.1.1:12345,將其附加在Binding Response消息中返回給客戶端。客戶端得到這個地址 後用它替換SDP中的私網地址與終端B完成媒體協商。使用STUN進行NAT穿透對應用的要 求是必須使用同樣的端口與STUN服務器交互和進行應用層通訊,比如當希望使用端口 37000進行RTP包的NAT穿透時,必須同樣使用37000端口與STUN服務器通訊,否則從STUN 服務器獲得的NAT映射後的地址一般與實際地址時不一樣的。另一個要求是STUN客戶端與 服務器端的通訊和應用使用獲得的NAT映射地址進行應用層通訊在時間上必須有連貫性, 這源於NAT設備建立的綁定有生存時間,當原綁定消亡後,NAT設備為同一個私網地址建 立的新綁定往往不同,因此轉換後的公網地址是不同的。

STUN方案的特性如下表:

特性

說明

實現復雜度

實現簡單

TCP穿透支持

不支持

對現有設備的要求

要求客戶端支持,對現有NAT設備無改動要求,需增加STUN服務器

可擴展性

可擴展性好,與具體協議無關

安全性

一般

健壯性

差,不支持symmentric型NAT

其他

支持自動檢測NAT類型,使用戶即使在使用STUN協議無法實現NAT

穿透時還可以根據NAT類型自主選擇其他可使用的NAT穿透方案

TURN

TURN解決NAT穿透的思路與STUN類似,都是通過修改應用層中的私網地址達到NAT穿透。 與STUN不同的是,TURN是通過兩方通訊的“中間人”的方式實現穿透,在這種方式下, 要進行通訊的兩方分別與位於公網上的TURN服務器建立各自的連接進行通訊,由服務器負 責在兩方之間進行數據轉發。要達到這個目的,實現TURN客戶端的終端必須在通訊開始前 與TURN服務器進行交互,得到服務器為其臨時分配的位於TURN服務器上的公網地址,客戶端使用它替換位於應用層中的私網地址。

技術分享

TURN方案的特性如下表:

特性

說明

實現復雜度

難於實現。TURN的安全性設計增加終端設置的復雜度

TCP穿透支持

支持

對現有設備的要求

對現有NAT設備無要求,要求客戶端支持,需增加TURN服務器s

可擴展性

可擴展性好,與具體協議無關

安全性

一般

健壯性

好,支持所有類型的NAT

其他

與P2P穿透方式相比,性能時relay穿透方式的弱點。另外TURN無法

實現負載分擔,解決的方式是把media relay服務器的分配工作放在 SIP proxy完成

ICE

與STUN和TURN相比,ICE並非是解決NAT穿透問題的協議,而是一個框架,在這個框架中, 可以整合其他現存的NAT穿透協議,如STUN、TURN、RSIP等。區別於其他的NAT穿透解 決方案,ICE是一種探索和更新式的解決方案,通過搜集自身和對端盡可能多的網絡信息(各種網絡地址),嘗試在這些地址間建立數據通道,並在這一過程中不斷更新先前收集到的信息,從而找出和選擇能夠進行NAT穿透的數據通道。

技術分享

ICE方案的特性如下表:

特性

說明

實現復雜度

一般

TCP穿透支持

支持

對現有設備的要求

對NAT設備無要求,支持所有類型的NAT設備。客戶端必須支持,

網路結構中需增加STUN/TURN服務器

可擴展性

可擴展性好,與具體協議無關

安全性

較好

健壯性

好,適用與所有NAT及NAT拓撲類型,且由於存在中繼服務器,NAT

穿透一般總是能成功

其他

http://www.voip-info.org/wiki/view/ICE

http://www.voip-info.org/wiki/view/TURN

http://www.voip-info.org/wiki/view/STUN-bis

試驗UDP打洞穿透NAT

http://www.hankcs.com/program/network/test-udp-holes-penetrating-nat.html#comments

STUN, TURN, ICE介紹