UDP网络通信中丢包的分析定位及修正Karn算法的应用

2014-05-10 05:46申屠铠宇第七一五研究所杭州310012
声学与电子工程 2014年1期
关键词:链路层重传缓冲区

申屠铠宇(第七一五研究所,杭州,310012))

目前 Internet的传输层有两个主要协议:无连接和面向连接协议。后者是TCP协议,通信前需先建立连接,传输时延较大,TCP协议的确定和重发机制,流量控制机制能保证数据的可靠传输,但处理过程复杂,效率不高,并且TCP协议不支持广播和组播。无连接的协议是 UDP协议,通信时直接向目标端发送数据,在传输过程中不关注网络状态,节省了大量的网络资源,能有效地提高网络的传输效率,并且UDP协议支持广播和组播[1]。UDP协议广泛应用于实时系统的数据业务之中,在作战各系统的网络通信中就应用了UDP协议。但UDP协议不能保证数据的可靠传输,当网络节点任务较繁忙或网络流量较大的时候,会出现不可忽略的UDP丢包现象。如果能在充分利用UDP协议优势的前提下,保证 UDP协议通信的可靠性,将使通信设备的性能得到很大的提高。但如何保证 UDP协议通信的可靠性一直是一个疑难问题。本文提出一种改进型选择重传ARQ协议,保证UDP协议通信的可靠性。

1 UDP丢包统计和定位方法介绍

监控和管理计算机网络最为广泛应用的是简单网络管理协议(SNMP)。SNMP由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema),和一组资料物件。该协议能够支持网络管理系统,用以监测连接到网络上的设备的网络状态。SNMP管理进程通过定时向各个设备的设备代理进程发送查询请求消息(以轮询方式),来跟踪各个设备的状态;并将被管理设备各种管理对象的信息存放在一个称为管理信息库(MIB,Management Information Base)中, 若要查询标准MIB变量,直接查询标准MIB即可;若要查询自定义的变量,如UDP丢包信息,则需调用扩展 MIB处理例程,查询扩展的MIB[2]。VxWorks通过组件 WindNet SNMP实现SNMP代理的功能,来精确统计任意两个节点之间的UDP丢包数。UDP数据包从发送网络节点侧一进程发送到接收网络节点侧一进程接收,数据详细流程如图1。

图1 UDP的丢包位置分布

在VxWorks系统中通过在socket接口上及以太网驱动与 IP层之间插入封装层实现发送端和接收端应用层和数据链路层 UDP包数的统计,能得到三个丢包位置的丢包数:发送网络节点侧(发送端应用层UDP包数-发送端数据链路层UDP包数),网络上(发送端数据链路层UDP包数-接收端数据链路层UDP包数),接收网络节点侧(接收端数据链路层UDP包数-接收端应用层UDP包数)。 统计出这三部分的丢包数,从而可以进一步判断丢包的具体原因。

2 丢包统计、定位及分析

由于本文是基于某终端的实时网络中 UDP的可靠性研究,所以暂时不对网络上的丢包现象进行分析。发送网络节点侧和接收网络节点侧产生丢包现象的原因主要有以下几个[3]:

(1)发送进程发送UDP包的频率太快,网卡驱动来不及处理,导致接口队列溢出。

(2)发送进程发送的UDP包太大,虽然UDP的报文长度最大可以达到64 KB,但是当报文过大时,稳定性会大大减弱。这是因为当报文过大时会被分割,使得每个分割块的长度小于 MTU,然后分别发送,并在接收方重新组合,但是如果其中一个报文丢失,那么其他已收到的报文都无法返回给程序,也就无法得到完整的数据了。

(3)发送和接收缓冲区太小,如果要发送或接收的数据过多过大,那么在缓冲区满的那个瞬间要发送或接收的报文就很有可能被丢失。

实验环境:两台标准显控台, CPU为Intel(R)Core(TM) Duo L2400,主频1.66 G。它们通过网线连到全双工千兆 9SB24加固交换机上。工程用Tornado创建基于BSP cm6066b。

实验结果:连续发 10万个包,发送与接收任务优先级均为91(二代台USB驱动、EGK图形开发等的底层任务在90以内,高出90将影响底层任务),测试结果如表1、表2、表3所示。

表1 包大小(1024 byte)缓冲区(32 KB)发送时间间隔不同丢包测试结果

表2 发送间隔(2 ms)缓冲区(32 KB)发送包的大小不同丢包测试结果

表3 发送间隔(2 ms)包大小(1024 byte)缓冲区的大小不同丢包测试结果

由表1可见,当发送任务两次发包之间间隔为1 ms以内时丢包较多,可能是发送方发包速率太高的原因。间隔不低于2 ms时,丢包数差不多,基本不受到间隔时间长短影响。由表2可见,随着包的增大,丢包的趋势增加,当 UDP包大小大于MTU(1500 byte)时,丢包可能性增大,因为IP层对数据包分片,接收方重组时,任何一片丢失,即被认为是丢失了。由表3可见,当发送缓冲区为8 K时,发送节点测丢包较多,发送缓冲区不小于16 K时,丢包趋于平稳,基本不受缓冲区大小影响。当接收缓冲区不大于16 K时,接收节点测丢包较多,接收缓冲区不小于32 K时,丢包趋于平稳,基本不受缓冲区大小影响。因此本环境下解决丢包的方法是:1、两次发包之间增加延时,不小于2 ms。2、减低UDP包的大小, 不大于MTU(1500 byte)。3、设置发送缓冲区大小,不小于16 K,设置接收缓冲区大小,不小于32 K。

3 改进型选择重传ARQ协议

要实现无差错的传输数据,我们可以采用重发请求(ARQ)协议,它又可分为停止等待协议、连续ARQ协议、选择重传ARQ协议。停止等待协议是最简单也是最基本的数据链路层协议。发送方在发出一个数据帧以后,必须停下来等待这一帧的确认帧到来才能发送下一帧,如果等待超时,就重发数据帧,直到收到确认帧为止。连续 ARQ协议是在发送完一个数据帧后,不停下来等待确认帧,可以连续再发送若干个数据帧。如果这时收到接收端发来的确认帧,那么还可以接着发送数据帧。这样减少了等待时间,整个通信的吞吐量就提高了。选择重传 ARQ协议是为了一步提高信道的利用率,设法只重传出现差错的数据帧或者是计时器超时的数据帧。但这时必须加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机。基于某终端的实时网络中UDP丢包统计发现,丢包率是很低的,在这种情况下如果采用停止等待协议和连续ARQ协议增加了很多没必要的确认帧,浪费了大量的带宽。所以在基于某终端的实时网络中选择重传 ARQ协议更适合,浪费极少的带宽保证了UDP协议通信的可靠性。

在使用选择重传ARQ协议时,有以下两个问题需要解决:

(1)当接收方检测到错误,它就发送一个否定确认(NAK,negative acknowledgement),NAK触发该帧的重传操作,如果NAK丢失了,发送方不重传,接收方将一直处于等待接收错误帧状态。

(2)如果数据帧丢失,必须得要下一帧到达时才能检测出来,如果下一帧延时较长,将影响丢失帧重传的实时性。

因此,本文为解决这两个问题,提出一种改进型选择重传 ARQ协议。先在发送方增加发送一数据帧后未发下一数据帧计时器,计时器超时时,发送一超时数据帧,告知接收方,在计时器设置超时时间内没有再发送数据帧。接收方接收到超时数据帧后用以检测上一帧是否正确。再将NAK和超时数据帧的发送采用停止等待协议,确保它们的可靠性,由于它们只在数据帧丢失或者网络空闲时才发送,数量很少,采用停止等待协议只增加了少量带宽,对网络影响很小。但采用停止等待协议如何确定重发超时间隔非常棘手。如果超时间隔设置得太短,小于数据往返时间,则会发生大量不必要的重传,这么多的无用包反而堵塞 Internet;如果超时间隔被设置的太长,则一旦数据丢失之后,由于太长的重传延迟,影响性能。解决方案是采用修正Karn算法:式中,α是一个平滑因子,它决定了旧的RTT值所占的权重,0≤α<1,典型情况下α=7/8。显然,计时器设置的超时重传时间 RTO(Retransmission Time-Out)应略大于上面得出的平均往返时延RTT,即:

这里β是个大于1的系数,推荐将β值取为2。

修正Karn算法在计算平均往返时延RTT时,只要报文每重传一次,就将重传时间增大一些:

系数γ的典型值是2。当不再发生报文重传时,才根据报文的往返时延更新平均往返时间 RTT和重传时间的数值。在基于某终端的实时网络中使用修正Karn算法,α用典型情况下的7/8,平均往返时延RTT为10 ms左右。

4 结束语

本文实现了基于某终端的 VxWorks实时局域网中,统计UDP协议的丢包情况,通过定位分析,得出几种降低丢包率的方法,并在选择重传 ARQ协议上进行改进,保证了 UDP协议通信的可靠性和实时性。随着某终端开始取代一代显控台,下一阶段的显控开发估计大多会选用某终端为平台,希望本文的测试数据和方法能被开发者借鉴,并不断完善。

[1] 谢希仁. 计算机网络[M]. 4版. 北京:电子工业出版社,2003:248-276.

[2] HARNEDY S. 简单网络管理协议教程[M]. 北京:电子工业出版社, 1999:44-50.

[3] 芦东昕, 张华强, 王陈. 基于UDP的可靠性数据传递技术研究[J]. 计算机工程, 2003, 29(22).

猜你喜欢
链路层重传缓冲区
基于多空间内存共享的数据链路层网络包捕获方法
面向异构网络的多路径数据重传研究∗
基于网络聚类与自适应概率的数据库缓冲区替换*
嫩江重要省界缓冲区水质单因子评价法研究
基于FPGA全功能MVB网络从设备链路层IP核设计
关键链技术缓冲区的确定方法研究
数据链路层的选择重传协议的优化改进
IEEE 1394事务层接口的设计与实现
MPTCP中一种减缓缓存阻塞的重传策略
AVS标准中的视频码流缓冲区校验模型分析