2012年7月29日 星期日

[筆記] NAT Traversal and Peer to Peer


Source: html5rocks

Cloud Computing 被翻成雲端運算,現在又被解讀成雲與端的整合 (其實還蠻貼切的),最近又可以再擴大解釋成 - 雲與端雲與雲端與端之間的互動整合 (好像在勞口令),像是Line和whatsapp 就是最好的例子,透過雲來協助端與端(手機與手機)之間的互動和溝通。

除了手機與手機之間的溝通,另一個應用就是物聯網(IOT)的概念,讓Device 與 Device 互相溝通,或是手機與Device 互相溝通。但是隨著端點(End Device)的種類越來越多,而端與端之間所處的網路環境也越來越複雜,這時就會遇到許多問題,其中NAT Traversal與穿越防火牆的問題,就是其中之一,還好再此之前傳統的P2P (IM、VoIP...等)相關應用領域就已經有相當多的解決方案和案例可以參考。

(把收集到的資料整理如下)

NAT穿透 (NAT traversal)


NAT穿越(NAT traversal)涉及TCP/IP網路中的一個常見問題,即在處於使用了NAT設備的私有TCP/IP網路中的主機之間建立連接的問題。

會遇到這個問題的通常是那些客戶端網路交互應用程序的開發人員,尤其是在對等網路和VoIP領域中。IPsec VPN客戶普遍使用NAT-T來達到使ESP包通過NAT的目的。

儘管有許多穿越NAT的技術,但沒有一項是完美的,這是因為NAT的行為是非標準化的。這些技術中的大多數都要求有一個公共伺服器,而且這個伺服器使用的是一個眾所周知的、從全球任何地方都能訪問得到的IP位址。一些方法僅在建立連接時需要使用這個伺服器,而其它的方法則通過這個伺服器中繼所有的數據——這就引入了頻寬開銷的問題。[0]

常用的NAT穿越技術就是下面兩者:

STUN


STUN全名 Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),(翻譯:NAT的UDP簡單穿越),是一種網路協議,它允許位於NAT(或多重NAT)後的客戶端找出自己的公網地址,查出自己位於哪種類型的NAT之後以及NAT為某一個本地埠所綁定的Internet端埠。這些信息被用來在兩個同時處於NAT 路由器之後的主機之間建立UDP通信。該協議由RFC 3489定義。[1]


TURN 


TURN(全名 Traversal Using Relay NAT),是一種資料傳輸協議(data-transfer protocol )。允許在TCP或UDP的連線上跨越 NAT防火牆。TURN是一個client-server協議。TURN的NAT穿透方法與STUN類 似,都是通過取得應用層中的公有地址達到NAT穿透。但實現TURN client的終端必須在通訊開始前與TURN server進行交互,並要求TURN server產生"relay port", 也就是relayed-transport-address。這時 TURN server會建立peer, 即遠端端點(remote endpoints), 開始進行中繼(relay)的動作,TURN client利用relay port將資料傳送至peer, 再由peer轉傳到另一方的TURN client。[2]

ICE


互動式連接建立(Interactive Connectivity Establishment),一種綜合性的NAT穿越的技術。互動式連接建立是由IETF的MMUSIC工作組開發出來的一種framework,可整合各種NAT穿透技術,如STUNTURN(Traversal Using Relay NAT,中繼NAT實現的穿透)、RSIP(Realm Specific IP,特定域IP)等。該framework可以讓SIP的客戶端利用各種NAT穿透方式打穿遠程的防火牆。 如果UDP傳送失敗,ICE會改試TCP: 先是 HTTP,然後改試 HTTPS。此外如果使用STUN (UDP)直接連線失敗,ICE會切換道TURN (relay模式),ICE uses an intermediary (relay) TURN server。所以 ICE 其實就是混和TURN 和STUN的行為模式的通訊協定。 [3]

Java Open Source Library



延伸閱讀:
Reference:

[0] WIKI - NAT Traversal
[1] WIKI - STUN
[2] WIKI -TURN
[3] WIKI - ICE

張貼留言