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 运营的中继传输过程中依然保持加密。