上一篇我们讲了 ICE:WebRTC 会收集 host、srflx、relay 三类 candidate,然后通过连通性检测选出一条可用路径。这一篇继续深入 ICE 背后的两个关键角色:STUN 和 TURN。
很多 WebRTC 初学者会有一个误解:只要配置了 STUN,两个客户端就一定能 P2P 连接。实际并不是这样。STUN 只能帮助客户端发现自己的公网映射地址,并不保证所有 NAT 都能打洞成功;当 P2P 失败时,TURN 才是兜底方案。
本篇我们重点解决几个问题:
- NAT 到底是什么,为什么会影响 WebRTC 连接。
- STUN 如何帮助 WebRTC 获取公网映射地址。
- TURN 为什么能兜底,但成本更高。
- C++ WebRTC 中如何配置 STUN/TURN。
- 如何判断当前通话走的是直连还是中继。
- 生产环境部署 TURN 时要注意什么。
1. 为什么需要NAT穿透
在理想情况下,两台设备可以直接通过公网 IP 和端口通信:


