TURN(Traversal Using Relays around NAT,即通过中继穿越 NAT)是一种协助穿越网络地址转换器(NAT)或防火墙以促进对等(peer-to-peer)通信的协议。它是 STUN(Session Traversal Utilities for NAT,即用于 NAT 的会话穿越实用程序)协议的扩展,并在 RFC 8656 ↗ 中进行了定义。
就像您使用浏览器或 cURL 来使用 HTTP 协议一样,您需要在您的应用程序中使用工具或库来使用 TURN 协议。
TURN 的大多数用户会将其作为 WebRTC 库的一部分来使用,例如他们浏览器中的 WebRTC 库,或者是 Pion ↗、webrtc-rs ↗ 或 libwebrtc ↗ 的一部分。
您也可以在您的应用程序中直接使用 TURN。Pion ↗ 提供了一个 Golang 语言的 TURN 客户端库,webrtc-rs ↗ 则提供了一个 Rust 语言的库。
-
NAT (网络地址转换):一种路由器使用的方法,用于将多个私有 IP 地址映射到单个公共 IP 地址。这通常由家庭互联网路由器完成,以便同一网络中的多台计算机可以共享单个公共 IP 地址。
-
TURN 服务器:一种中继服务器,充当 NAT 后面的客户端之间流量的媒介。Cloudflare Realtime TURN 服务就是 TURN 服务器的一个例子。
-
TURN 客户端:使用 TURN 协议通过 TURN 服务器进行通信的应用程序或设备。这就是您的应用程序。它可以是使用 WebRTC API 的 Web 应用程序,也可以是在移动端或桌面端运行的原生应用程序。
-
分配(Allocation):当 TURN 服务器创建一个分配时,TURN 服务器会为该客户端保留一个唯一的 IP 和端口。
-
中继传输地址(Relayed Transport Address):在 TURN 服务器上保留的 IP 地址和端口,互联网上的其他人可以使用该地址和端口向 TURN 客户端发送数据。
- TURN 客户端向 TURN 服务器发送 Allocate 请求。
- TURN 服务器创建分配并向客户端返回中继传输地址。
- 客户端随后可以将此中继地址提供给它的 peer。
- 当 peer 向中继地址发送数据时,TURN 服务器会将其转发给客户端。
- 当客户端想要向 peer 发送数据时,它会通过 TURN 服务器发送,然后由 TURN 服务器将其转发给 peer。
TURN 的工作原理类似于 VPN (虚拟专用网络)。然而,TURN 服务器和 VPN 的用途不同,运行方式也不同。
VPN 是一种通用工具,它对来自设备的所有互联网流量进行加密,并通过 VPN 服务器进行路由,以增强隐私、安全性和匿名性。它在网络层运行,影响所有互联网活动,通常用于绕过地理限制或保护公共 Wi-Fi 上的连接。
TURN 服务器是特定应用程序(特别是实时通信)使用的专用工具。它在应用层运行,仅影响使用它的应用程序的流量,并在 peer 之间无法建立直接连接时作为中继器来穿越 NAT 和防火墙。VPN 会影响整体的互联网速度并提供匿名性,而 TURN 服务器仅影响使用它的特定应用程序的性能。
在由于 NAT 或防火墙限制而无法进行直接点对点通信的场景中,TURN 通常非常有价值。以下是一些关键好处:
-
NAT 穿越:TURN 提供了一种在都处于 NAT 后面的 peer 之间建立连接的方法,否则这会具有挑战性或无法实现。
-
防火墙绕过:在具有严格防火墙策略的环境中,TURN 可以实现原本会被阻止的通信。
-
一致的连接性:当直接连接或 NAT 辅助连接失败时,TURN 提供了一种可靠的备用方法。
-
隐私保护:通过 TURN 服务器中继流量,通信双方的实际 IP 地址可以相互隐藏。
-
VoIP 和视频会议:TURN 对于 IP 电话 (VoIP) 和视频会议等应用程序至关重要,无论网络配置如何,都能确保可靠的连接。
-
网络游戏:TURN 可以帮助网络游戏在处于不同类型 NAT 后面的玩家之间建立对等连接。
-
IoT 设备通信:物联网 (IoT) 设备可以在处于 NAT 或防火墙后面时使用 TURN 进行通信。