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**交换机制的。