iT邦幫忙

2021 iThome 鐵人賽

DAY 8
1
Modern Web

後疫情時代的 WebRTC 微學習系列 第 8

Day08 NAT 穿透 ICE、STUN、TURN

ICE

ICE(Interactive Connectivity Establishment,互動式連接建立)是用於 Offer/Answer 模式下的 NAT 穿越的技術,主要用於在UDP協議下建立多媒體會話。在實際的網路當中,有很多原因會導致簡單的從 A 端到 B 端直連不能如願完成。這需要繞過阻止建立連接的防火牆,給你的設備分配一個唯一可見的地址,如果路由器不允許主機直連,還得通過一台伺服器轉發數據。ICE 通過使用 STUN、TURN、NAT、SDP 技術完成上述工作。

ICE 建立連線的過程

ICE 建立連線的過程:

  1. 使用內網 IP 位置,如果雙方都在同一個內網中,就會成功建立連線
  2. 如果使用內網失敗,ICE 將使用 STUN 取得 NAT 的外網 IP 位置及 port,並嘗試使用外網 IP 位置建立連線,兩端都是非對稱型 NAT 的情況下通常都可以成功連線
  3. 如果使用 STUN 還是無法成功連線,那就代表兩端無法直接進行 P2P 的連線,那就需要使用TURN 來對訊號進行轉傳。

ICE 在所有的候選地址中,選擇開銷最小的路由。

STUN

https://ithelp.ithome.com.tw/upload/images/20210922/201300621vcmqsLcpw.png

當我們的客戶端位於 NAT 的內網中雖然可以與外網連線,但我們並不知道外網的 IP 位置,這個時候就需要通過 STUN 來取得外網 IP 位置。

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

STUN 的 NAT 類型檢查流程

  • 紅色無法連線
  • 黃色可以連線

https://ithelp.ithome.com.tw/upload/images/20210922/20130062RD80UU31GP.png

TURN

https://ithelp.ithome.com.tw/upload/images/20210922/20130062JMy7KwqmQl.png

從上一篇的 NAT 分類,以及上面對 STUN 的理解,我們知道在 Symmetric NAT 的網路環境中,是無法使用點對點 (Peer-to-Peer; P2P) 的方式來穿透 NAT,在這種情況下我們就需要 TURN(Traversal Using Relay NAT)來轉發封包。

不過這種方式雖然可以穿透防火牆,但卻沒有了原先 P2P 的優勢,而是變成了 Client-Server 的模式,因此 TURN Server 必須滿足非常高的頻寬要求,尤其是在多個並行連線的情況下。因此,使用 TURN Server 的成本很高,只有在沒有其他傳輸選項時才會選擇這個解決方案。

總結

本篇了解 ICE、STUN、TURN 的基本運作,ICE 實際運作更複雜,不過我們先理解這些就可以了,我們也不需要自己去實現一個 ICE server,後面實作會使用開源的框架 。

參考資料

https://zh.wikipedia.org/wiki/STUN

https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols

http://www.cs.nccu.edu.tw/~lien/Writing/NGN/firewall.htm


上一篇
Day07 NAT 類型
下一篇
Day09 在瀏覽器上檢查現有設備
系列文
後疫情時代的 WebRTC 微學習30

尚未有邦友留言

立即登入留言