WebRTC通过ICE(Interactive Connectivity Establishment,交互式连接建立)框架实现NAT穿透,ICE集成了STUN和TURN协议来解决NAT环境下的点对点连接问题。
-
STUN(Session Traversal Utilities for NAT):
- 作用:帮助客户端获取自己在公网中的IP地址和端口
- 工作原理:客户端向STUN服务器发送请求,STUN服务器返回客户端的公网地址信息
- 适用场景:适用于大多数NAT类型,如锥形NAT
- 局限性:无法穿透对称NAT
-
TURN(Traversal Using Relays around NAT):
- 作用:当STUN无法穿透NAT时,作为中继服务器转发媒体数据
- 工作原理:客户端连接到TURN服务器,所有媒体数据通过TURN服务器中继
- 适用场景:适用于对称NAT等复杂网络环境
- 局限性:增加了延迟和带宽消耗,需要额外的服务器资源
-
ICE(Interactive Connectivity Establishment):
- 作用:整合STUN和TURN,为WebRTC连接找到最佳的通信路径
- 工作原理:
- 收集所有可能的候选地址(本地地址、STUN服务器返回的公网地址、TURN服务器地址)
- 对这些候选地址进行排序,优先选择延迟低的直连路径
- 尝试与对方的候选地址建立连接,直到找到可行的路径
- 优势:提高了连接成功率,自动选择最佳路径
WebRTC的NAT穿透过程:
- 客户端收集本地ICE候选者
- 通过STUN服务器获取公网ICE候选者
- 如果配置了TURN服务器,获取中继ICE候选者
- 通过信令服务器交换ICE候选者
- 双方尝试使用这些候选者建立连接
- 选择最佳连接路径进行通信