搞懂 P2P 技術 (2) - STUN x TURN x ICE

前言

上一篇我們談到中心化、去中心化、分佈式網路架構,以及 IPv4、NAT 與其穿透困難。
但還有幾個問題沒解決:

  • ✅ A/B 雙方如何知道彼此的內/外部 IP?(STUN)
  • ✅ 若遇到 Symmetric NAT,該怎麼辦?(TURN)
  • ✅ 有無一種框架整合整個 NAT 穿透流程?(ICE)

本篇會帶你搞懂這三個技術主角。


STUN 是什麼?

STUN(Session Traversal Utilities for NAT)是一種協定,
能讓 NAT 後的裝置查詢自己的 Public IP、Port 與 NAT 類型

它就像是一面鏡子,讓你知道「外界看到的自己長什麼樣」。

📘 RFC 定義:RFC 5389
📖 STUN Wiki

使用 STUN,A 和 B 就能互相交換公網 IP,進行打洞(NAT Traversal),建立直接的 P2P 連線。

TIP

STUN 是實作 P2P 通訊不可或缺的第一步,但若遇到 Symmetric NAT,它就無能為力了。


TURN 是什麼?

TURN(Traversal Using Relay NAT)是一種「中繼協定」,
當 STUN 打洞失敗時(如遇 Symmetric NAT),就得靠 TURN。

它的運作邏輯是:

  • Client 先與 TURN Server 要求建立中繼連線(relay port)
  • 所有資料先送往 TURN Server,再轉發到對方

這就像你 A、B 無法直線通話,只好找個朋友幫你轉話

📖 TURN Wiki

WARNING

TURN 解決連線問題,但所有資料都會繞過 TURN server,因此會增加頻寬成本與延遲,商業服務通常需部署自有 TURN 伺服器。


ICE 是什麼?

ICE(Interactive Connectivity Establishment)是一種綜合性 NAT 穿透框架。
它整合了 STUN、TURN、RSIP 等協定,讓通訊流程更智慧。

運作邏輯:

  1. 優先嘗試使用 STUN 建立 P2P 直連
  2. 若 STUN 失敗,再自動 fallback 至 TURN 中繼通訊
  3. 判斷路徑最佳解後,確立穩定連線

📖 ICE Wiki

TIP

ICE 是現代 P2P 通訊的主流做法,像 WebRTC、Zoom、Google Meet 都內建 ICE 機制處理 NAT 穿透。


總結

三個技術的角色如下:

協定 功能說明
STUN 幫你知道「我在外部網路的樣子」
TURN 幫你中繼資料,當打洞失敗時使用
ICE 幫你選擇最好的通訊方式,自動 fallback
TIP

建議所有即時影音 / 裝置連線服務都導入 ICE 框架,確保連線成功率最大化,並保留 STUN / TURN 備援機制。


下一篇預告

下一篇,我將分享如何實作 Signaling Server,並介紹 WebRTCAWS Kinesis Video Streams(KVS)for WebRTC 的應用與部署技巧。

TIP

如果你對 STUN、TURN、ICE 的實作流程有其他理解,或正在嘗試 WebRTC、AWS KVS 等技術,歡迎留言或來信交流,一起討論 P2P 的各種應用與挑戰!


參考資源




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • 💡 一台電腦操作多個 GitHub 帳號:最簡單快速的 SSH 設定方法
  • 🚀 如何使用 Excalidraw AI 快速生成專業級圖表,提升工作效率!
  • Setup Development Environment on a New macOS
  • Design Pattern (28) - Interpreter Pattern (解譯器模式)
  • Design Pattern (27) - Visitor Pattern (訪問者模式)