飞行试验中UDP数据包丢失和失序处理研究
2018-07-05周训强
周训强
(中国飞行试验研究院,陕西 西安 710089)
0 引言
随着我国航空工业的不断发展,研制型号和试飞型号不断增加,飞行试验中测试参数越来越多,数据流量也越来越大,使得集中式采集、分布式采集等传统的机载数据采集系统架构已经不能满足测试技术要求。2004年10月由美国发起的iNET项目开发技术得到了广泛的支持并在数年内形成了比较成熟的技术框架和技术发展路线[1]。在国内,飞行试验测试领域一直跟踪iNET的发展,于2012年提出了空天地一体化遥测网络系统[2-3]。
得益于国内试飞测试技术的迅速发展,基于以太网技术的高带宽多数据流传输和记录在飞行试验中得以广泛应用,机载网络化数据采集记录系统的概念及相关产品应运而生。
机载网络化数据采集记录系统的一般架构为:多台采集器通过以太网挂接到网络交换机,在交换机上进行数据包汇聚,再由同样挂接在交换机上的网络化记录器对这些数据包进行接收记录。更为庞大的测试系统(采集终端数量多)甚至存在多级交换机的级联,而这些设备采用统一的时间源进行时间同步[4]。网络化测试系统的广泛应用使得基于以太网的高带宽多数据流的传输和分析成为了飞行试验领域的研究热点。
1 失序和丢包分析与处理
1.1 失序和丢包分析
在飞行试验领域,目前以太网数据包的传输主要采用TCP和UDP协议。TCP采用面向连接的数据管理策略并通过重传保证数据可靠传输,多用于传输通信和控制数据包等可靠性要求高的场合。但对于高带宽数据,频繁的确认和重传无法保证数据的实时传送要求,因此一般采用无连接的UDP传输协议,其目的是减少不必要的网络开销,提高传输带宽和传输效率。正因为如此,UDP传输协议不提供可靠性、流量控制和差错恢复的手段[5]。
通常,在机载网络化测试系统中,数据从发送端到目的端要经过若干的中间节点,节点与节点之间对数据的传输会产生延时。由于不同数据包可能经过不同的中间节点到达目的端,因此总的延时也不同,这导致数据包到达目的端的顺序与期望顺序可能不同,即失序。此外,由于缓冲区的溢出,数据包可能被中间节点拒绝,使得数据包丢失[6]。很显然,数据失序不满足试飞数据分析对数据时间相关性的严格要求。为了满足数据分析时的时间相关性要求,需要对发生失序的数据进行重排,对丢失的数据进行补点。为此,在期望数据包全部到达之前要将到来的数据包暂存于一个缓冲区内。由此带来的问题:缓存区的大小如何确定;暂存数据在缓冲区的存放规则是什么;发生丢包时如何处理。下文将对这些问题进行讨论和分析。
1.2 重排缓存区的确定
根据网络交换机对数据包的缓存及转发原理,在网络拓扑结构、网络中的设备不发生改变,以及数据包在网络按周期规律传输的情况下,逆序情况也是稳定的,从实际的机载网络化测试系统中的数据包样本的时间标签的统计计算结果来看,也证明了这一点。机载网络化测试系统中,每种网络数据包的时间周期都是毫秒级(1/1024 ms~1/16 ms)的,对于一段完整的数据包样本,在考察其逆序情况时,只需分析其中1 s时间跨度内的数据包的逆序情况即可。
根据飞行试验中网络数据包传输大多具有周期性的特点,假设网络中的数据包的种类(一般由包识别字确定)为n种,它们的传输周期分别为T1,T2,T3,…,Tn。根据上文的论述,在发生失序的情况下,需要开辟缓存区来对失序的数据包进行重排,而对失序情况进行量化是确定缓存区大小的重要工作,其方法是在网络数据包发送的目的端对接收的网络数据包时间标签做统计计算,假设在1 s内接收到的数据包的个数为N,它们的时间标签分别为t1,t2,t3,…,tN,对相邻的两个包的时间标签进行如下计算
Δti=ti+1-ti(i=1,2,3,…,N)
式中:Δti为逆序时间,在Δti<0情况下,对|Δti|求最大值Δtmax,Δtmax为最大逆序时间。
逆序时间是对机载网络化测试系统中数据包逆序情况的量化描述,求出一个满足如下条件的最小值T。①T为T1,T2,T3,…,Tn的最小公倍数;②T≥Δtmax。
需要说明的是,之所以采用2个大小为L的缓存区来对数据包进行排序,而不是采用更多个数的缓存区,是考虑到尽量减小因排序带来的时间延时。
1.3 排序算法的分析与实现
以实际的飞行试验数据为例,进行排序算法的分析。现有某型号某架次飞行试验数据的A,B,C三种网络数据包,周期分别为1,2,4 ms,那么顺序情况下,数据包的接收情况应如表1所示。
表1 顺序情况下的数据包接收情况
缓冲区的数据包排列顺序为A0B0C0A1A2B1A3A4B2C1A5A6B3A7,记为顺序X。而真实的情况是该数据样本有逆序情况发生,数据包的到达情况如表2所示。
表2 逆序情况下的数据包接收情况
缓冲区的数据包排列顺序为A0A1A2B0A3A4B1A5A6B2A7C0A8B3A9A10A11C1A12A13A14A15C2,记为顺序Y,经统计,最大逆序周期为7 ms。
当到达的数据包发生失序的情况时,需要在保证到达的数据包能够全部缓存下来的前提下,对数据包进行重新排序,以达到时间对齐的目的。在发生丢包或者失序的情况下,重新排序的过程就是将缓存区数据包的排序情况由Y变成X的过程。
当数据包按照表1中的规律到达时,将数据包内的时间标签在0~7 ms的数据包按照表1的数据包排列规律放入缓存区H1中,将数据包内的时间标签在8~15 ms的数据包按照表1的数据包排列规律放入缓存区H2中,接下来,在16 ms时刻,A16包到达,根据最大逆序时间的概念,表明0~7 ms时间段的数据包已经全部接收完毕(如果缓存区H1仍未填满,表明0~7 ms时间段的数据包有丢包发生),此时可以将之前其它任务(数据处理任务或数据存储任务)中的数据存放缓存区清空,然后将A16按照表1中的数据包排放规律放入缓存区H1。需要强调的是,如果当前数据包较前一数据包的时间跨度大于7 ms,即大于T,表明已经开始接收到新的时间段的数据包,此时需要考察数据包的时间标签tm与缓存区内数据包的时间跨度(tn,tn+7)的关系,判断tm是否属于(tn,tn+7)区间,如果当前数据包不属于缓存区H1,H2中的任何一个,则需要将缓存区H1,H2中时间靠前的缓存区进行数据包的完整性检查并对丢失的数据包按照相应的方法进行补齐,接下来将缓存区提交至其它任务后清空,然后将A16按照表1的数据包排放规律放入缓存区。具体的算法流程图如图1所示。
采用C++高级程序语言实现了上文所述算法[7]。
2 算法应用
在实现主要算法的基础上,完成了网数据处理软件的设计开发[8],为了验证排序算法的正确性,使用本软件对两个不同型号飞机的多架次飞行数据进行处理。图2是某型号飞机某架次飞行记录的某时间段原始数据的相关信息。其中,键值表示包的识别字,序号表示该键值的包的当前个数。从图2中排序前的信息可以看出,数据包发生了失序。图2中的右图是排序后的数据包信息,可见已实现时间对齐。
图1 数据包排序算法流程图
图2 排序前后数据包顺序对比图
本文提出的关于数据包的丢失和失序处理算法可以在飞行时间内的网络数据包实时接收时应用,以保证进入机载记录设备的数据包已经按照时间顺序进行存储。如果在飞行时间内由于机载测试系统软硬件资源的限制,不便对数据包进行实时排序,也可以在事后数据预处理环节中使用本算法。两种使用场合算法完全一致,无需作任何更改。
3 结论
通过对UDP传输协议和机载网络化测试系统数据包传输过程的分析,说明了数据包发生失序和丢失的原因。鉴于飞行试验数据处理分析对数据的时间相关性的严格要求,提出了开辟适当的缓存区来对失序的数据包按照时间排序的详细算法;之后,对缓存区大小的确定和排序算法进行了详细的论述,并在数据处理软件中实现了该算法的设计开发;最终的应用效果表明,该算法成功解决了飞行试验网络化测试系统中发生失序和丢包情况下的数据处理问题。
[1]iNET system Architecture Version 2007.1[EB/OL].http//www.irig106.org.
[2]杨廷梧.新型遥测系统中网络化测试技术展望[J].测控技术,2010,29(Z):141-145.
[3]白效贤,杨廷梧,袁炳南.航空飞行试验遥测技术发展趋势与对策[J].测控技术,2010,29(11):6-9.
[4]杨廷梧,王云山,滕斌.飞行试验遥测机载测试技术的发展与应用[J].测控技术,2013,32(4):5-8.
[5]Stevens W.R.TCP/IP详解.卷1,协议[M].北京:机械工业出版社,2008.
[6]鲁宏伟.基于UDP传输协议的包丢失和失序处理[J].计算机工程与应用,2001,37(2):48-49.
[7]张永强(译).C++高级编程[M].北京:清华大学出版社,2015.
[8]陈坚.Visual C++网络高级编程[M].北京:人民邮电出版社,2001.