TURN是一种网络协议与服务器,用于在无法建立直接点对点连接时,为实时通信(如WebRTC)提供可靠的数据中继服务。客户端通过TURN协议从服务器获取一个公网中继地址,并以此作为数据转发枢纽,所有音视频流均通过此服务器中转。它是ICE框架中的保底方案,确保在严苛NAT或防火墙环境下的连通性。
TURN是什么
Traversal Using Relays around NAT (TURN) 服务器是一种 Web 服务器,当防火墙或私有 IP 地址的使用中断实时通信连接(例如视频或音频通话)时,它可以在计算设备之间实现 WebRTC 连接。顾名思义,TURN 服务可以绕过网络地址转换 (NAT),以确保客户端之间的连接不会在会话中途中断。
简而言之,即使网络未配置为支持视频和音频通话,TURN 服务器也能帮助确保视频和音频通话正常运行。
当 WebRTC 连接中的某个设备使用私有 IP 地址时,TURN 服务器就变得必不可少。具有私有 IP 地址的设备使用 NAT 连接到其他设备。NAT 重新打包数据包并将其发送到私有 IP 地址,但它不能很好地与许多协议配合使用,包括 WebRTC。
TURN工作原理
核心工作原理:分配、授权与中继转发
- 分配中继地址:
- 客户端首先与TURN服务器建立一个连接(通常基于STUN协议),并发送一个Allocate请求。
- 服务器验证客户端身份后,从自己的公网IP池中分配一个临时的中继传输地址(Relayed Transport Address),它是一个唯一的IP:端口组合。此地址将作为客户端在公网上的“代理地址”对外发布。
- 创建通信权限:
- TURN服务器出于安全考虑,默认拒绝转发任何来源的数据。客户端必须为每一个期望与之通信的对端(Peer),发送一个CreatePermission请求。
- 该请求中包含对端的IP地址信息。服务器据此创建一条临时的、有生存时间的“权限”规则,仅允许来自该特定对端地址的数据被转发给客户端。
- 数据中继转发:
- 发送数据:客户端需要将数据发送给对端时,会先发给TURN服务器。使用 Send Indication(发送指示)报文,其中不仅包含数据负载,还必须封装对端的地址信息。服务器根据此地址信息,将数据转发出去。
- 接收数据:对端将数据发送到客户端先前公布的“中继地址”(即TURN服务器的公网端口)。服务器检查数据来源IP,若客户端已为此IP创建了权限,则通过客户端的连接将数据转发给客户端。
关键技术机制:高效数据传输
为了提高持续性数据流的效率,TURN定义了一种通道绑定(Channel Binding)机制:
- 客户端可以为某个已授权的对端地址,请求绑定一个简短的通道号(Channel Number)(0x4000 – 0x7FFF)。
- 绑定成功后,客户端与该对端通信时,可以使用更精简的 ChannelData 报文格式,其头部开销仅4字节,相比每次都必须携带地址的 Send Indication 效率高得多。这是进行音视频流媒体传输时的推荐模式。
ICE、STUN、TURN:从候选到连通
ICE、STUN、TURN的角色与职责分工
1,ICE:总指挥与决策引擎
- 角色:它不是单独工作的服务器,而是一套决策算法和框架(定义在 RFC 8445 中)。它负责组织整个连接建立过程:收集所有可能的连接方式(候选地址),指挥测试每一条路,最后根据测试结果选择最好的一条路。
- 类比:就像一个要派送紧急包裹的快递总调度。他知道有各种可能的路线(自家车、公交、直升机),他的工作是测试每条路线,然后选择最快能送达的那条。
2,STUN:侦察兵与地图绘制员
- 角色:它是一种简单的客户端-服务器协议。它的核心功能是 “发现” 。当客户端(在NAT/防火墙后)询问公网的STUN服务器:“从你的角度看,我的地址是什么?” 服务器会告诉客户端它被映射的公网IP和端口。
- 产出:这个公网地址被称为 “服务器反射候选地址” 。它代表了一种可能建立直接P2P连接的通道。
- 局限:它只负责“发现”地址,不能保证这个地址一定能被对方连接上(例如在对称型NAT或严格防火墙下就可能失败)。
3,TURN:中继站与保底方案
- 角色:它是在直接P2P连接彻底失败时的备用方案。TURN服务器位于公网,客户端与它建立连接,并将所有音视频数据中继转发给另一个客户端。
- 产出:这个中继路径被称为 “中继候选地址” 。
- 特点:它是100%可靠的(因为客户端与TURN服务器的连接是客户端主动发起的,总能成功),但代价是延迟更高、消耗服务器带宽和资源。ICE会优先使用直接路径,万不得已才用TURN。

参考来源:
https://edu.51cto.com/article/note/15164.html
https://blog.wefreestar.com/archives/ice-stun-turn-nat-traversal
https://www.cnblogs.com/clnchanpin/p/19315859