【ZeroRange WebRTC】RFC 5766:TURN 协议规范(中文整理与译注)

RFC 5766:TURN 协议规范(中文整理与译注)

说明:本文对 RFC 5766(Traversal Using Relays around NAT, TURN)进行中文整理与译注,聚焦工程落地所需的核心章节与流程,并辅以图示帮助理解。

参考:RFC 5766(https://datatracker.ietf.org/doc/html/rfc5766)\[0\]


摘要(Abstract)

  • 当终端位于 NAT 后,某些场景下直连不可行,需要使用中继服务器转发媒体/数据。
  • TURN 定义了一种"客户端控制中继并通过中继与对端交换包"的协议;可结合 ICE 使用,也可独立使用。
  • 相较其他中继协议,TURN 支持客户端使用"单个中继地址"与多个对端通信(通过权限与通道机制)。

运行概览(Overview of Operation)

  • 传输层:支持 UDP/TCP/TLS‑over‑TCP,常用 443 端口以提升企业网络可达性。
  • 分配(Allocation):
    • 客户端向 TURN 请求分配一个"中继地址"(Relayed Address);分配由 5 元组(客户端 IP/端口、服务器 IP/端口、传输协议)标识;有生命周期(Lifetime)。
    • 成功后,服务器返回 RELAYED-ADDRESS(中继地址)与 XOR-MAPPED-ADDRESS(客户端对外可见地址)。
  • 权限(Permission):
    • 客户端为"允许与之通信的对端地址"创建权限;权限有生命周期,过期则拒绝转发。
  • 发送机制(Send/Data):
    • 两种方式:Send Indication(开销较高、灵活)与 ChannelData(高效、需要通道绑定)。
  • 通道(Channel):
    • 为某对端绑定一个通道号,后续通过精简的 ChannelData 帧高效传输;通道也有生命周期。

术语与数据模型(Terminology & Model)

  • Allocation:一次分配,提供中继地址与状态,生命周期由 LIFETIME 控制。
  • Permission:允许向某对端地址转发数据,默认 300s;可刷新。
  • Channel:绑定某对端地址的通道号(14 位),减少包头与属性开销,提升效率。
  • Attributes(属性):TLV 结构,常见有 RELAYED-ADDRESSXOR-MAPPED-ADDRESSXOR-PEER-ADDRESSLIFETIMECHANNEL-NUMBERMESSAGE-INTEGRITYFINGERPRINT 等。
  • Long-Term Credential:长期凭证机制(USERNAME/REALM/NONCE/MESSAGE-INTEGRITY),用于认证与防重放(401/438)。

创建分配(Creating an Allocation)

  • Allocate Request:
    • 必带 REQUESTED-TRANSPORT(UDP/TCP),可带 LIFETIME(建议值根据应用而定)。
    • 使用长期凭证进行认证:携带 USERNAME/REALM/NONCEMESSAGE-INTEGRITY;若缺失或过期,服务端返回 401/438 并提供挑战参数(REALM/NONCE)。
  • Allocate Success Response:
    • 返回 RELAYED-ADDRESS(供对端向中继发送包)与 XOR-MAPPED-ADDRESS(客户端对外可见地址)。
    • 可返回实际的 LIFETIME,指明分配有效期。
  • 刷新(Refresh):
    • 在分配过期前发送 Refresh Request;设置 LIFETIME=0 可释放分配。

权限(Permissions)

  • CreatePermission:
    • 为一个或多个 XOR-PEER-ADDRESS 创建权限;服务器只转发来自被许可对端的包。
    • 默认有效期 300 秒;过期需要重新创建。
  • 安全性:防止无授权对端滥用中继;结合认证头字段,抵御攻击与误用。

发送机制:Send 与 Data Methods

  • Send Indication:
    • 客户端向 TURN 发送 Send Indication(含 XOR-PEER-ADDRESS 与负载),TURN 转发给对端;每个包带完整属性,开销较大。
  • Data Indication:
    • TURN 收到对端的数据时,向客户端发送 Data Indication(含对端地址与负载)。
  • 适用:控制面与低吞吐场景;或在通道绑定前临时使用。

通道(Channels)与高效传输

  • ChannelBind:
    • 将某对端地址绑定到通道号;成功后,客户端可使用 ChannelData 帧(短头部)收发,减少属性与解析开销。
  • ChannelData:
    • 高效承载 RTP 等实时媒体;要求已创建对应权限并通道绑定有效。
  • 生命周期与刷新:
    • 通道号绑定有超时;需定期刷新以保持有效。

安全与认证(Security & Auth)

  • 长期凭证:
    • REALM/NONCE/USERNAME/MESSAGE-INTEGRITY;防重放与挑战应答;错误码如 401 未授权、438 Stale Nonce。
  • 传输安全:
    • 在企业网络中,推荐使用 TLS‑over‑TCP(turns:,端口 443),提升可达性并与代理/负载均衡兼容;媒体承载可为 UDP 或 TCP(?transport=udp|tcp)。
  • 资源与防滥用:
    • 服务器可限制每账户的分配数量、权限数量与带宽;可记录审计与计费数据。

与 ICE 的关系(Usage with ICE)

  • TURN 是 ICE 的"最后手段"(relay 候选),在 host/srflx 失败时保证可达性。
  • ICE 将 RELAYED-ADDRESS 作为候选与对端交换;连接提名成功后,媒体经 TURN 中继转发。
  • 成本与时延:中继路径引入额外延迟与云端带宽/出网成本;UDP 优先、TCP/TLS 为退路。

工程要点(Practical Notes)

  • 避免分片:尽量控制包大小与 MTU,RTP 场景慎重设计负载。
  • 多对端通信:一个分配可服务多个对端,通过权限与通道实现隔离与高效。
  • 刷新策略:分配/权限/通道都需要在到期前刷新;保持 keepalive。
  • IPv6 支持:TURN 规范支持 IPv4/IPv6;注意地址族的权限与通道绑定一致性。

参考

  • 0\] RFC 5766 - TURN: https://datatracker.ietf.org/doc/html/rfc5766

相关推荐
笔夏19 小时前
【安卓学习之webRTC】学习相关资料
android·学习·webrtc
每日出拳老爷子20 小时前
【浏览器方案】只用浏览器访问的内网会议系统设计思路(无客户端)
运维·服务器·webrtc·实时音视频·流媒体
softshow10264 天前
Vue3 :封装 WebRTC 低延迟视频流与 WebSocket 实时状态驱动的大屏可视化
websocket·网络协议·webrtc
雨落秋垣6 天前
大屏可视化系统:WebRTC视频流与WebSocket实时数据集成方案
websocket·网络协议·webrtc
此颜差矣。7 天前
封装 WebRTC 低延迟视频流与 WebSocket 实时状态驱动的大屏可视化
websocket·webrtc·低延迟视频流
metaRTC7 天前
metaRTC 8.0 重磅发布:专为新一代 AI 终端而生的实时通信引擎
ai·webrtc
三十_A10 天前
WebRTC 入门:一分钟理解会议系统的三种架构(Mesh/SFU/MCU)
架构·webrtc
qq_3106585111 天前
webrtc源码走读(五)核心引擎层——传输模块
服务器·网络·音视频·webrtc
三十_11 天前
WebRTC 入门:一分钟理解会议系统的三种架构(Mesh/SFU/MCU)
前端·后端·webrtc