在VoIP领域中,一般使用RTP作为媒体的传输协议。RTP(real-time transport protocol)由rfc3550定义(其中RFC1889已经过期)。
RTP提供了一种适用于应用在端到端之间传输音频、视频等实时数据的网络传输方式。RTP没有资源预留机制,不确保实时服务的服务质量。通过RTCP控制协议监控数据传输来最大化的利用网络。RTP/RTCP是独立于传输层和网络层设计的。
RTP应用场景:
一般使用IP和UDP承载,如下图
1. 简单的多播音频会议
2. 音频和视频会议
3. 混合器和翻译器(工作在RTP层面)
- 混合器的一个应用场景是当低带宽网络参会方加入高带宽网络会议中,为不让会议中的每个人都使用低带宽网络、降低音频编码质量,在低带宽网络区域放入一个混合器。混合器重新构造数据包,将多路音频流混合成一路音频流,按低带宽编码后发送到低带宽网络。
- 翻译器的一个应用场景是当音频会议中的参会方在应用层防火墙之后,不允许IP报文通过时,在防火墙的两侧各安装一个翻译器,通过两个翻译器完成参会方之间的数据交换。
术语定义:
RTP payload: RTP携带的负载数据,如音频采样或压缩的视频数据
RTP packet: 包含RTP头和负载的数据包
RTCP packet: RTCP数据
Synchronization source (SSRC): 同步源标识符
RTP固定头部:
version (V): 2 bits, 版本号
padding (P): 1 bit, 填充标志位,如果设置为1,则在有效负载后填充额外的8位组数据,最后的 8 位组表示填充的长度。填充的一个应用场景是一些加密算法要求固定的数据块大 小。
extension (X): 1 bit: 扩展位,如果设置为1, 则固定的RTP头后面跟随一个扩展头
CSRC count (CC): 4 bits: CSRC的数量,CSRC位于固定头之后
marker (M): 1 bit: 标记(识)位,标识位的意义由应用的文档定义。比如标识一帧视频数据 的边界
payload type (PT): 7 bits: 负载类型,由RFC3551定义, 如0:PCMU,8:PCMA
sequence number: 16 bits: 序列号,最大值65535,每发送一个RTP数据包,序列号加1。序 列号的作用是接收方用来检测数据丢失和重新排序数据使用。为了防止对已 知明文的攻击,初始序列号应该是随机生成的。
timestamp: 32 bits: 时间戳,RTP负载中第一个8位组的采样时间,同一时间产生的数据包有 相同的时间戳,比如属于同一视频帧的连续多个RTP包
SSRC: 32 bits: 同步源标识,唯一标识RTP流
CSRC list: 贡献源列表,支持表示0~15个贡献源,每一个用32位 表示,如果超过15 个,只 列出15个。一般是被混合器加入的,用于接收方识别出讲话者
RTP扩展头部:
defined by profile: 自定义
length: 16bit, 表示有多少个32bit扩展数据的个数
header extension: 扩展数据
RTCP(RTP Control Protocol):RTCP周期性的向所有参与方发送控制包来反馈RTP数据 收 发质量,如丢包率等。
RTCP报文类型:
SR:发送者报告,发送方 发送和接收情况的统计
RR: 接收者报告, 接收方发送和接收情况的统计
SDES:媒体源描述,包括CNAME
BYE: 表示参与方退出
APP: 应用层自定义功能
抓包实例: