RTP、RTCP 与 SRTP 协议详解

RTP、RTCP 与 SRTP 协议详解

本文介绍 RTP(Real-time Transport Protocol)RTCP(Real-time Transport Control Protocol)SRTP(Secure RTP) 的定位、RTP 头部与常见载荷类型、RTCP SR/RR 与分组类型、RTP/RTCP 端口对、与 SDP/SIP 的衔接、SRTP 算法与密钥、以及抓包排错要点,内容以 IETF RFC 3550、RFC 3711 为主。适合需要理解实时音视频传输或做 VoIP/流媒体开发的读者;读完可掌握 RTP 头字段、PT 与 Profile、RTCP 反馈含义、SRTP 加密认证及与 SDP 的对应关系。


目录

  1. [RTP 概述](#RTP 概述)
  2. [RTP 头部格式](#RTP 头部格式)
  3. [常见载荷类型与 Profile](#常见载荷类型与 Profile)
  4. [RTCP 概述与分组类型](#RTCP 概述与分组类型)
  5. [RTCP SR/RR 字段简表](#RTCP SR/RR 字段简表)
  6. [RTP/RTCP 端口与会话](#RTP/RTCP 端口与会话)
  7. [与 SDP/SIP 的衔接](#与 SDP/SIP 的衔接)
  8. [RTCP 功能与局限](#RTCP 功能与局限)
  9. [SRTP 协议](#SRTP 协议)
  10. 常见问题与抓包
  11. [术语与 RFC 速查](#术语与 RFC 速查)

一、RTP 概述

RTP(Real-time Transport Protocol,实时传输协议) 由 IETF 定义,用于在 IP 网络上承载实时数据 (语音、视频等)。RFC 3550 同时定义了配套的 RTCP;RFC 1889 为其早期版本,已被 RFC 3550 取代。

  • RTP 提供序列号、时间戳、载荷类型、SSRC/CSRC 等,便于接收端检测丢包、去抖动、多路同步 ;RTP 不保证 可靠传输或带宽,通常基于 UDP
  • RTP 多与 SDPSIP 等配合使用:SDP 描述 RTP 端口与编解码,SIP 建立会话后双方按 SDP 建立 RTP 流。

应用 VoIP/WebRTC/流媒体
RTP/RTCP
UDP
IP

项目 说明
标准 RFC 3550(RTP + RTCP),取代 RFC 1889
传输 通常 UDP,RTP 与 RTCP 各占一个端口
特点 序列号、时间戳、SSRC、载荷类型;不提供可靠性与拥塞控制

二、RTP 头部格式

(据 RFC 3550 与《网络协议本质论》第 17 章。)

固定头部(12 字节,必选):

位域 长度 含义
V 2 bit 版本,当前为 2
P 1 bit 填充位:置 1 表示包尾有填充字节
X 1 bit 扩展位:置 1 表示固定头后跟扩展头
CC 4 bit CSRC 计数,表示其后 CSRC 标识符个数(0~15)
M 1 bit 标记位,含义由 Profile 定义(如 H.264 中表示帧边界)
PT 7 bit 载荷类型(Payload Type),标识编码(如 PCMU、H.264)
序列号(SN) 16 bit 每发一个 RTP 包加 1,接收端用于检丢包、排序;初值随机
时间戳 32 bit 该包中第一个字节的采样时刻;会话内单调递增,用于去抖动与音视频同步
SSRC 32 bit 同步源标识符,标识该 RTP 流的来源;同一 RTP 会话内唯一,通常随机选取
CSRC 列表 0~15 × 32 bit 贡献源列表,由混合器(Mixer) 插入,标识对该包有贡献的源 SSRC

可选
固定头12字节
V P X CC
M PT
序列号
时间戳
SSRC
CSRC 列表
扩展头


三、常见载荷类型与 Profile

Payload Type(PT) 在 RTP 头中占 7 bit,用于标识编码格式。RFC 3551 定义了 RTP/AVP (Audio-Video Profile)中的静态映射;动态 PT 由 SDP 的 a=rtpmap 在会话中指定。

PT(静态示例) 编解码 说明
0 PCMU (G.711 μ-law) 8 kHz 语音
8 PCMA (G.711 A-law) 8 kHz 语音
18 G.729 语音
31 H.261 视频
96 等 动态 由 SDP a=rtpmap 指定(如 H.264、VP8、OPUS)

Profile :如 AVP (RTP/AVP)、SAVP(RTP/SAVP,安全扩展),定义 PT 语义与可选参数;具体编解码与时钟频率以 SDP 为准。


四、RTCP 概述与分组类型

RTCP 与 RTP 配套使用,在同一会话中通过另一 UDP 端口传输,主要功能包括(RFC 3550):

  1. 服务质量监视与反馈:丢包率、抖动、往返时延等,供发送端与接收端调整或诊断。
  2. 媒体间同步:通过时间戳与 NTP 信息实现音视频同步。
  3. 会话成员标识:携带 SDES 等,标识 RTP 用户源与 CNAME。

RTCP 五种分组类型(RFC 3550):

类型 名称 用途
SR Sender Report 发送端报告:已发 RTP 包数/字节、NTP/ RTP 时间戳,用于同步与统计
RR Receiver Report 接收端报告:丢包、抖动等,向发送端反馈
SDES Source Description 源描述:CNAME、NAME、EMAIL 等
BYE Goodbye 离开会话
APP Application-defined 应用自定义

上述分组封装格式类似,均含公共前缀(版本、填充、长度、分组类型、子类型等)及类型相关数据;细节见 RFC 3550。


五、RTCP SR/RR 字段简表

便于对照抓包或实现(RFC 3550)。

SR(Sender Report):发送端报告

内容 含义
NTP 时间戳 墙钟时间,用于与 RR 的 LSR/DLSR 计算 RTT 与同步
RTP 时间戳 与 NTP 对应,便于接收端做音视频同步
发送包数 / 发送字节数 该 SSRC 已发送的 RTP 包数与字节数
可选多个 RR 块 对每个接收到的源的接收统计(见下)

RR(Receiver Report):接收端报告(可单独发 RR 包,也可附在 SR 后)

内容 含义
SSRC of source 被统计的发送源 SSRC
丢包率(fraction lost) 自上次 RR 以来的丢包比例
累计丢包数 该源总丢包数
最高接收序列号 收到的最大 RTP 序列号(可推断丢包)
抖动(jitter) 到达时间抖动估计值
LSR / DLSR 上次收到该源 SR 的时间戳 / 自该 SR 以来的延迟,用于发送端算 RTT

六、RTP/RTCP 端口与会话

(据《网络协议本质论》第 17 章及 RFC 3550。)

  • 一个 RTP 会话 由一对目的传输地址(网络地址 + 一对端口)定义。
  • RTP 使用偶数 UDP 端口,RTCP 使用相邻奇数 端口(RTP 端口 + 1),构成 RTP/RTCP 端口对。例如 RTP 端口 5004,则 RTCP 端口 5005。
  • 这样便于防火墙与 NAT 规则统一放行「一对端口」,也便于实现根据 RTP 端口推导 RTCP 端口。

同一会话
RTP 数据 · 偶数端口
RTCP 控制 · 偶数+1
应用

多流与多会话 :一个 RTP 会话由一对(地址, RTP 端口, RTCP 端口)定义。音视频多路时,可为每种媒体使用不同端口对(SDP 中多个 m=),或同一端口对下用不同 SSRC 区分流;同一会话内 SSRC 唯一。


七、与 SDP/SIP 的衔接

  • SDPm=audio / m=video 给出 RTP 端口(及协议,如 RTP/AVP);a=rtpmap:<pt> <codec>/<clock> 定义 PT 与编解码;a=sendrecv 等描述方向;可选 a=ssrc 关联 SSRC。
  • SIP:通过 INVITE/200 OK 携带 SDP(offer/answer),双方根据 SDP 确定对端 RTP/RTCP 地址与端口、选定的编解码,然后建立 RTP/RTCP 流;媒体流与信令(SIP)路径可不同。

SIP INVITE/200 OK
SDP m= / a=rtpmap
RTP/RTCP 建链


八、RTCP 功能与局限

功能小结(RFC 3550):

  • 向应用提供会话质量或广播质量信息(丢包、抖动等)。
  • 标识 RTP 源(SSRC、CNAME 等)。
  • 控制 RTCP 发送间隔(带宽占比约 5%,随成员数调整,避免控制流量过大)。
  • 传输最小会话控制信息(如 BYE 离开)。

局限 (《网络协议本质论》17.2.8):当大量用户 加入同一会话(如大型组播)时,每个参与者都周期发送 RTCP 包,若设计不当会导致 RTCP 流量泛滥(flooding)。RFC 3550 通过限制 RTCP 带宽占比与随成员数调整发送间隔来缓解,但在极大规模会话中仍需要额外策略(如层级、聚合)。


九、SRTP 协议

SRTP(Secure Real-time Transport Protocol,安全实时传输协议) 在 RTP/RTCP 基础上增加加密、消息认证、完整性保护与重放保护 ,适用于单播与多播实时应用。由 IETF 于 2004 年 3 月发布为 RFC 3711(作者包括思科、爱立信等)。

项目 说明
标准 RFC 3711
功能 对 RTP/RTCP 载荷加密、认证(如 HMAC)、抗重放(序号/滑动窗口)
密钥管理 RFC 3711 不规定密钥交换,常与 DTLS、SDES、MIKEY 等配合

SRTP 不改变 RTP 的头部语义与端口使用方式,主要是在载荷与可选头部上做加密与认证,因此与现有 RTP 会话、SDP 描述可兼容使用。

算法与密钥(RFC 3711):

项目 说明
加密 默认 AES-128-CM(Counter Mode),可配置其他
认证 默认 HMAC-SHA1(80 bit 标签),用于完整性与会话认证
抗重放 使用 RTP 序列号与滑动窗口拒绝重放包
密钥派生 主密钥 + 盐(salt)派生会话密钥;RFC 3711 不规定密钥交换,DTLS-SRTP(如 WebRTC)常用 DTLS 协商密钥后派生 SRTP 密钥

十、常见问题与抓包

  • 抓包 :Wireshark 过滤 rtprtcp;按 SSRC 过滤可跟踪单路流;查看序列号是否连续(丢包)、时间戳是否单调;RTCP RR 中的丢包率与抖动可辅助诊断。
  • 无声音 / 花屏 :确认双方 SDP 中 m=a=rtpmap 是否一致、PT 是否匹配;确认 RTP/RTCP 端口是否被防火墙/NAT 放行;查看 RR 丢包与抖动是否过大;若用 SRTP,确认密钥与算法一致(如 DTLS-SRTP 握手是否成功)。

小结

RTP 在 UDP 上承载实时数据,提供序列号、时间戳、SSRC/CSRC 与载荷类型,用于丢包检测、去抖动与同步;不提供可靠传输与拥塞控制。RTCP 配套传输质量反馈(SR/RR)、源描述(SDES)、BYE 等,RTP 与 RTCP 使用偶数/奇数端口对。与 SDP/SIP 配合时,SDP 描述端口与 PT,SIP 建立会话后按 SDP 建 RTP/RTCP。SRTP 在 RTP/RTCP 上增加加密、认证与抗重放,常与 DTLS 等密钥交换配合。


术语与 RFC 速查

术语 英文 含义
RTP Real-time Transport Protocol 实时传输协议,RFC 3550
RTCP Real-time Transport Control Protocol 实时传输控制协议,与 RTP 配套
SSRC Synchronization Source 同步源标识符
CSRC Contributing Source 贡献源,由混合器插入
SRTP Secure RTP 安全 RTP,RFC 3711
Profile RTP Profile 如 AVP/SAVP,定义 PT 语义(RFC 3551)
CNAME Canonical Name SDES 中源规范名,用于同一用户多流关联
Mixer RTP Mixer 混合多路 RTP 为一路,并写入 CSRC 列表
Jitter 抖动 包到达时间变化,RR 中上报

RFC 与规范

文档 内容
RFC 3550 RTP: A Transport Protocol for Real-Time Applications(含 RTCP)
RFC 3551 RTP Profile for Audio and Video Conferences(AVP 等)
RFC 3711 The Secure Real-time Transport Protocol (SRTP)
RFC 5764 DTLS-SRTP(密钥交换与 SRTP 结合)

本文内容依据 IETF RFC 3550、RFC 3711 及《网络协议本质论》第 17 章整理。

相关推荐
wangjialelele2 小时前
万字整理计算机网络知识点
linux·c语言·网络·c++·计算机网络·php
Starry_hello world2 小时前
Linux 网络(6)
linux·运维·网络
Starry_hello world2 小时前
Linux 网络(5)
linux·网络·智能路由器
雪碧聊技术2 小时前
什么是Seedance 2.0?字节自研多模态AI视频生成引擎全解析
人工智能·音视频·seedance2.0
咚咚王者2 小时前
人工智能之视觉领域 计算机视觉 第十三章 视频背景减除
人工智能·计算机视觉·音视频
刘孬孬沉迷学习2 小时前
路由算法学习( Dijkstra 算法 Bellman-Ford方程算法)
网络·学习·智能路由器·信息与通信·dijkstra算法·路由算法·bellman-ford算法
papaofdoudou3 小时前
Linux内核任务调度时机总结
linux·运维·网络
开开心心_Every3 小时前
系统清理工具清理缓存日志,启动卸载管理
运维·服务器·网络·数学建模·电脑·excel·抽象代数
Vincent_Zhang2333 小时前
第五周:传输层(上)
网络