前言

上一篇介紹完中心化、去中心化、分佈式網路以及 IPv4、NAT、NAT 類型,但我們依舊還有些問題未解決

  • A, B 兩端要如何知道彼此的內部網路 IP 及外部網路 IP (STUN)
  • 上篇有提到 NAT 類型如果是對稱型時,會無法打通 P2P,當遇到此情形時該 (TURN)
  • 有沒有一種框架整合這整個 P2P 流程 (ICE)

STUN

STUN(Session Traversal Utilities for NAT,NAT 對談穿越應用程式)是一種網路協定,它允許位於 NAT(或多重 NAT)後的客戶端找出自己的公網位址,查出自己位於哪種類型的 NAT 之後以及 NAT 為某一個本地埠所繫結的 Internet 端埠。這些資訊被用來在兩個同時處於 NAT 路由器之後的主機之間建立 UDP 通信。該協定由 RFC 5389 定義。

STUN Wiki

p2p_stun

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。

當無法打通 NAT 時,就會需要用 TURN 的方式來解決 NAT 穿透

TURN Wiki

p2p_turn

ICE

ICE(Interactive Connectivity Establishment),一種綜合性的 NAT 穿越的技術。

互動式連接建立是由 IETF 的 MMUSIC 工作組開發出來的一種 framework,可整合各種 NAT 穿透技術,如 STUN、TURN(Traversal Using Relay NAT,中繼 NAT 實現的穿透)、RSIP(Realm Specific IP,特定域 IP)等。該 framework 可以讓 SIP 的客戶端利用各種 NAT 穿透方式打穿遠程的防火牆。

ICE Wiki

p2p_ice

總結

簡單來說

  • STUN Server 是讓 client 端詢問自身的 Public IP,雙方交換 Public IP 來做 P2P
  • TURN Server 是當 NAT 穿透失敗時(通常是 Symmetric NAT)的替代方案,透過 TURN server 做資料的轉傳,也稱為 Relay,走 TURN 時 TURN Server 傳輸流量等等就會需要額外費用
  • ICE 是一種框架,結合了 STUN 及 TURN 等等協議,解決單一協議缺陷的問題,列如遇上 Symmetric NAT 但沒有實作 TURN,雙方就會無法通訊.

這篇介紹了 STUN、TURN 及 ICE,下一篇將介紹 Signaling Server, WebRTC 以及 AWS KVS for WebRTC.

參考資源

Note: 如果有任何建議、問題或不同想法,歡迎留言或寄信給我,可以一起討論進步成長🙂

Leave a comment