流媒体协议RTP与SRTP简介

RTP协议用于传输实时数据,可用于传输语音与视频。在网络协议分层层架构中,RTP工作在传输层(通常为UDP)之上。在VoIP系统中,音视频传输是通过RTP/RTCP协议协同实现的。


RTP协议

RTP协议通常由UDP来承载,由UDP提供复用(分配不同的端口号传送多个RTP流)及校验和服务。一般情形下,RTP流使用偶数(2n)端口号,相应的RTCP流使用相邻的奇数(2n+1)端口号。

为了减少时延,语音报文分组通常都很短(20~30ms)。

一般情况下,一个UDP包只包含一个报文分组(RTP的净荷即为传送的语音数据)。RTP头如下所示

0~1234~789~1516~31
VPXCCMPT序号
时间戳
同步源(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有如下五种分组类型:

类型缩写表示用途
200SR(Sender Report)发送端报告
201RR(Receiver Report)接收端报告
202SDES(Source Description Items)源点描述
203BYE结束传输
204APP特定应用

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

回到顶部