4. RTP会话与传输层

RTP本身只定义了媒体数据的封装格式与时间戳、序列号等同步机制,它并不负责把包送到对端。真正决定“能不能通、延迟多高、丢包怎么办、是否加密”的,是RTP所依赖的传输层与安全层组合。理解RTP over UDP、TCP、TLS、SRTP的差异,是排查“有信令无媒体”“单向无声”“卡顿抖动”等问题的第一道分水岭。

一、四种承载方式的本质差异

RTP最常见的承载是UDP。UDP不重传、不排序、不拥塞控制,正好契合实时媒体“宁可丢一帧,不可等一秒”的需求。RTP在UDP之上通过序列号检测丢包、通过时间戳重建播放节奏,再配合RTCP反馈丢包率与抖动,形成完整的实时传输闭环。

RTP over TCP则把RTP包直接放进TCP字节流。TCP保证可靠有序,但代价是队头阻塞:一个包丢失,后续所有包都要等待重传,延迟瞬间抬升。因此TCP承载通常只用于信令、屏幕共享或网络严格限制UDP的场景,纯语音视频通话很少主动选择。

RTP over TLS是在TCP之上再加一层加密,即RTP先进入TLS记录层,再由TCP传输。它解决了TCP承载的明文问题,但队头阻塞依旧存在,且TLS握手与记录层开销会进一步增加延迟。

SRTP则是另一条路线:它不改变UDP承载,而是在RTP包结构上直接加密载荷并认证包头,同时用Srtp密钥与ROC(Rollover Counter)抵抗重放。SRTP是WebRTC、VoIP默认的媒体安全方案,兼顾低延迟与机密性。

RTP 四种承载方式:协议栈与关键特性 RTP over UDP RTP / RTCP UDP IP 低延迟 · 可丢包 无队头阻塞 明文 · 需SRTP补安全 默认首选 RTP over TCP RTP / RTCP TCP IP 可靠有序 队头阻塞 · 延迟抖动 明文 受限网络兜底 RTP over TLS RTP / RTCP TLS TCP / IP 加密 · 可过防火墙 队头阻塞 + 握手开销 延迟最高 安全但非实时首选 SRTP over UDP RTP 载荷加密 SRTP / SRTCP UDP / IP 低延迟 + 加密认证 抗重放 · ROC 需密钥协商 WebRTC 默认

二、端口分配:RTP与RTCP的成对规则

RTP会话通常成对出现:RTP用偶数端口,RTCP用相邻的奇数端口。例如RTP监听5004,RTCP就是5005。这个约定来自RFC 3550,虽然现代实现允许显式指定,但抓包时仍应优先按“偶RTP、奇RTCP”去识别。

端口分配有两种模式:静态分配与动态分配。静态分配常见于SIP网关、媒体服务器,端口固定便于防火墙放行;动态分配则从一段端口池中随机选取,例如10000–20000,WebRTC和多数SIP客户端都采用这种方式。动态分配提高了并发能力,却让NAT和防火墙配置更复杂。

# 典型RTP端口对
RTP  : 5004  (偶数)
RTCP : 5005  (奇数)

# 动态端口池示例
min_port = 10000
max_port = 20000
# 每个会话占用一对端口,实际并发数约为 (20000-10000)/2 = 5000

三、复用:同一端口承载多路媒体

当端口资源紧张或NAT映射数量受限时,会使用复用技术。常见的有RTP/RTCP复用(RFC 5761),即RTP和RTCP共用同一个端口,通过包类型区分;还有BUNDLE复用(WebRTC),把音频、视频、数据通道全部复用到同一个五元组上,只做一次NAT穿越,显著降低建连失败率。

复用带来的代价是解复用逻辑更复杂:接收端必须根据SSRC、payload type和包类型正确分流,否则会出现“音频串到视频”“RTCP被当成RTP”等异常。

四、NAT穿越基础:为什么媒体总是“连不上”

NAT让内网主机共享公网IP,但也破坏了RTP的端到端可达性。RTP包从内网发出时,NAT会建立映射,但外部主动发来的包若没有对应映射,就会被丢弃。因此RTP会话必须借助STUN、TURN、ICE来完成地址发现与连通性检查。

  • STUN:客户端向STUN服务器发请求,获知自己的公网映射地址,即srflx候选。
  • TURN:当直连失败时,通过中继服务器转发RTP,保证连通但增加延迟与带宽成本。
  • ICE:收集host、srflx、relay候选,按优先级配对并做连通性检查,选出最优路径。
排查NAT问题时,先看ICE候选是否只有host类型。若没有srflx或relay,说明STUN/TURN不可达,媒体大概率无法建立。

五、对比清单与选型建议

承载方式 可靠性 延迟表现 安全性 典型场景
RTP over UDP 不保证 最低 明文 局域网监控、内网通话
RTP over TCP 可靠有序 易受队头阻塞影响 明文 UDP被封锁的兜底
RTP over TLS 可靠有序 最高 加密 合规要求高、可容忍延迟
SRTP over UDP 不保证 低 加密+认证 WebRTC、VoIP、视频会议

六、常见误区与复盘

误区一:认为“用了TCP就不会丢包,所以音质更好”。实际上TCP重传会引入更大延迟,实时媒体反而更差。误区二:把SRTP当成“另一种传输层”,SRTP仍然跑在UDP上,只是多了加密与认证。误区三:只放行RTP端口却忘了RTCP,导致丢包统计和唇音同步失效。

复盘一个典型故障:某视频会议出现单向无声。抓包发现SDP中RTP端口为偶数,但防火墙只放行了该端口,未放行相邻的RTCP端口,导致RTCP Receiver Report无法回传,发送端误判链路良好而持续高码率,最终拥塞丢包。修复方式是同时放行RTP/RTCP端口对,或在SDP中启用rtcp-mux复用同一端口。

选型时记住一条主线:实时优先选UDP,安全优先在UDP上加SRTP,NAT复杂时用ICE+BUNDLE减少端口映射,TCP/TLS只作为受限网络的最后手段。把这条主线与端口分配、复用策略、NAT穿越结合起来,才能让RTP会话既通得快,又稳得住。