基于UDP的大数据包可靠传输

2012-09-28 07:49刘喜作梁德清
电讯技术 2012年1期
关键词:序列号线程分包

刘喜作,周 晶,梁德清

(海军大连舰艇学院模拟训练中心,辽宁大连116018)

1 引 言

当前,运用模拟器在舰艇部队和院校进行训练已经非常普遍,其中网络服务组件是模拟训练系统的重要组成部分,要求有很好的可扩展通信能力[1,2]。这主要表现为以下几点:数据传输的实时性和可靠性,支持组播通信方式,支持对等的通信方式(各个网络单元之间无明显的客户端与服务器端之分),支持大数据量的数据传输。

但现在网络通信普遍采用标准TCP/IP协议,针对上述要求存在很多不足。如采用TCP进行网络通信,势必要建立服务器端和客户端,增加了通信复杂度。TCP是一种可靠数据传输协议,协议中增加了纠错和重发机制,影响了数据传输的实时性[3]。另外,TCP只支持点对点的传输方式,不支持组播通信。而UDP是一种不可靠的网络通信协议,无法保证数据的可靠传输。另外,UDP一次能够传输的字节数是有限的,不能大于65 467 byte[4],也就是说UDP不支持大数据量的数据传输。

在基于UDP协议用于大数据量和可靠性数据传输方面,很多人也进行了研究。陆海[5]针对多用户使用UDP协议实现大数据量的可靠传输需求,提出了一种简单实用的分包与重组方法,但没有对可靠性进行描述。尹然然[6]通过比较分析传输层传输协议UDP的不可靠性和TCP的低效率,在UDP协议基础上提出并实现了嵌入式设备的可靠数据传输协议(RUDP协议),但文中只描述实现RUDP协议的一个程序流程。很多文献没有分析基于UDP协议可靠传输大数据包的性能问题[7,8]。

本文在前人研究的基础上,利用UDP协议传输速度快、网络利用效率高的优势,提出AUDP(Augmented UDP)模型。该模型在网络通信的应用层,通过增加用于可靠传输的协议头、智能重发机制、大数据包智能分包重组机制,实现战术模拟器中网络服务组件高效可靠的数据传输,并通过实验分析了该模型数据传输性能。

2 AUDP模型

在战术模拟器中传输的数据大量是动态目标信息和指令数据,这些数据包大多是几百字节,即使仿真目标增加到几百批,字节数也不会超过1 Mbyte,为了满足系统对数据实时性和可靠性的要求,本文提出AUDP模型。

如图1所示,普通UDP/IP协议中共有4个层次,分别为应用层、传输层、网际层和网络接口层[9]。其中传输层、网际层和网络接口层是运用UDP/IP进行网络通信必须遵守的协议,否则,要更改相应的网络硬件驱动程序。而利用UDP/IP协议进行可靠性和大数据量的网络数据传输,只能在协议的最高层(应用层)添加相应协议模型,即图1中的可靠时序协议层。这个可靠时序协议层要完成下面几项功能:继承UDP通信的高效性和组播通信机制;自动辨识发送与接收数据包的时序性;完成可靠性传输的回复重发机制;完成大数据量传输机制,即对于大于65 467 byte的数据包采用自动分包发送,接收时自动重组机制。

图1 UDP/IP协议和AUDP/IP协议对比图Fig.1 Relationship between UDP/IP model and AUDP/IP model

3 AUDP的内部机制具体实现

事实上,基于UDP可靠性传输包含了网络通信中很多层,即从网络接口层到程序的应用层。为了继承UDP通信的高效性和组播通信机制,我们在通信协议的最高层(应用层)添加可靠时序协议层模型。下面将系统阐述可靠时序协议层模型中的协议报文头属性项的定义、智能数据交换传输方法和多线程处理机制等,证明本文方法的可行性和有效性。

3.1 报文头属性项定义

为了达到上述目的,在发送每个数据包前增加一个报文头,如表1所示。

表1 报文头属性项定义Table 1 The structure of the header

这个报文头总共25 byte,它与收发方IP地址和端口号信息一样,作为UDP协议头文件的一部分进行数据通信。为了与UDP协议完全兼容,在报文头最后增加了一个字节,这个字节为0x01时,用普通UDP通信,而当这个字节为0x02时,用改进的UDP通信。

每一个数据包通过发送方IP、接收方IP和数据包标志唯一确定,上述报文头的定义和各项约束提供了基于UDP进行可靠性传输的机制和实现的基础。

3.2 智能数据交换

图2为基于UDP进行网络可靠性传输的流程。为了完成数据的智能交换和可靠性传输,流程中设置了相应的自动分包重组和重发机制,下面说明其中关键步骤和实现方法。

图2 智能数据传输交换机制Fig.2 Flowchart of smart data interchange

3.2.1 智能存储

动态智能存储信息和数据是上述机制的能够实现的核心技术,它包括状态信息存储、发送数据存储和接收数据存储。

状态信息存储是在发送数据时自动存储发送时间,在接收数据时自动存储接收数据包的标识和序列号。存储的发送时间用来判断此数据包在没有收到确认报文时再次发送的时机,这个时间间隔根据实际情况可以动态选择。在局域网通信状况比较好时,可选为100 ms;在广域网或通信状况一般时,该时间间隔可以适当加大,并且根据收到确认报文状况进行动态调节。但如果长时间没有收到确认报文,默认值为发送255次,被视为网络不通,将终止网络通信。而存储接收数据包的标识和序列号是用来对分包的数据进行重组,相同标识而不同序列号的数据包视为同一数据信息的不同部分。为了高效地对数据信息进行重组,我们采用了具有排序能力链表进行序列号存储,按照小于或等于链表开头的序列号视为已被接收。例如现在链表中保存有{5,7,8,9,11,12},说明小于或等于序列号5和等于序列号7、8、9、11、12的数据包已经被接收到了。为确保数据可靠传输,发送端增加了重发机制,接收端可能对同一数据包接收到几次,如果这时接收到序列号为2的数据包,根据上述判断机制,这个数据包将会被自动丢掉,如果接收到序列号为6的数据包,将会保存此数据包,然后链表变为{9,11,12},如果整个数据全部被接收完,链表中只保存此数据信息最大的序列号。

发送数据存储是指在发送数据信息时,根据数据信息的大小自动分包,并且每个数据包要加上面定义的协议报文头,在发送此数据包的同时把其存储到发送数据仓库中。如果没有收到此数据包的接收确认报文,系统会根据重发间隔调用发送数据仓库中该数据包进行重发;如果收到此数据包接收确认报文,系统会删除发送数据仓库中该数据包,自动释放内存。

接收数据存储是指根据不同的数据包标识建立相对应的数据包存储仓库,然后按照接收数据包的序列号进行数据保存,同时对各个分数据包进行排序,这样便于数据查找和整理,当数据信息所有的分数据包收到之后,系统会通过线程通知用户的应用层整个数据信息已经接收完毕。

3.2.2 接收确认报文

为了传送报文的可靠性,接收端在接收到报文时要向发送端反馈接收确认报文。接收确认报文的格式就是上面定义的协议报文头,与普通的协议报文头相比有3点不同:数据包长度为协议报文头的长度(25 byte),命令标志的最高位置为1,信息总长度为0。

3.2.3 重发回馈实现机制

重发回馈机制为数据的可靠性传输而设计,我们从接收端来阐明该机制的实现。首先,接收端接收到一个数据包,如果该数据包从来没有接收到,该数据包将被存储到接收数据仓库中,同时向发送端发送接收确认报文。如果该数据包已经接收到了,说明发送端没有接收到确认报文,此时,接收端重新发送此数据包的接收确认报文,并且丢弃此报文,同时等待下一个数据包。

发送端接收到相应数据包的接收确认报文,将从发送数据仓库中删除该数据包,直到从发送数据仓库删除所有数据包,表明数据信息可靠传输完毕。

3.3 多线程处理机制

为了提高数据处理和传送的效率,我们采用了多线程机制,分为3种类型,即发送服务线程、接收服务线程和数据处理线程。

图3 多线程处理示意图Fig.3 The multi-threading implementation

发送服务线程负责对要发送的数据信息根据大小进行自动分包,对各个数据包加上长度为25 byte协议报文头,填写协议报文头内容,并将其发送给接收方,同时把此数据包保存到发送数据仓库中。

接收服务线程负责接收数据包、发送接收确认报文、大数据信息报文的排序重组,当接收到数据包时,接收服务线程判断是否为普通数据包或分包数据包,如果为普通数据包,直接交给数据处理线程进行处理,但如果是分包数据包,将存储到接收数据仓库进行管理,直到所有分包数据接收完毕再交给数据处理线程进行处理。每一周期(默认100 ms),接收服务线程还负责检查发送数据仓库是否有需要重新发送的数据包,如果有还要对相应的数据包进行重新发送。

数据处理线程负责对接收服务线程提供的数据包进行数据整理,首先去掉数据包的协议报文头,如果是普通数据包,数据处理线程将数据信息直接交给用户应用层;如果是分包数据包,将按照数据协议头的序列号进行数据拷贝组合,组合完毕后,数据处理线程将数据信息交给用户应用层。

4 性能分析

在CPU为 1.0 GHz、内存为 2G、网卡为100 Mbit/s的两台计算机上,分别用 AUDP、TCP和UDP方法,通过网线直接连接进行点对点通信测试。为了能够准确地记录传输数据包所用的时间,尽量减少Windows多任务系统本身和系统时钟记录引起的误差,我们把100 Mbit/s的网卡设置为10 Mbit/s全双工模式,增加传输时间,扩大误差量级;同时设置接收端计算机接收到数据要返回到发送端,这样使数据发送的时刻和接收的时刻由同一台计算机记录,从而避免不同计算机系统时钟记录引起的误差,并且同一数据包传输100次后取平均值。测试结果如表2所示。

表2 AUDP、TCP和UDP传输不同数据包所用时间Table 2 Time of interchange via AUDP,TCP and UDP

从测试结果可以看出,在每次传输几万字节时,AUDP的效率要比TCP高20%左右,而与UDP相比几乎差不多;而在3Mbyte以上时,TCP的效率要高。

5 总 结

通过比较可以看到AUDP、TCP和UDP方法之间的差别,并分析出它们各自的优势和缺点。另外,在采用AUDP与TCP进行数据传输时不存在粘包现象,减少了程序应用层处理数据的复杂性。

在战术模拟器中,传输的数据大量是动态目标信息和指令数据,大多是几百字节,即使仿真目标增加到几百批,字节数也不会超过1Mbyte,并且还可以采用分批发送数据包,但系统要求的实时性和可靠性很高,采用AUDP协议模型,可以很好地满足要求。

本文只研究了基于UDP点对点的可靠性数据传输,基于UDP独有的组播和广播模式的可靠性传输和性能分析是下一步研究的工作。

[1]刘宇.基于战场仿真的智能指挥控制系统总体设计[J].电讯技术,2011,51(7):38-41.LIU Yu.Overall Design of Intelligent Command and Control System Based on Battlefield Simulation[J].Telecommunication Engineering,2011,51(7):38-41.(in Chinese)

[2]李军,黄绍君,龚光红.战术仿真系统中数据交互的实时性研究[J].系统仿真学报,2006,18(增2):381-389.LI Jun,HUANG Shao-jun,GONG Guang-hong.Realtime Research in Data Interchange in Tactic Training Simulation System[J].Journal of System Simulation,2006,18(Suppl.2):381-389.(in Chinese)

[3]Humaira K.SCTP versus TCP for MPI[C]//Proceedings of the 2005 ACM/IEEE Conference on Supercomputing.Washington:ACM/IEEE,2005:30-40.

[4]Jones A,Ohlund J.Network Programming for Windows[M].California:Microsoft Press,2000.

[5]陆海,胡伯涵.UDP协议中分包与重组方法研究[J].无线电通信技术,2010,36(5):20-22.LU Hai,HU Bo-han.Simple Method of Packet Division and Reassembly on UDP Protocol[J].Radio Communications Technology,2010,36(5):20-22.(in Chinese)

[6]尹然然.基于UDP协议的可靠性改进协议[J].电脑知识与技术,2010,16(6):3479-3480.YIN Ran-ran.Reliable Improvement Agreement Based on UDP Agreement[J].Computer Knowledge and Technology,2010,16(6):3479-3480.(in Chinese)

[7]刘诗俊,罗艺.基于WinCap的UDP协议数据重发方法[J].计算机与数字工程,2009,37(8):196-199.LIU Shi-jun,LUO Yi.A Method of UDP Data Retransmission Based on WinCap[J].Computer&Digital Engineering,2009,37(8):196-199.(in Chinese)

[8]朱华刚,周祥龙,吴永刚.简单可靠实时传送UDP协议的研究和应用[J].水雷战与舰船防护,2010,18(3):50-53.ZHU Hua-gang,ZHOU Xiang-long,WU Yong-gang.Research on and Application of simple and Reliable Realtime UDP Protocol[J].Mine Warfare&Ship Self-defence,2010,18(3):50-53.(in Chinese)

[9]谢希仁.计算机网络教程[M].北京:人民邮电出版社,2002.XIE Xi-ren.Computer Network Guide[M].Beijing:Posts&Telecom Press,2002.(in Chinese)

猜你喜欢
序列号线程分包
建筑工程施工中对工程分包的管理
基于C#线程实验探究
一种离线电子钱包交易的双向容错控制方法
基于国产化环境的线程池模型研究与实现
关于《国家税务总局 工业和信息化部关于加强车辆配置序列号管理有关事项的公告》的解读
recALL
如何加强施工分包安全管理
浅谈linux多线程协作
建筑业劳务分包制研究:现状及其展望
网站前台设计分包合同中应注意的问题