UDP实现可靠性传输

3,503 阅读5分钟

一、简介

UDP不属于连接型协议,因而具有资源消耗小处理速度快的特点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为他们及时偶尔丢失一两个数据,也不会对接受结果产生太大影响。

传输层无法确保数据的可靠传输,只能通过应用层来实现。实现的方式可以参考TCP可靠性传输的方式,只是实现不在传输层,实现转移到应用层。

实现确定机制、重传机制、窗口确认机制

如果你不利用Linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须通过如下功能:

  • 发送:包的分片、包确定、包的重发
  • 接受:包的调序、包的序号确定

目前有如下开源程序利用UDO实现了可靠的数据传输,分别是RUDPRTPUDT


二、RUDP

RUDP提供一组数据服务质量增强机制,如拥塞控制的改进重发机制淡化服务器算法等,从而在包丢失和网络拥塞的情况下,RTP客户机(实时位置)面前呈现的就是一个高质量的RTP流。在不干扰协议的实时特性的同时,可靠UDP的拥塞控制机制允许TCP方式下的流控制行为。


三、RTP

实时传输协议RTP)为数据提供了具有实时特征端到端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在UDP上运行RTP以便使用其多路节点和校验服务;这两种协议都提供了传输层协议的功能。但是RTP可以与其他适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么RTP可以使用该组播表传输数据到多个目的地。

RTP本身没有提供按时发送机制其他服务质量(QoS)保证,它依赖于底层服务区实现这一过程。RTP并不保证传送或防止无序传送,也不确定底层网络的可靠性。RTP实行有序传送,RTP中的序列号允许接收方重组发送发的包序列,同时序列号也能用于决定适当的包位置,例如:在视频解码中,就不需要顺序解码。


四、UDT

基于UDP的数据传输协议UDT)是一种互联网数据传输协议。UDT的主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差。顾名思义,UDT建于UDP之上,并引入新的拥塞控制数据可靠性控制机制。UDT是面向连接双向应用层协议。它同时支持可靠的数据流传输部分可靠的数据报传输。由于UDT完全在UDP上实现,它也可以应用在除了高速数据传输之外的其他应用领域,例如点到点技术(P2P),防火墙穿透,多媒体数据传输等等。


1、UDT应用层协议

UDT并不是在瓶颈带宽相对较小的和大量多元短文档流的情况下用来替代TCP的。

UDT主要作为TCP的朋友,和TCP并存,UDT分配的带宽不应该超过根据MAX-MIN规则的最大最小公平共享原则(备注:最大最小规则允许UDT在高BDP连接下分配TCP不能使用的可用带宽)。

UDT是双工的,每个UDT实体有两个部分:发送和接受。

发送者根据流量控制和速率控制来发送(和重传)应用程式数据。

接受者根据数据包和控制包,并根据接收到的包发送控制包。发送和接受程式共享同一个UDP端口来发送和接收。

接受者也负责触发和处理任何的控制事件,包括拥塞控制和可靠性控制和他们的相对机制,例如RTT估计、带宽估计、应答和重传。

UDT总是试着将应用层数据打包成固定的大小,除非数据不够这么大。和TCP相似的是,这个固定的包大小叫做MSS(最大包大小)。由于期望UDT用来传输大块数据流,我们假定只能很小的一部分不规则的大小的包在UDT session中。MSS能够通过应用程式来安装,MTU是其最优值。

UDT拥塞控制算法速率控制在窗口(流量控制)合并起来,前者调整包的发送周期,后者限制最大的位被应答的包。在速率控制中使用的参数通过带宽估计技术来更新,它继承来之基于接受的包方法。同时,速率控制周期是估计RTT的常量,流控制参数参考与对方的数据到达速度,另外接收端释放的缓冲区的大小。


几乎所有内容来源于:udp如何实现可靠性传输?