跳到主要内容
全部术语

STUN 与 TURN

STUN 帮助设备发现其公网地址以实现直接连接;当无法建立直接连接时,TURN 中继流量。

STUN:获知自己的公网地址

NAT 会话穿越实用工具(STUN)由 RFC 8489 定义,是一种轻量的请求-响应协议。设备向 STUN 服务器发送绑定请求,响应中会给出该请求来源的公网地址和端口,即设备的「服务器反射」地址。STUN 帮助两台设备尝试直连,但从不承载会话本身,因此 STUN 服务器所需的带宽非常少。

TURN:直连失败时进行中继

中继穿越 NAT(TURN)由 RFC 8656 定义,是 STUN 的扩展,会在中继服务器上分配一个地址。双方都把流量发往中继,由中继转发。在其他方式都不可行时,TURN 依然可用,但会话的每一个字节都要经过中继,这会增加延迟,也会消耗运营方的带宽。

ICE:在两者之间做选择

交互式连接建立(ICE,RFC 8445)把两者结合起来。每一方收集候选地址(本地地址、来自 STUN 的服务器反射地址以及来自 TURN 的中继地址),交换后逐对测试,并保留可用的最佳组合,优先选择直连路径。WebRTC 正是以这种方式使用 ICE、STUN 和 TURN 的。

Vexaro Desk 的做法

Vexaro Desk 不使用 TURN。当网络无法建立直接连接时,会话会改经 Vexaro 自己的中继,且客户端只会连接其能够验证真实性的中继。

直连会话采用端到端加密。当网络环境迫使连接经由中继时,流量在经过 Vexaro 运营的中继传输过程中依然保持加密。

STUN、TURN 与 ICE 对比

STUN、TURN 与 ICE 对比
STUNTURNICE
标准1,2,3RFC 8489RFC 8656RFC 8445
用途1,2,3获知公网地址和端口通过服务器中继流量收集、测试并选择候选路径
是否承载会话流量1,2,3否是否,只负责选路
服务器负载1,2,3仅有少量请求会话的全部带宽自身没有负载;依赖 STUN 和 TURN 服务器

常见问题

STUN 有什么作用?
它告诉设备其流量看起来来自哪个公网地址和端口,让两台设备可以尝试直接连接。它不承载会话流量。
什么是 TURN?什么时候会用到?
TURN 是一种中继:双方都把流量发往 TURN 服务器,由它转发。当无法建立直连时就会用到它,因为它总能工作,但会带来延迟和带宽开销。
STUN 和 TURN 都需要吗?
对于 WebRTC 这类连接方式,通常都需要:STUN 让直连成为可能,TURN 兜底直连失败的情况,ICE 在两者之间做选择。拥有自有中继的产品(例如 Vexaro Desk)会用自己的中继代替 TURN。
Vexaro Desk 使用 TURN 吗?
不使用。只要网络允许,Vexaro Desk 就会直接连接,否则会经由 Vexaro 自己的中继连接;客户端在连接前会验证中继的真实性。

在 Vexaro Desk 中体验

Vexaro Desk 将有人值守与无人值守访问、NAT 穿透、自适应编解码引擎和治理能力整合在一个控制台中。目前处于早期访问阶段,创建免费账户即可试用。