流媒体协议RTP与SRTP简介
RTP协议用于传输实时数据,可用于传输语音与视频。在网络协议分层层架构中,RTP工作在传输层(通常为UDP)之上。在VoIP系统中,音视频传输是通过RTP/RTCP协议协同实现的。
RTP协议
RTP协议通常由UDP来承载,由UDP提供复用(分配不同的端口号传送多个RTP流)及校验和服务。一般情形下,RTP流使用偶数(2n)端口号,相应的RTCP流使用相邻的奇数(2n+1)端口号。
为了减少时延,语音报文分组通常都很短(20~30ms)。
一般情况下,一个UDP包只包含一个报文分组(RTP的净荷即为传送的语音数据)。RTP头如下所示
0~1 | 2 | 3 | 4~7 | 8 | 9~15 | 16~31 |
V | P | X | CC | M | PT | 序号 |
时间戳 | ||||||
同步源(SSRC)标识 | ||||||
分信源(CSRC)标识(0~15个) |
- V:RTP版本号,为“10”。
- P:填充指示位,P为“1”时表示分组有填充(结尾填充数据)。
- X:扩展指示位,X为“1”时,则表示固定头部后还有一个扩展头部。
- CC:CSRC计数,指示固定头部后的CSRC的个数
- M:由应用文档解释,通常不用。
- PT:RTP分组的净荷类型,如:
- “0”: G.711μ
- “8”: G.711A
- “4”: G.723.1
- “18”: G.729
- “96~127”:用于动态协商的算法,如iLBC、AMR、SPEEX等。
- 序号:RTP分组的序号(供接收方检测分组丢失和恢复分组次序)。其初值为随机数,每发送一个增加1。
- 时间戳:表示RTP分组第一个字节的取样时刻。其初值为随机数,每个采样周期加1。
- 如每次传送20ms的采样频率为8000Hz的数据,则每个传输分组时间戳增加160。
- SSRC:同步源标识(Synchronous Source),表示信号的同步信源(如产生媒体流的麦克风、摄像机、RTP混合器等)。其值应随机选择,以保证同一个RTP会话中任意两个同步源的SSRC标识不同。
- CSRC:分信源(贡献源)标识(Contributing Source),识别该数据包中的有效载荷的贡献源。
- RTP分组的头部最多可以包含15个CSRC标识,其数目由CC字段指明。
- 通过混合器时;来源的RTP包的SSRC作为CSRC,混合器的SSRC做为新的SSRC。
当然,RTP也支持承载在TCP上,但需注意重传管理,每次重传都会增加会话的时延。
RTCP协议
RTCP是RTP(没有提供任何机制来保证数据包的到达顺序与传输质量)的控制协议,主要提供:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。在RTP会话期间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,各参与者可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,以有效的反馈和最小的开销使传输效率最佳化。
RTCP通常也是用UDP来传送的,仅仅封装一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型:
类型 | 缩写表示 | 用途 |
200 | SR(Sender Report) | 发送端报告 |
201 | RR(Receiver Report) | 接收端报告 |
202 | SDES(Source Description Items) | 源点描述 |
203 | BYE | 结束传输 |
204 | APP | 特定应用 |
RTCP传输过程中进行流量总体控制,因此参会人员越多,RTCP发生间隔越长。其中SR与RR比其他报告发送的频繁,这些报告用于反馈网络质量,主要包括:
- 发送与接收包的数量;
- 丢失包的数量;
- 包Jitter(延时波动);
安全实时传输协议SRTP
SRTP(Secure Real-time Transport Protocol)是对RTP协议的扩展,旨在提供数据加密、消息认证、完整性保证和重放保护等。SRTP使用AES对RTP/RTCP数据包的载荷进行加密保护,使用HMAC-SHA1提供完整性保护和消息认证。
SRTP报文格式与RTP基本相同,只是加入了两个主密钥标识符(MKI)和认证标签(Authentication Tag):
SRTP会话时,发送方与接收方需要为每个SRTP会话维护一份加密状态信息,即加密环境(加密环境ID号由SSRC、目的网络地址与端口号确定)。加密环境包含两类参数:
- 算法相关参数:与认证与加密算法相关的,如会话密钥、初始化向量等;
- 算法无关参数:SRTP规定的一些通用参数。
- 重要参数说明:
- 循环计数器(Rollover Counter,ROC):32位,16比特的RTP序号(SEQ)重置次数(超过65535);所以RTP数据索引为i=2^16*ROC+SEQ;
- 16比特的序列号;
- 抗重放列表:接收且通过认证的SRTP数据包的索引号,不能低于256条;
- <From, To>值:两个48比特的SRTP报文索引,标识了主密钥的合法范围;
- 密钥推导率:从主密钥推导会话密钥,为2的幂(1~2^24),默认为0表示不用该参数;
- 加密算法标识符:使用哪种算法,如AES-f8;
- 消息认证算法标识符:使用哪种算法,如HMAC-SHA1;
- 主密钥:用于推导会话密钥,要确保机密;
- 主Salt:用于从主密钥推导各种会话密钥的随机数;
密钥协商主要有ZRTP与MiKey模式。MiKey有三种密钥协商方式:
- 恭喜密钥(Pre-shared key)
- 公钥加密(Public-key encryption)
- Diffie-Hellman密钥交换
ZRTP
ZRTP是一种密钥管理协议,用来协商SRTP加密和认证相关的各种参数以及会话密钥,它复用了RTP端口(在媒体路径上传输);它是基于Diffie-Hellman密钥交换机制的。
以上是 流媒体协议RTP与SRTP简介 的全部内容, 来源链接: utcz.com/a/55490.html