APP下载

UDX:基于UDP的可靠传输协议

2013-09-08于本成曹天杰

计算机工程与设计 2013年6期
关键词:重传包率传输

于本成,曹天杰

(1.中国矿业大学 计算机科学与技术学院,江苏 徐州221000;2.徐州工业职业技术学院信息管理技术学院,江苏 徐州221000;3.中国矿业大学 信息安全国家重点实验,江苏 徐州221000)

0 引 言

目前主流的网络传输协议为可靠传输TCP和实时传输UDP[1-2]。TCP提供的是面向连接、可靠的字节流服务,当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。UDP是一个简单的面向数据报的运输层协议,UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。而通用数据交换 (universal data eXchange,以下简称 UDX)协议是完全基于标准C++开发的一套类似TCP的UDP传输库,是一种可靠传输算法,主要原理是兼顾TCP的可靠性和UDP的实时性,而其最重要的优势是算法的可控性。通过分析、比较、设计后对UDX协议进行优化,达到了UDX追求的最大带宽利用率,吞吐量及实时性,适合窄带环境,其算法始终贯穿其中。UDX协议,其能够与TCP协议、UDT协议共存,并且UDX能有效降低有线、无线网络中的丢包率,提高传输效率及响应速度,提高信道的利用率和提升网络性能。UDX支持流式,和数据包式可靠传输,支持中转,P2P,对文件传输进行了优化,支持断点续传,中转等。

1 流量控制之分析

UDP的特性适合传输不需要确认的数据,可以再应用程设计传输协议来实现可靠传输,比如RUDP协议。但是光可靠传输还不够,流量控制是很重要的,滑动窗口协议是TCP的流量控制算法[3],由不同部分组成:Aimd、Slow Start、对超时事件的处理。在这个算法中,最重要的是rto超时时间与basertt的测量这两个量。

在流量控制上主要有往返时间的增量控制、丢包时间差控制、ACK返回控制等主流控制方法。这些控制方法的核心就是控制发送窗口的大小,窗口大小与流量大小成正比关系。RTT方法代表的TCP实现是TCP VEGAS[4]。通过公式Expected=WindowSiz/BaseRTT和Actual= WindowSize/RTT及Diff=Expected-Actual来动态更改发送窗口大小。当流量超过负荷时就会发生丢包现象,而当丢包发生时采用折半发送窗口解除拥塞[5]。

对于拥塞预测,传统的RENO算法是通过丢包检测,这个算法理论上说是检测的本质,但是对于超大延时网络,如果当丢包后再去拥塞避免则为时已晚。因为网关上已经有太多的包必须被丢弃。这样的情况会马上引发慢启动。传输效率大大损失,这在其他UDP传输算法上,比如UDT,VTCP上表现比较明显。拥塞预测方式主要有RTT测量和ACK频率测量以及流量增量测量。

2 中转模式解析与设计

如今P2PNAT已经是比较成熟的技术[6,7],也有很详细的原理及实现,但是真正能稳定使用的代码却很少,主要原因是参数设置复杂、代码庸长、不便于项目实施。UDX开发库支持P2P,但并不是所有网络都能够进行P2P的,比如对称型网络。

如何解决该问题,一般常见的方式就是中转,中转模式是由服务器中转数据,即A->SERVER->B。而本文设计了新的UDX中转模式如图1所示。

图1 UDX内部的数据流中转模式

新模式的优势是对于应用层来说A->B之间只有一个IUDX接口,一条链接。而实际上数据的传递可能经过了多条路由。A->SERVER1->B,A->SERVER2->B,A->SERVERN->B,当其中一个中转挂掉时,不影响AB之间的数据传输,提高了实时传输的安全特性。而且UDX会选比较快速的路径进行传输。UDX是一个比较方便使用的UDP库,可以利用接口简单设置P2P服务器参数和超时,便可以完成P2P联接,让应用程序开发变得相当简单,具体过程如下:

2.1 设置P2P回调函授,当P2P成功或超时能得到通知

代码片段1:

把主界面从这些接口派生,可以接收到UDX内部发出的一些事件,这些事件是由UDX内部线程回调的。关健的一步设置回调关联,利用UDX的接口SetSink把UDX和主界面关联起来。

2.2 设置P2P参数,进行P2P

代码片段2:

2.3 处理P2P结果

代码片段3

2.4 处理中转结果—中转回调事件

代码片段4:

3 UDX协议分析与全双工思考

3.1 如何检测当前链路实际可用流量

在以前的版本中,UDX以RTT为测量方法,通过VEGAS算法,估计流量,DIFF=EXPECT -ACT,原理就是控制当前处在网络上的变化流量在一定范围中 (A,B),A<DIFF<B。最近UDX通过流量的增量DELBEW来测量网络带宽,但却牺牲了反应的灵敏性,没有VEGAS能更加灵活的控制发送速度,VEGAS可以预测拥赛。所以现有的UDX算法,是以牺牲丢包来检测最佳流量[8]。

3.2 如何在最大流量处保持发送速度

问题1已经解决了确定最佳发送速度的时刻,但是本文算法一直以时间T在不断前进,而且不断有回包应答,由于每个应答都会增加发送窗口,实际上却并不是不停增加发送速度就能增加实际的发送流量。

本文设计的解决方案是当最大发送速度时便停止增加窗口,使其稳定在一个大小,流量发送就会很平稳。设计UDX内部4个变量:最佳发送速度、最大发送速度、实际发送速度、最大流量相互制约控制发送速度。判断条件是:最大流量时,实际发送速度 > 最佳发送流量的*1.25倍(实验值)。

3.3 在其他流加入时,如何提升竟争性让自己的算法能有效利用带宽

现在的应用越来越多,不同的应用有不同的网络需求。有时为了保证一些数据能够最快的传输出去,必须让其占用更多的带宽,典型的就是视频语音数据。这里的核心问题是当网络在一个平横状态下,UDX保持在最佳状态,如何检测有其他流加入?

经过反复实验,当有流加入时会有更多的丢包、更长的往返时间、传输质量的下降和流量的减少。早期的版本,UDX会因为平横打破去寻找新的平横点。由于以前算法的缺陷有时在没有找到新的平衡点时可能已经击穿了网络,这样UDX可能就失效了,会重新进入慢起动,效率有很大损失。如果单纯的去看丢包率,往返时间是不会找到真正的解决办法的,虽然在某些网络上可以固定一些参数,比如往返时间的变化率,流量增量等,可以检测到但都不够灵活和准确。

笔者最终选择了逼近算法,而不是通过某一个量来检测。当平横打破时,设计UDX侦测RTT的变化,这些变化本质上是引起了流量的变化,结合实际的应答流量,来影响前面提到的4个量,并通过问题1的公式很快达到新的平横。

3.4 当其他流离开时如何恢复到最佳状态,即以最小的RTT,换取最大的带宽

以前的UDX版本达到了新的平横是不能回到最开始的平横点时。新的平横点是建立在有新的流加入竟争的时候产生的,当别的流已经离开,如何回到之前的平横点呢?经过尝试,修改最大发送速度、丢包后减少的增量、窗口步进的步长等许多方法都没有成功。最终发现不必调整当前发送速度,但并不是真正的不去调整它,而是要调整本质----控制发送速度的最佳发送速度。

在新的平横点时最佳发送速度也发生了变化,以前UDX都没有在流变化时去修改这个值,UDX就一直处于这个新的平衡点,这个新的平横点是处于最大流量的点,也是非常接近拥塞点,若不调整稍有网络波动就会发生丢包。最佳速度根据往返时间进行调整后,发送速度也会自然因为本文前面提到的四个量的平横判断条件,逐步恢复到最佳点。

3.5 不管是大包小包,满足以上4点要求

目前主流算法上,对流量计算都是假定每个包是一个最小单元MSS。在此基础上进行传输流量计算是不准确的。比如UDT中计算m_dPktSndPeriod= m_dCWndSize/(m_iRTT+ m_iRCInterval);这里 m_dCWndSize就是发送窗口的大小,如果其中每个包都是以MSS来计算的话,这个算法是无错的。但是有些应用发的包很小,比如一些命令、在竟技游戏中一个操作都只有几个字节,特别是视频方面BPI侦都有可能,均小于MSS,计算出来的流量和实际流量差距就非常大了,故UDT是不适合这种应用的收发的。尽管在窄带下拥塞控制方面,以前版本的UDX已经领先UDT,但和UDT有同样问题。一切假定也是MSS。

3.6 如何让一个连接在处于良好的双工状态并满足以上要求

其实本质答案也是第一个问题,就是检测最大流量的方式。检测方式主要有两种:一种是VEGAS为代表的以RTT为核心的算法,VEGAS这类算法RTT是共享的,一边的传输会严重影响另一边的传输,并且是以单边流量低者为衡量,显然大大降低有效利用率;另一种是以RENO为代表的丢包检测,RENO算法可以完成检测,但是直到丢包为止,必然间接影响到回包,同样会影响到另一方。

笔者设计UDX算法是不同于前面二者的,是通过检测流量的增量来控制的。在双工的时候,并不会因为RTT的变化而影响单边的流量算法,相当于独立的两条链路,从而得到双工传输较好质量。

4 利用VEGAS+SACK来实现UDX算法

经过以上分析最终选择利用VEGAS+SACK来实现算法。VEGAS可以精确控制当前传送的最大流速,可以确定发送窗口大小。SACK[9]可以实现协带多个ACK,防止ACK丢失,从而可以大大提高效率。

4.1 算法设计过程中两点思考

对于周期性发送新数据的问题,考虑到每收到一个ACK时,表明管道中有一个数据分组离开网络,可以立即追加一个新的分组。所以把周期性发送1个管道的数据量改成半个管道数据,可以大大提高双工时的效率和公平性。

设计重传策略,把重传包放在一个fifo的数组中,总是考虑最先传送的包是否超时,达到防止过多的重传。对网络差的情况下,效率提高明显。工作流程如图2所示。

图2 工作流程

4.2 ACK设计

同时回传多个包的ack,可以弥补其中某些ack丢失,从而节省了重传带宽增加了传输效率。当然快速重传的设计是当某个包,联续收到34个sack的时候,可以断定,此包已经丢失,可以在大于一个rto的情况进行重传。Ack设计如图3所示。

图3 ACK设计

当VEGAS在小于diff的时候会不断增大窗口,则会导致当缓冲全部用完,而最前面的序号没有确认,实际可发数据变得非常少,远小于发送窗口大小,rtt会因为数据发送量的减少而变短。由于rtt变短,造成发送窗口的继续变大,当窗口大小大于实际流量带宽的时候,更容易发生丢失,从而造成一种死循环。

针对这一问题的优化方案是:增加一个最大窗口,当发送窗口在最大窗口一半时,如果发生包丢失,窗口大小立即--。而小于最大窗口一半时,+=1/wndsize。当没有丢包时,如果小于最大窗口一半时wndsize++,大于一半时 +=1/wndsize。这样当接近伐值时可以慢速增长和发生拥塞时快速减少发送数据,使发送流量接近最大发送速度。优化算法后,在丢包率本身就很高的网络这种处理方法会大大的降低发送速度。因为丢包过多,窗口不能变得很大。这种网络条件下只有尽可能的多发数据,有效数据的绝对量则多一些,当然丢包会更多一些。必定浪费很多带宽,在多个流竟争的条件下,会严重影响其他流。本文算法是一种保守的处理方法,扶强不扶弱,从而可以减少浪费。此算法更适应用在文件传输和即时通讯领域。

5 UDT协议和UDX的测试结果比较

5.1 主要特点

UDT的CC算法适合大块数据的数据源共享高带宽(广域网)的情况;主要目标是效率、公平、稳定。和TCP并存。UDX追求的是最大带宽利用率,吞吐量及实时性。

5.2 性能比较

UDT测试结果如图4,图5,图6所示。体现了UDT协议的效率、公平、稳定。在相同网络环境下测试结果:UDX:250KB/秒,丢包率是38.4%.Udx:386KB/秒,包率12%。

图4 UDT测试结果 (1)

5.3 UDT测试

在控制台中是UDT 4.6版本的客户端连上了测试公网的服务器模拟发送数据。对appclient的输出信息做了简单修改,比如输出的第一列是实时速度,最后一列是丢包数,第二列是发送总数。从最后得到的图形看出,这个版本的UDT在发送速度在最高点3mb左右,转化成B就是400kB,最小在0.98mb就是110KB左右,因为UDT没有平均速度,只有实时速度,不能准确的知道平均速度是多少,现在凭上面测试出的实时速度,最多在250KB/秒,而丢包率是5111/(5111+8189)=38.4%。测试结果如图7所示。

图7 UDT测试结果

5.4 UDX测试

经测试得到如下截图,在红框里显示的是实时速度和平均速度,很显然是386KB远大于UDT。并且右上角丢包率是12%也远小于UDT。在从流量软件上看两者的流量图区别,UDT开始发包流量很高,然后迅速下降,而且不能保持。后者是UDX,流量相对稳定、密集且饱满。UDX测试与比较UDT结果如图8所示。

图8 UDX测试与比较UDT结果

6 UDX在改进算法后与最新版本的VTCP比较测试结果

与该版本的VTCP的作者讨论交流后该版本的测试数据也很详细,包括平均速度、实时速度、丢包等,图最下方配上流量图。VTCP测试结果如图9所示。

图9 VTCP测试结果

本文最重视的是速度,UDX是225kB/S,VTCP是193KB/秒,其实已经相当接近了,然而丢包率VTCP是23%而UDX是13%。左下角是两次比较的流量图。UDX测试结果与比较VTCP结果如图10所示。

图10 UDX测试结果与比较VTCP结果

7 优化后的UDX优势

7.1 带宽的评估、预测

(1)在检测最大发送窗口的时候,是参照RENO算法,丢包检测。但是在之个过程中,UDX还检测了ACK的回复率,当出现ACK回复频率发生变化 (变化率K>0.35)时表明现在网络出现了波动,可以预测已经达到拥塞临界,这有点象VEGAS一样,可以提前预测出现拥塞,这时UDX调整慢启动阀值,提前进入拥塞避免阶段。

(2)结合了SACK算法,每个ACK协带了多个应答包,从而精确实现了选择性重传。减少了不必要的重传。与传统ACK不同点是,协带了更多的ACK,而且设计了新的ACK结构,增加压缩ACK方法,从而应答数据量也比较少。

(3)在拥塞避免阶段,通过计算DIFF= minrtt*(wnd/minrtt-wnd/rtt)<avgbew*0.35f,提前预测拥塞。这个不同点在avgbew,这个值是通过ACK应答计算而来,接近真实值,从而避免了传统VEGAS的计算值不准确(一般不准确发生在,由于网关的硬件限速)。

(4)丢包检测算法,每个发送包上记录了,上次发送的时间和最大发送序号,当收到ACK时和当前对应量进行比较,可以精确知道哪个包需要重传,而不必等到超时到来。从而可以快速响应重传节省了时间。

(5)快速恢复,当UDX联续收到二个新的ACK时立即恢复到先前的发送窗口,减少了恢复开消。

(6)结合WEST WOOD,通过统计方式计算流量,通过RTT/WND=BEW的公式,计算理论发送窗口和实际窗口进行比较,从而提高稳定性,使发送稳定在实际的带宽。

7.2 快速重传

UDX的ACK设计,其实就是SACK协议,但是实现手法是不同于SACK,SACK是首尾序号对,而UDX是一个起始序号,及后面的相对序号组成,这样可以容纳更多的ACK。当发送方收到任何一个ACK时就可以准确的确定哪个包已经丢掉了,这时可以马上重传,而不需要等到超时后再重传,从而提高了实时性及间接的提高了吞吐量。

7.3 AIDM 的改进[10]

(1)慢启动阶段是W +=1,拥塞避免阶段是W +=1/W;

(2)UDX在窗口管理上,也采用了不同的设计方法。其中引入了一个饱和状态,也就是最佳状态。而实际发送速度是这个最佳状态时的1.25倍发送速度。这样可以保证较高的竟争性。

(3)UDX中度量的单位是当前流量,控制窗口的核心思想是控制流量的增量。当增量趋近于实际流量的<=5%波动时,认为流量已经最大,这时进入饱和状态,当UDX进入饱和状态时,转入拥塞避免加速模式,窗口不增大反而会减小,达到一个动态平横,使发送速度,始终稳定在一个水平上。

(4)另外不同点是,窗口控制是传统TCP是每周期增长幅度最大为1,而UDX是ACK驱动窗口增长的,并没有限制在RTT内变化值,所以加速可能会在一个RTT内超过1。

(5)UDX针对不同的网络进行了RTT的自动适应算法,引入了一个笔者定义的理论流量的概念,其与实际收到的数据计算的流理进行比较,当理论流量小于实际流量时会对窗口进行校正,使其保持在当前流量的窗口大小,这样流量更加平稳,不会出现偏差。只有流量的平稳性才能让其他参数有意义,否则流量控制成为空谈,这也是其他算法的缺点。

(6)丢包控制:UDX每收到一个丢包信号时,会对拥塞窗口进行调整,采用sstresh=wnd*a,wnd+=b;其中a,b(可负)是UDX经验值,具体参数可以调整。

(7)结合丢包控制:UDX在每100个ACK到来会计算一次丢包率,根据丢包率对A,B进行调整,这样更能结合实际网络状况对窗口进行调整。为了追求最大速度,UDX是适当的允许丢包,以保证数据的最大吞吐量。

7.4 算法的优化

主要优化在于重传策略,及超时时间计算,重传策略上不同与其他算法,主要是

(1)超时重传是由ACK驱动,而不是仅依靠定时器,这样可以更快的重传数据,增加实时性。

(2)由于UDP的特性,目前 UDX是采用1.5倍计算的超时时间。超时时间为RTT+4*|dRTT|,如果按传统的TCP的指数退避算法计算超时时间,在丢包和大延迟的网络,性能会急剧下降。

(3)UDX主要重传发生在ACK到来时,由于收到ACK,说明网络正常,这时重发数据,比盲目依靠定时器重传可靠的多。UDX定时器只会每次发一个重发包,当网络恢复时,就会重新依靠ACK把重发包快速发出去。

(4)启动加速时,UDX是通过理论流量作为参考的,当计算的理论流量,在<1/MINRTT时,UDX是忽略丢包的,这样可以较快的加速到实际最大带宽

7.5 针对wifi调整参数

在无线3G领域,UDX没有做过多的优化,无线网络主要特性和有线网络还是比较明显。其特点是波动大、流量不稳定、丢包率不固定、完全受环境的信号影响。从这个特性上来看,UDX的若干改进还是比较适合这种环境,较其他算法,更有抗丢包和干扰。比如,ACK设计及快速重传等。

7.6 友好性

UDX相对TCP来说,是完全不友好的,一般UDX和TCP同时运行,TCP所占流量基本一半不到。较其他算法更具有抢占性。这个主要原因还是由于UDX算法决定的。UDX在超时重传上比较精确,造成其他的算法还没有来得及恢复窗口时,UDX已经恢复到了最佳窗口从而更多的利用带宽。

7.7 在多媒体传输上的优势

(1)Udx主要体现在其实时性,特别适合传送视频,网络越复杂,环境 越是恶劣,越是适合UDX。对于音频,UDX适合在低延迟,低丢包率的网络 (RTT小于150MS,丢包小于5%)。因为是可靠数据传播 ,相对于RTP这类实时协议音质要好很多。但实时性略差,或人感觉不出来,在丢包环境,只要延迟小于100ms,语音较RTP有较大提高,实时性也感觉不出来。

(2)对于丢包大,特别是延迟大的网络,由于个别包的丢失,可能会造成较大的语音延迟。但UDX在算法层支持不可靠和半可靠传输,相当于一个变相的折中。这时和RTP没有明显区别。

(3)另外一个特点可以说是另外的,UDX支持单条连接上内置了四条子通道。每条通道相当于一个小的UDX连接,都是可靠传输,也可以设置成不可靠,各条子通道不影响。

(4)特点是各个子通道可以设置优先级别,这样,可以支持优先发送某些数据。

(5)比如语音或远程控制,这类需要实时画面的应用,不会影响总共的吞吐量,这相当于UDX在应用层上一个优化设计。

8 结束语

优化后的UDX协议,针对wifi调整参数使得UDX的若干改进适合无线领域,较其他算法,更有抗丢包和干扰;在算法上主要优化在于重传策略,及超时时间计算两方面,超时重传非常精确,在其他的算法还没有来得及恢复窗口时,UDX已经恢复到了最佳窗口从而更多的利用代宽。其优势在于可靠传输的基础上追求最大代宽利用率,吞吐量及实时性。高效率是其优点,友好性是其缺点。

[1]WANG Yanfang,DAI Yong,LIU Donghua,et al.Research and application of reliable data transmission technique based on UDP [J].Computer Engineering and Applications,2010,46(3):105-108 (in Chinese).[王艳芳,戴永,刘东华,等.基于UDP的数据可靠传输技术研究与应用 [J].计算机工程与应用,2010,46 (3):105-108.]

[2]REN Yongmao,TANG Haina,LI Jun,et al.Performance comparison of UDP-based protocols over fast long distance network [J].Information Technology Journal,2009,8 (4):600-604.

[3]LI Wanpeng.Network flow control and flow analysis [D].Beijing:Beijing University of Posts and Telecommunications,2011(in Chinese).[李万鹏.网络流量控制及流量分析 [D].北京:北京邮电大学,2011.]

[4]XIE Yining,SUN Guanglu,SU Jie,et al.Improvement and research on congestion control algorithm of TCP vegas [J].Journal of Harbin University of Science and Technology,2011,16(3):26-30 (in Chinese).[谢怡宁,孙广路,苏洁,等.基于TCP Vegas拥塞控制算法的研究与改进 [J].哈尔滨理工大学学报,2011,16 (3):26-30.]

[5]LI Qianmu,XU Manwu,YAN Han,et al.A novel network congestion forecast method [J].Journal of System Simulation,2006,18 (8):2101-2104 (in Chinese). [李千目,许满武,严悍,等.一种网络拥塞预测新方法 [J].系统仿真学报,2006,18(8):2101-2104.]

[6]HUANG Guimin,ZHU Xiaoshu.Research on peer-to-peer model of passing through NAT devices based-UDP protocol[J].Computer Engineering and Design,2010 (2):317-320(in Chinese).[黄桂敏,朱晓姝.基于UDP协议穿透NAT设备的对等网络模型研究 [J].计算机工程与设计,2010 (2):317-320.]

[7]DUAN Zhiming.Research and design of NAT travsering scheme based on hybrid P2Pnetwork under UDP [D].Harbin:Harbin University of Science and Technology,2010 (in Chinese).[段志鸣.基于混合式P2P网络UDP下NAT穿越方案的研究与设计 [D].哈尔滨:哈尔滨理工大学,2010.]

[8]DUAN Lei.Design and implementation of network traffic control system [D].Beijing:Beijing University of Posts and Telecommunications,2011 (in Chinese).[段磊.网络流量控制系统的设计与实现 [D].北京:北京邮电大学,2011.]

[9]LV Zhonglin,ZHU Minghua.Fast SACK scheme for overall throughput enhancement based on mullti-homed SCTP [J].Computer Science,2012,39 (6A):117-119 (in Chinese).[吕重霖,朱鸣华.基于多宿SCTP的提高整体吞吐量的快速SACK策略 [J].计算机科学,2012,39 (6A):117-119.]

[10]Martin Corless,Robert Shorten.Deterministic and stochastic convergence properties of AIMD algorithms with nonlinear back-off functions [J]. Automatica,2012,48 (7):1291-1299.

猜你喜欢

重传包率传输
支持向量机的船舶网络丢包率预测数学模型
适应于WSN 的具有差错重传的轮询服务性能研究
一种基于喷泉码的异构网络发包算法*
基于TDMA的wireless HART网络多路径重传算法
电磁线叠包率控制工艺研究
混合型随机微分方程的传输不等式
牵引8K超高清传输时代 FIBBR Pure38K
无线网络中基于网络编码与Hash查找的广播重传研究
关于无线电力传输的探究
面向异构网络的多路径数据重传研究∗