首页 > 代码库 > rtp、udp、tcp协议

rtp、udp、tcp协议

OSI七层模型:

应用层:文件传输,电邮,文件服务等。HTTP,Telnet,DNS, FTP等协议

表示层:数据格式化,代码转换,数据加密等

会话层:解除或建立与别的接点的联系

传输层:提供端到端的接口   TCP UDP  RTP

网络层:为数据包选择路由    IP ICMP RIP

数据链路层:传输有地址的帧以及错误检测功能     

物理层:以二进制数据形式在物理媒体上传输数据 


TCP/IP五层协议

应用层:

传输层:

网络层:

数据链路层;

物理层:


RTP协议详解:

RTP协议层次:

下图是流媒体应用的一个典型的协议体系结构:


RTP与其他协议的关系:



RTP,TCP,UDP都是传输层协议。RTP也可以认为是位于传输层与应用层之间。

RTP协议并不保证传输质量,由RTCP保证传输质量。

RTP实现者将RTP数据发送时,需将数据封装成RTP包,而在接收到RTP数据的时候,需要将数据从RTP包中取出。

有人讲RTP看做应用层的协议,这是站在了开发者的角度。TCP/IP提供的是我们最常用的服务,但是RTP需要应用者自己去开发,从开发者的角度讲,

RTP的实现和应用层的协议的实现没不同,所以可以将RTP看成是应用层的协议。


RTP的封装:

一个协议的封装满足协议的功能的需求:



版本号(V):2比特,用来标志使用RTP版本。

填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含填充的附加字节。

扩展位(X):1比特,如果该位置位,则该RTP包的固定头部后面就跟着一个扩展头部。

CSRC技术器(CC):4比特,含有固定头部后面跟着的CSRC的数据

标记位(M):1比特,该位的解释由配置文档来承担。

载荷类型(PT):7比特,标识了RTP载荷的类型。

序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,可以由该域检测包的丢失及恢复包的序列。序列号的初始值是随机的。

时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化为一个初始值。即使

在没有信号发送时,时间戳的值也要随时间的不断的增加而增加。时间戳是去除抖动和实现同步不可缺少的。

同步源标识符(SSRC):32比特,同步源就是RTP包源的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是

随机获取的RFC1889推荐了MD5随机算法。

贡献源列表(CSRC List):0-15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。


RTCP的封装:

RTP需要RTCP为其服务提供保证。

RTCP的主要功能是:服务质量的监视与反馈,媒体间的同步,以及多播组中成员的标志。在RTP会话期间,各参与者周期性的发送

RTCP包。RTCP包中含有以发送的数据包的数量、丢失的数据包的数量等统计信息,因此各参与者可以根据这些信息动态的

改变传输速率,甚至可以改变有效载荷类型。

RTCP也是用UDP来传输的。但是RTCP封装的仅是一些控制信息,因而分组很短,所以可以将多个RTCP包分组封装在

一个UDP包中。RTCP中有如下5组分组

200      SR(Sender report)      发送端报告

201      RR(Receiver Report)    接收端报告

202      SDES(Source Description items)    源点描述

203      BYE                    结束传输

204 APP 特定作用



以上5组封装大同小异。比如:SR

发送端报告分组SR用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:

相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。

SR包的封装如下。

版本(V):同RTP包头域。

填充(P):同RTP包头域。

接收报告计数器(RC):5比特,该SR包中的接收报告块的数目,可以为零。

包类型(PT):8比特,SR包是200

长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。

同步源(SSRC):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。

NTP TimestampNetwork time protocolSR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。

RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。

Senders packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。

Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。

同步源nSSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。

丢失率(Fraction Lost):表明从上一个SRRR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。

累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,SSRC_n传过来的RTP数据包的丢失总数。

收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号。

接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估。

上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。

上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。




RTP会话的建立:


当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口号组成,有两个端口,一个给RTP包,一个给

RTCP包,使得RTP/RTCP能正确的发送。RTP数据发向对应的UD端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1)。这样构成一个UDP端口对。

RTP的发送过程如下,接收过程相反:

1>RTP协议从上层接收流媒体信息码流(如H.263),封装成RTP数据包;RTCP从上层接收控制信息,封装成RTCP包。

2>RTP将RTP数据包发往UDP端口对中偶数端口,RTCP将RTCP包发往UDP端口的接收端口。









rtp、udp、tcp协议