网络原理

STUN 和 TURN 到底有什么区别:一次 WebRTC 连接里的真实分工

用家庭路由器、公司防火墙和移动网络的具体场景解释 STUN、TURN、ICE 候选与直连的关系,并说明中继为何会影响延迟、流量成本和隐私判断。

在 WebRTC 的连接说明里,STUN 和 TURN 总是挨着出现,久而久之很容易被理解成两台“功能差不多的中转服务器”。其实两者的工作量完全不同:STUN 更像问路,告诉浏览器它从公网看起来是什么地址;TURN 则是在路走不通时,真的替双方搬运每一个数据包。

弄清这点很有用。它能解释为什么免费 STUN 很常见,而 TURN 通常有配额;为什么页面显示中继后延迟会上升;也能帮助判断“P2P”是否等于“数据绝不经过服务器”。

问题从 NAT 开始

家庭路由器让多台设备共用一个公网 IP。电脑可能是 192.168.1.20,手机可能是 192.168.1.35,这些私有地址在互联网中不能直接路由。设备向外发包时,路由器临时建立一个公网地址和端口映射,再把返回数据交回正确设备。

浏览器只知道自己的局域网视角,不一定知道路由器建立了什么映射。另一端也不知道这个映射是否允许陌生地址回包。WebRTC 的 ICE 流程会收集多种候选地址,让双方逐对做连通性检查,而不是押注某一个地址。

STUN 负责照镜子,不负责搬文件

浏览器向 STUN 服务器发送请求,服务器把它观察到的来源 IP 和端口写进响应。浏览器由此得到一个服务器反射候选,也就是从公网一侧看到的映射。双方交换候选后,可能通过这个地址打通路径。

连接一旦建立,后续聊天、文件或音视频不会继续经过 STUN。它承受的是少量探测报文,不是整场会话的流量。因此公开、免费或低成本的 STUN 服务较多,但可用性仍应通过多个运营方和合理超时来保障,不能把所有连接都押在单一域名上。

TURN 是走不通时的可靠后门

企业网络可能只允许经代理访问互联网,校园网可能启用客户端隔离,运营商级 NAT 也可能使用很严格的端口映射。当所有直接候选都失败时,浏览器向 TURN 申请一个中继地址。双方各自与中继建立连接,TURN 再把数据从一侧转发到另一侧。

这条路径牺牲了一些效率来换成功率。数据多走一段路,延迟通常更高;服务器需要承担每个字节的入站和出站,成本远高于 STUN;服务器地域也很重要,亚洲两端如果绕到欧洲中继,体验会明显变差。

项目STUNTURN
核心作用发现公网映射,辅助直连直连失败时转发数据
会话正文不经过经过中继,但 WebRTC 传输仍加密
资源消耗少量请求与实际传输量直接相关
部署重点稳定、低延迟、多个入口容量、地域、认证、配额和滥用控制

ICE 如何从候选里选路

候选大致包括设备接口产生的主机候选、STUN 得到的服务器反射候选,以及 TURN 提供的中继候选。浏览器会组成候选对并进行连通性检查。优先级通常偏向成本更低的直接路径,但真正被选中的必须是可达的。

网络变化后,原来的候选对可能失效。Wi-Fi 切到移动网络、VPN 开关、电脑睡眠恢复,都可能触发 ICE 重启或整条连接重建。应用层不能把“曾经选中过直连”当成永久事实,界面上的路径标记也要随当前候选对更新。

经过 TURN 还安全吗

WebRTC 的媒体和数据传输有链路加密,TURN 转发的是受保护的数据包,而不是像网盘那样接收一个可打开的文件。不过中继仍会知道连接双方的网络地址、时间、传输量和持续时长。这些元数据也有隐私价值,应缩短日志保留、限制访问,并避免把连接码、文件名或聊天内容写进中继统计。

TURN 还是一项容易被白嫖的公网资源。固定用户名和长期密码一旦泄露,别人可以消耗流量甚至把它当通用代理。更稳妥的做法是签发短期凭据,绑定允许的会话或用户,设置日配额、并发限制和异常速率告警。

用户该怎样看连接状态

“已连接”只说明通道可用,不说明路径。一个诚实的状态区应至少区分局域网直连、公网直连和 TURN 中继,并在路径变化时更新。对普通用户,不必展示一长串 ICE 术语,但应解释中继可能更慢、会使用服务配额,内容仍保持加密。

uCopy 建立连接后,可在工作区查看当前路径。如果同一局域网始终使用 TURN,先检查两台设备是否接入访客 Wi-Fi、是否打开 VPN、路由器是否开启 AP 隔离。跨公司网络使用中继则很正常,不必把它当成故障。

一句话记住区别

STUN 回答“外面的人怎么看到我”,TURN 解决“我们还是碰不到,那就请你转交”。前者帮助找到更直接的路,后者为最难连的网络兜底。把两者都配置好,才是既追求速度又尊重可达性的 WebRTC 系统。

对产品而言,最佳策略不是强行宣称百分之百直连,而是优先选择更短路径,在失败时迅速切到受控中继,并把当前事实清楚告诉用户。

把方法变成一次真实连接

打开 uCopy,让两台设备在浏览器里安全连接并开始传输。

开始免费使用