TURN 协议全程为 Traversal Using Relays around NAT,它的作用是在无法建立直接的点对点连接时,为两个设备之间的通信提供中继服务。TURN 协议主要用于实现 Voip、视频会议和其他实时通信应用,包括 WebRTC

在很多情况下,两个位于不同网络中的设备可以直接进行通信,例如通过 STUN 协议进行 NAT 穿越。然而在有些情况下,由于网络配置或者防火墙的限制,设备无法直接通行。这时候就需要使用到 TURN 协议。

当使用 TURN 协议时,两个设备都会链接到一个 TURN 服务器,然后通过这个服务器中继数据。设备会把要发送的数据包发送给 TURN 服务器,然后 TURN 服务器再把这些数据包转发给另一个设备。虽然这个过程会增加一些延迟和带宽消耗,但是在没有其他选择的情况下,这是唯一可行的解决方案。

WebRTC应用中,TURN 一般作为 STUN协议备用使用。

TURN 与 SDP协议 的区别

  1. 工作方式:STUN 协议的主要作用是帮助设备发现他们的公网 IP 地址和端口,以及 NAT设备的行为。设备可以通过 STUN 服务器发现这些信息,然后告诉其他设备如何找到它们,而 TURN 协议则提供了一个中继服务,在两个设备无法直接通信时,他们可以通过 TURN 服务器来中继数据。
  2. 使用场景:在大多数情况下,设备可以直接使用 STUN 服务器发现的公网地址进行通信,这种方式成为 P2P(点对点)连接,在一些特殊情况下(例如防火墙限制),STUN 可能无法工作,这时就需要使用 TURN 服务器来中继数据。
  3. 资源消耗:STUN 协议相对轻量,因为它只需要提供设备的公网 IP 地址和端口信息,而 TURN 协议 t则需要处理所有的通过它的数据,回消耗更多的带宽和计算资源。
  4. 通信性能:因为 STUN 允许设备直接进行 P2P 通信,所以它通常可以提供最佳的通信性能。而 TURN 协议由于需要通过中继服务器转发数据,所以可能会增加一些延迟。

WebRTC 应用中提到的 中继服务器的概念就是指 TURN 协议