UDP实现可靠性传输

1、简介

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

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

实现肯定机制、重传机制、窗口确认机制服务器

若是你不利用Linux协议栈以及上层socket机制,本身经过抓包和发包的方式去实现可靠性传输,那么必须经过以下功能:markdown

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

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


2、RUDP

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


3、RTP

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

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


4、UDT

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


一、UDT应用层协议

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

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

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

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

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

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

UDT老是试着将应用层数据打包成固定的大小,除非数据不够这么大。和TCP类似的是,这个固定的包大小叫作MSS(最大包大小)。因为指望UDT用来传输大块数据流,咱们假定只能很小的一部分不规则的大小的包在UDT session中。MSS可以经过应用程式来安装,MTU是其最优值。

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


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

相关文章
相关标签/搜索