周訓(xùn)強(qiáng)
(中國(guó)飛行試驗(yàn)研究院,陜西 西安 710089)
隨著我國(guó)航空工業(yè)的不斷發(fā)展,研制型號(hào)和試飛型號(hào)不斷增加,飛行試驗(yàn)中測(cè)試參數(shù)越來(lái)越多,數(shù)據(jù)流量也越來(lái)越大,使得集中式采集、分布式采集等傳統(tǒng)的機(jī)載數(shù)據(jù)采集系統(tǒng)架構(gòu)已經(jīng)不能滿足測(cè)試技術(shù)要求。2004年10月由美國(guó)發(fā)起的iNET項(xiàng)目開(kāi)發(fā)技術(shù)得到了廣泛的支持并在數(shù)年內(nèi)形成了比較成熟的技術(shù)框架和技術(shù)發(fā)展路線[1]。在國(guó)內(nèi),飛行試驗(yàn)測(cè)試領(lǐng)域一直跟蹤iNET的發(fā)展,于2012年提出了空天地一體化遙測(cè)網(wǎng)絡(luò)系統(tǒng)[2-3]。
得益于國(guó)內(nèi)試飛測(cè)試技術(shù)的迅速發(fā)展,基于以太網(wǎng)技術(shù)的高帶寬多數(shù)據(jù)流傳輸和記錄在飛行試驗(yàn)中得以廣泛應(yīng)用,機(jī)載網(wǎng)絡(luò)化數(shù)據(jù)采集記錄系統(tǒng)的概念及相關(guān)產(chǎn)品應(yīng)運(yùn)而生。
機(jī)載網(wǎng)絡(luò)化數(shù)據(jù)采集記錄系統(tǒng)的一般架構(gòu)為:多臺(tái)采集器通過(guò)以太網(wǎng)掛接到網(wǎng)絡(luò)交換機(jī),在交換機(jī)上進(jìn)行數(shù)據(jù)包匯聚,再由同樣掛接在交換機(jī)上的網(wǎng)絡(luò)化記錄器對(duì)這些數(shù)據(jù)包進(jìn)行接收記錄。更為龐大的測(cè)試系統(tǒng)(采集終端數(shù)量多)甚至存在多級(jí)交換機(jī)的級(jí)聯(lián),而這些設(shè)備采用統(tǒng)一的時(shí)間源進(jìn)行時(shí)間同步[4]。網(wǎng)絡(luò)化測(cè)試系統(tǒng)的廣泛應(yīng)用使得基于以太網(wǎng)的高帶寬多數(shù)據(jù)流的傳輸和分析成為了飛行試驗(yàn)領(lǐng)域的研究熱點(diǎn)。
在飛行試驗(yàn)領(lǐng)域,目前以太網(wǎng)數(shù)據(jù)包的傳輸主要采用TCP和UDP協(xié)議。TCP采用面向連接的數(shù)據(jù)管理策略并通過(guò)重傳保證數(shù)據(jù)可靠傳輸,多用于傳輸通信和控制數(shù)據(jù)包等可靠性要求高的場(chǎng)合。但對(duì)于高帶寬數(shù)據(jù),頻繁的確認(rèn)和重傳無(wú)法保證數(shù)據(jù)的實(shí)時(shí)傳送要求,因此一般采用無(wú)連接的UDP傳輸協(xié)議,其目的是減少不必要的網(wǎng)絡(luò)開(kāi)銷,提高傳輸帶寬和傳輸效率。正因?yàn)槿绱?,UDP傳輸協(xié)議不提供可靠性、流量控制和差錯(cuò)恢復(fù)的手段[5]。
通常,在機(jī)載網(wǎng)絡(luò)化測(cè)試系統(tǒng)中,數(shù)據(jù)從發(fā)送端到目的端要經(jīng)過(guò)若干的中間節(jié)點(diǎn),節(jié)點(diǎn)與節(jié)點(diǎn)之間對(duì)數(shù)據(jù)的傳輸會(huì)產(chǎn)生延時(shí)。由于不同數(shù)據(jù)包可能經(jīng)過(guò)不同的中間節(jié)點(diǎn)到達(dá)目的端,因此總的延時(shí)也不同,這導(dǎo)致數(shù)據(jù)包到達(dá)目的端的順序與期望順序可能不同,即失序。此外,由于緩沖區(qū)的溢出,數(shù)據(jù)包可能被中間節(jié)點(diǎn)拒絕,使得數(shù)據(jù)包丟失[6]。很顯然,數(shù)據(jù)失序不滿足試飛數(shù)據(jù)分析對(duì)數(shù)據(jù)時(shí)間相關(guān)性的嚴(yán)格要求。為了滿足數(shù)據(jù)分析時(shí)的時(shí)間相關(guān)性要求,需要對(duì)發(fā)生失序的數(shù)據(jù)進(jìn)行重排,對(duì)丟失的數(shù)據(jù)進(jìn)行補(bǔ)點(diǎn)。為此,在期望數(shù)據(jù)包全部到達(dá)之前要將到來(lái)的數(shù)據(jù)包暫存于一個(gè)緩沖區(qū)內(nèi)。由此帶來(lái)的問(wèn)題:緩存區(qū)的大小如何確定;暫存數(shù)據(jù)在緩沖區(qū)的存放規(guī)則是什么;發(fā)生丟包時(shí)如何處理。下文將對(duì)這些問(wèn)題進(jìn)行討論和分析。
根據(jù)網(wǎng)絡(luò)交換機(jī)對(duì)數(shù)據(jù)包的緩存及轉(zhuǎn)發(fā)原理,在網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、網(wǎng)絡(luò)中的設(shè)備不發(fā)生改變,以及數(shù)據(jù)包在網(wǎng)絡(luò)按周期規(guī)律傳輸?shù)那闆r下,逆序情況也是穩(wěn)定的,從實(shí)際的機(jī)載網(wǎng)絡(luò)化測(cè)試系統(tǒng)中的數(shù)據(jù)包樣本的時(shí)間標(biāo)簽的統(tǒng)計(jì)計(jì)算結(jié)果來(lái)看,也證明了這一點(diǎn)。機(jī)載網(wǎng)絡(luò)化測(cè)試系統(tǒng)中,每種網(wǎng)絡(luò)數(shù)據(jù)包的時(shí)間周期都是毫秒級(jí)(1/1024 ms~1/16 ms)的,對(duì)于一段完整的數(shù)據(jù)包樣本,在考察其逆序情況時(shí),只需分析其中1 s時(shí)間跨度內(nèi)的數(shù)據(jù)包的逆序情況即可。
根據(jù)飛行試驗(yàn)中網(wǎng)絡(luò)數(shù)據(jù)包傳輸大多具有周期性的特點(diǎn),假設(shè)網(wǎng)絡(luò)中的數(shù)據(jù)包的種類(一般由包識(shí)別字確定)為n種,它們的傳輸周期分別為T1,T2,T3,…,Tn。根據(jù)上文的論述,在發(fā)生失序的情況下,需要開(kāi)辟緩存區(qū)來(lái)對(duì)失序的數(shù)據(jù)包進(jìn)行重排,而對(duì)失序情況進(jìn)行量化是確定緩存區(qū)大小的重要工作,其方法是在網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送的目的端對(duì)接收的網(wǎng)絡(luò)數(shù)據(jù)包時(shí)間標(biāo)簽做統(tǒng)計(jì)計(jì)算,假設(shè)在1 s內(nèi)接收到的數(shù)據(jù)包的個(gè)數(shù)為N,它們的時(shí)間標(biāo)簽分別為t1,t2,t3,…,tN,對(duì)相鄰的兩個(gè)包的時(shí)間標(biāo)簽進(jìn)行如下計(jì)算
Δti=ti+1-ti(i=1,2,3,…,N)
式中:Δti為逆序時(shí)間,在Δti<0情況下,對(duì)|Δti|求最大值Δtmax,Δtmax為最大逆序時(shí)間。
逆序時(shí)間是對(duì)機(jī)載網(wǎng)絡(luò)化測(cè)試系統(tǒng)中數(shù)據(jù)包逆序情況的量化描述,求出一個(gè)滿足如下條件的最小值T。①T為T1,T2,T3,…,Tn的最小公倍數(shù);②T≥Δtmax。
需要說(shuō)明的是,之所以采用2個(gè)大小為L(zhǎng)的緩存區(qū)來(lái)對(duì)數(shù)據(jù)包進(jìn)行排序,而不是采用更多個(gè)數(shù)的緩存區(qū),是考慮到盡量減小因排序帶來(lái)的時(shí)間延時(shí)。
以實(shí)際的飛行試驗(yàn)數(shù)據(jù)為例,進(jìn)行排序算法的分析?,F(xiàn)有某型號(hào)某架次飛行試驗(yàn)數(shù)據(jù)的A,B,C三種網(wǎng)絡(luò)數(shù)據(jù)包,周期分別為1,2,4 ms,那么順序情況下,數(shù)據(jù)包的接收情況應(yīng)如表1所示。
表1 順序情況下的數(shù)據(jù)包接收情況
緩沖區(qū)的數(shù)據(jù)包排列順序?yàn)锳0B0C0A1A2B1A3A4B2C1A5A6B3A7,記為順序X。而真實(shí)的情況是該數(shù)據(jù)樣本有逆序情況發(fā)生,數(shù)據(jù)包的到達(dá)情況如表2所示。
表2 逆序情況下的數(shù)據(jù)包接收情況
緩沖區(qū)的數(shù)據(jù)包排列順序?yàn)锳0A1A2B0A3A4B1A5A6B2A7C0A8B3A9A10A11C1A12A13A14A15C2,記為順序Y,經(jīng)統(tǒng)計(jì),最大逆序周期為7 ms。
當(dāng)?shù)竭_(dá)的數(shù)據(jù)包發(fā)生失序的情況時(shí),需要在保證到達(dá)的數(shù)據(jù)包能夠全部緩存下來(lái)的前提下,對(duì)數(shù)據(jù)包進(jìn)行重新排序,以達(dá)到時(shí)間對(duì)齊的目的。在發(fā)生丟包或者失序的情況下,重新排序的過(guò)程就是將緩存區(qū)數(shù)據(jù)包的排序情況由Y變成X的過(guò)程。
當(dāng)數(shù)據(jù)包按照表1中的規(guī)律到達(dá)時(shí),將數(shù)據(jù)包內(nèi)的時(shí)間標(biāo)簽在0~7 ms的數(shù)據(jù)包按照表1的數(shù)據(jù)包排列規(guī)律放入緩存區(qū)H1中,將數(shù)據(jù)包內(nèi)的時(shí)間標(biāo)簽在8~15 ms的數(shù)據(jù)包按照表1的數(shù)據(jù)包排列規(guī)律放入緩存區(qū)H2中,接下來(lái),在16 ms時(shí)刻,A16包到達(dá),根據(jù)最大逆序時(shí)間的概念,表明0~7 ms時(shí)間段的數(shù)據(jù)包已經(jīng)全部接收完畢(如果緩存區(qū)H1仍未填滿,表明0~7 ms時(shí)間段的數(shù)據(jù)包有丟包發(fā)生),此時(shí)可以將之前其它任務(wù)(數(shù)據(jù)處理任務(wù)或數(shù)據(jù)存儲(chǔ)任務(wù))中的數(shù)據(jù)存放緩存區(qū)清空,然后將A16按照表1中的數(shù)據(jù)包排放規(guī)律放入緩存區(qū)H1。需要強(qiáng)調(diào)的是,如果當(dāng)前數(shù)據(jù)包較前一數(shù)據(jù)包的時(shí)間跨度大于7 ms,即大于T,表明已經(jīng)開(kāi)始接收到新的時(shí)間段的數(shù)據(jù)包,此時(shí)需要考察數(shù)據(jù)包的時(shí)間標(biāo)簽tm與緩存區(qū)內(nèi)數(shù)據(jù)包的時(shí)間跨度(tn,tn+7)的關(guān)系,判斷tm是否屬于(tn,tn+7)區(qū)間,如果當(dāng)前數(shù)據(jù)包不屬于緩存區(qū)H1,H2中的任何一個(gè),則需要將緩存區(qū)H1,H2中時(shí)間靠前的緩存區(qū)進(jìn)行數(shù)據(jù)包的完整性檢查并對(duì)丟失的數(shù)據(jù)包按照相應(yīng)的方法進(jìn)行補(bǔ)齊,接下來(lái)將緩存區(qū)提交至其它任務(wù)后清空,然后將A16按照表1的數(shù)據(jù)包排放規(guī)律放入緩存區(qū)。具體的算法流程圖如圖1所示。
采用C++高級(jí)程序語(yǔ)言實(shí)現(xiàn)了上文所述算法[7]。
在實(shí)現(xiàn)主要算法的基礎(chǔ)上,完成了網(wǎng)數(shù)據(jù)處理軟件的設(shè)計(jì)開(kāi)發(fā)[8],為了驗(yàn)證排序算法的正確性,使用本軟件對(duì)兩個(gè)不同型號(hào)飛機(jī)的多架次飛行數(shù)據(jù)進(jìn)行處理。圖2是某型號(hào)飛機(jī)某架次飛行記錄的某時(shí)間段原始數(shù)據(jù)的相關(guān)信息。其中,鍵值表示包的識(shí)別字,序號(hào)表示該鍵值的包的當(dāng)前個(gè)數(shù)。從圖2中排序前的信息可以看出,數(shù)據(jù)包發(fā)生了失序。圖2中的右圖是排序后的數(shù)據(jù)包信息,可見(jiàn)已實(shí)現(xiàn)時(shí)間對(duì)齊。
圖1 數(shù)據(jù)包排序算法流程圖
圖2 排序前后數(shù)據(jù)包順序?qū)Ρ葓D
本文提出的關(guān)于數(shù)據(jù)包的丟失和失序處理算法可以在飛行時(shí)間內(nèi)的網(wǎng)絡(luò)數(shù)據(jù)包實(shí)時(shí)接收時(shí)應(yīng)用,以保證進(jìn)入機(jī)載記錄設(shè)備的數(shù)據(jù)包已經(jīng)按照時(shí)間順序進(jìn)行存儲(chǔ)。如果在飛行時(shí)間內(nèi)由于機(jī)載測(cè)試系統(tǒng)軟硬件資源的限制,不便對(duì)數(shù)據(jù)包進(jìn)行實(shí)時(shí)排序,也可以在事后數(shù)據(jù)預(yù)處理環(huán)節(jié)中使用本算法。兩種使用場(chǎng)合算法完全一致,無(wú)需作任何更改。
通過(guò)對(duì)UDP傳輸協(xié)議和機(jī)載網(wǎng)絡(luò)化測(cè)試系統(tǒng)數(shù)據(jù)包傳輸過(guò)程的分析,說(shuō)明了數(shù)據(jù)包發(fā)生失序和丟失的原因。鑒于飛行試驗(yàn)數(shù)據(jù)處理分析對(duì)數(shù)據(jù)的時(shí)間相關(guān)性的嚴(yán)格要求,提出了開(kāi)辟適當(dāng)?shù)木彺鎱^(qū)來(lái)對(duì)失序的數(shù)據(jù)包按照時(shí)間排序的詳細(xì)算法;之后,對(duì)緩存區(qū)大小的確定和排序算法進(jìn)行了詳細(xì)的論述,并在數(shù)據(jù)處理軟件中實(shí)現(xiàn)了該算法的設(shè)計(jì)開(kāi)發(fā);最終的應(yīng)用效果表明,該算法成功解決了飛行試驗(yàn)網(wǎng)絡(luò)化測(cè)試系統(tǒng)中發(fā)生失序和丟包情況下的數(shù)據(jù)處理問(wèn)題。
[1]iNET system Architecture Version 2007.1[EB/OL].http//www.irig106.org.
[2]楊廷梧.新型遙測(cè)系統(tǒng)中網(wǎng)絡(luò)化測(cè)試技術(shù)展望[J].測(cè)控技術(shù),2010,29(Z):141-145.
[3]白效賢,楊廷梧,袁炳南.航空飛行試驗(yàn)遙測(cè)技術(shù)發(fā)展趨勢(shì)與對(duì)策[J].測(cè)控技術(shù),2010,29(11):6-9.
[4]楊廷梧,王云山,滕斌.飛行試驗(yàn)遙測(cè)機(jī)載測(cè)試技術(shù)的發(fā)展與應(yīng)用[J].測(cè)控技術(shù),2013,32(4):5-8.
[5]Stevens W.R.TCP/IP詳解.卷1,協(xié)議[M].北京:機(jī)械工業(yè)出版社,2008.
[6]魯宏偉.基于UDP傳輸協(xié)議的包丟失和失序處理[J].計(jì)算機(jī)工程與應(yīng)用,2001,37(2):48-49.
[7]張永強(qiáng)(譯).C++高級(jí)編程[M].北京:清華大學(xué)出版社,2015.
[8]陳堅(jiān).Visual C++網(wǎng)絡(luò)高級(jí)編程[M].北京:人民郵電出版社,2001.