張志祥 商雄偉
(海軍工程大學(xué) 武漢 430033)
?
通用變長(zhǎng)協(xié)議數(shù)據(jù)描述及解析方法研究*
張志祥 商雄偉
(海軍工程大學(xué) 武漢 430033)
越來(lái)越多的數(shù)據(jù)通信協(xié)議中出現(xiàn)了選項(xiàng)和長(zhǎng)度不固定的報(bào)文,給報(bào)文描述和自動(dòng)解析帶來(lái)困難。分析了硬編碼報(bào)文解析方式的特點(diǎn)和存在的問(wèn)題,提出了基于報(bào)文描述信息的統(tǒng)一報(bào)文解析方式,該方式使用于元數(shù)據(jù)描述報(bào)文格式和解析要求。設(shè)計(jì)了報(bào)文描述的概念模型,報(bào)文中各數(shù)據(jù)項(xiàng)的形式化描述,以及相應(yīng)的通用解析算法。使用這種統(tǒng)一的報(bào)文描述方法和通用解析算法,可以靈活地解析數(shù)據(jù)。
協(xié)議描述; 元數(shù)據(jù); 報(bào)文解析
Class Number TP311.52
工業(yè)控制系統(tǒng)通常是由多個(gè)子系統(tǒng)構(gòu)成,各子系統(tǒng)之間通過(guò)以太網(wǎng)、串口、總線等不同傳輸接口交換數(shù)據(jù)。為了檢驗(yàn)報(bào)文協(xié)議,以及分析系統(tǒng)功能和性能,需要對(duì)各子系統(tǒng)之間傳輸?shù)膱?bào)文進(jìn)行解析。越來(lái)越多的協(xié)議采用變長(zhǎng)方式進(jìn)行編碼,給自動(dòng)解碼帶來(lái)困難。目前的應(yīng)用大多是針對(duì)特殊的協(xié)議定制一套處理方法,這使得程序的擴(kuò)充性和通用性變得很差,很難適應(yīng)協(xié)議的新版本或者支持別的協(xié)議。對(duì)于子系統(tǒng)多、接口復(fù)雜的系統(tǒng),往往報(bào)文種類數(shù)量眾多,增加了解析的工作量和難度。本文提出了基于元數(shù)據(jù)描述報(bào)文,基于報(bào)文描述的通用解析方法。
對(duì)報(bào)文的研究包括如下幾個(gè)方面:報(bào)文生成、報(bào)文數(shù)據(jù)傳輸/獲取、報(bào)文數(shù)據(jù)解析/轉(zhuǎn)換和報(bào)文協(xié)議描述等,其中報(bào)文協(xié)議描述是報(bào)文數(shù)據(jù)生成以及報(bào)文數(shù)據(jù)解析/轉(zhuǎn)換的基礎(chǔ)。
報(bào)文協(xié)議分為定長(zhǎng)和變長(zhǎng)兩種。對(duì)于定長(zhǎng)協(xié)議報(bào)文,每一種報(bào)文中數(shù)據(jù)項(xiàng)數(shù)量和格式固定。定長(zhǎng)報(bào)文具有編碼和解碼簡(jiǎn)單的優(yōu)點(diǎn),在有些情況下定長(zhǎng)報(bào)文編碼過(guò)長(zhǎng)。在通信帶寬受限或者通信信道質(zhì)量較差的情況下,不宜傳送較長(zhǎng)的報(bào)文。和定長(zhǎng)協(xié)議相比,變長(zhǎng)協(xié)議具有報(bào)文數(shù)據(jù)短、傳輸可靠性高、速度快等特點(diǎn)。變長(zhǎng)報(bào)文協(xié)議通過(guò)語(yǔ)法實(shí)現(xiàn)報(bào)文數(shù)據(jù)的可變性。報(bào)文由強(qiáng)制字段和可選字段組成,在報(bào)文描述中,字段或字段組是否出現(xiàn)由指示器來(lái)確定,從而實(shí)現(xiàn)按需發(fā)送,減少在傳輸過(guò)程中帶來(lái)的大量數(shù)據(jù)冗余,節(jié)約有限的帶寬資源。例如,歐美戰(zhàn)術(shù)數(shù)據(jù)鏈協(xié)議中專門有支持可變格式報(bào)文的VMF報(bào)文[1]。對(duì)于變長(zhǎng)報(bào)文,目前采用自然語(yǔ)言、表格等非形式化方法描述每個(gè)字段的名稱、占用比特?cái)?shù)和位置,說(shuō)明每個(gè)字段的含義和可能取值。這樣的表示方法比較直觀,但是不適合機(jī)器閱讀,而且不同的協(xié)議之間表示方法有較大的差別,所以難以用于需要進(jìn)行多協(xié)議統(tǒng)一處理的場(chǎng)合。
文獻(xiàn)[2]提出了一種通用的協(xié)議報(bào)文格式描述語(yǔ)言PFDL,使用該語(yǔ)言可以定義常量、變量、比特、選項(xiàng)、子結(jié)構(gòu)等類型?!斑x項(xiàng)”類型可支持可變格式的報(bào)文描述,但這種“可變”是靜態(tài)的,無(wú)法支持靠報(bào)文數(shù)據(jù)本身描述的可變性。文獻(xiàn)[3]將自描述的結(jié)構(gòu)體信息與數(shù)據(jù)信息分離,定義一種自解析報(bào)文協(xié)議HML。該協(xié)議通過(guò)限制結(jié)構(gòu)體信息的層數(shù),在保持自描述特性的同時(shí),提高報(bào)文解析效率,解決高并發(fā)的大規(guī)模處理系統(tǒng)層次之間通信問(wèn)題。但該協(xié)議的描述和使用很復(fù)雜;文獻(xiàn)[4~5]也使用XML語(yǔ)言描述協(xié)議報(bào)文,實(shí)現(xiàn)與協(xié)議無(wú)關(guān)的數(shù)據(jù)流解析和轉(zhuǎn)換,但都沒(méi)有處理變長(zhǎng)報(bào)文的能力。文獻(xiàn)[6]提出一種基于特征關(guān)鍵字的多協(xié)議數(shù)據(jù)流轉(zhuǎn)換方法,分析基于特征關(guān)鍵字的數(shù)據(jù)幀格式描述方法,通過(guò)將通信協(xié)議數(shù)據(jù)幀格式的描述與數(shù)據(jù)流的解析轉(zhuǎn)換代碼相分離,實(shí)現(xiàn)與協(xié)議無(wú)關(guān)的數(shù)據(jù)流解析和轉(zhuǎn)換。該方法用穩(wěn)定的程序處理不穩(wěn)定的數(shù)據(jù)流,避免不同通信協(xié)議之間的數(shù)據(jù)流轉(zhuǎn)換均要編寫專用解析轉(zhuǎn)換程序的缺陷,具有較好的靈活性和普適性。國(guó)外有代表性的工作是文獻(xiàn)[7~9]。文獻(xiàn)[9]提出了一種基于XML的報(bào)文描述語(yǔ)言NetPDL,使用該語(yǔ)言可以描述應(yīng)用無(wú)關(guān)的協(xié)議,并實(shí)現(xiàn)多種網(wǎng)絡(luò)應(yīng)用,在此基礎(chǔ)上,文獻(xiàn)[10]實(shí)現(xiàn)了一個(gè)基于NetPDL的解析引擎BetBee。NetPDL提供了豐富的標(biāo)簽元素,可以描述包括變長(zhǎng)報(bào)文在內(nèi)的各種報(bào)文,但描述復(fù)雜。
上述方法均沒(méi)有很好地處理變長(zhǎng)報(bào)文協(xié)議的自動(dòng)化編解碼問(wèn)題。越來(lái)越多的應(yīng)用要求能夠統(tǒng)一的處理不同的協(xié)議,統(tǒng)一的處理不同的報(bào)文格式。但沒(méi)有對(duì)可變格式報(bào)文統(tǒng)一的形式化描述方法,因此無(wú)法對(duì)可變格式報(bào)文進(jìn)行自動(dòng)化的編碼和解碼。
對(duì)變長(zhǎng)報(bào)文的解析存在兩種方式:硬編碼報(bào)文解析方式和統(tǒng)一報(bào)文解析方式。這里稱負(fù)責(zé)解析報(bào)文的程序?yàn)椤敖馕銎鳌薄?/p>
硬編碼報(bào)文解析方式是為每類報(bào)文開發(fā)一個(gè)解析器,每個(gè)解析器負(fù)責(zé)一種報(bào)文的解析。報(bào)文流到達(dá)后,由多路分發(fā)器根據(jù)報(bào)文中的報(bào)文標(biāo)識(shí)確定報(bào)文的具體類型,并分發(fā)到不同的解析器進(jìn)行解析,得到報(bào)文解析結(jié)果。每種解析器負(fù)責(zé)解析一種報(bào)文。類型具體處理過(guò)程如圖1所示。
圖1 硬編碼報(bào)文解析方式
硬編碼報(bào)文解析方式的特點(diǎn)是一個(gè)解析器只解析一種類型的報(bào)文。其優(yōu)點(diǎn)是解析器的設(shè)計(jì)較簡(jiǎn)單,易于實(shí)現(xiàn),其缺點(diǎn)是將解析規(guī)則硬編碼為各種解析器,使程序無(wú)法通用,一旦報(bào)文定義發(fā)生改變,都需要對(duì)原有程序重新進(jìn)行調(diào)整,這使得程序本身非常脆弱,程序員工作量大,也不利于系統(tǒng)的擴(kuò)展。
統(tǒng)一報(bào)文解析方式是增加表示層(元數(shù)據(jù))描述報(bào)文格式和報(bào)文解析要求,報(bào)文解析器根據(jù)報(bào)文描述信息對(duì)報(bào)文流進(jìn)行解析,輸出解析結(jié)果。其處理過(guò)程如圖2所示。元數(shù)據(jù)是對(duì)報(bào)文數(shù)據(jù)格式的描述。
圖2 統(tǒng)一報(bào)文解析方式
這種方式的特點(diǎn)是通過(guò)報(bào)文描述信息體現(xiàn)報(bào)文的多樣性,通過(guò)改變報(bào)文描述信息擴(kuò)充解析功能。對(duì)于定長(zhǎng)報(bào)文,實(shí)現(xiàn)這種方式比較容易。但對(duì)于變長(zhǎng)報(bào)文,其描述較復(fù)雜,報(bào)文解析器的編寫難度大。
變長(zhǎng)報(bào)文描述的難點(diǎn)在于:數(shù)據(jù)種類多,難以處理;可選字段出現(xiàn)的條件復(fù)雜,難以描述;多類型數(shù)據(jù)和可選數(shù)據(jù)的描述到解析引擎的轉(zhuǎn)換復(fù)雜。
4.1 變長(zhǎng)數(shù)據(jù)報(bào)文實(shí)例
表1是某報(bào)文的描述信息,其中信息狀態(tài)字中的一些比特(bit)位表示后續(xù)信息塊是否出現(xiàn)。
表1 變長(zhǎng)數(shù)據(jù)報(bào)文實(shí)例
數(shù)據(jù)報(bào)文是一個(gè)字節(jié)流。數(shù)據(jù)項(xiàng)是對(duì)應(yīng)應(yīng)用領(lǐng)域的一個(gè)特定信息,如表1中的通信標(biāo)志、傳送字節(jié)數(shù)、命令狀態(tài)信息、遙測(cè)信息、設(shè)備工作狀態(tài)、方位、距離等。作為報(bào)文描述的最小單位,一個(gè)數(shù)據(jù)項(xiàng)對(duì)應(yīng)報(bào)文中的一個(gè)或者幾個(gè)bit位。變長(zhǎng)報(bào)文的特點(diǎn)是某些數(shù)據(jù)項(xiàng)是否存在受之前解析出來(lái)的某些數(shù)據(jù)項(xiàng)的值決定,稱后者為條件數(shù)據(jù)項(xiàng)。
變長(zhǎng)數(shù)據(jù)報(bào)文描述的難點(diǎn)在于如何表示某些數(shù)據(jù)項(xiàng)出現(xiàn)的條件。在變長(zhǎng)報(bào)文中,某些數(shù)據(jù)項(xiàng)受其條件數(shù)據(jù)項(xiàng)的值的控制。如當(dāng)“信息狀態(tài)字”中的最低位為1時(shí)才會(huì)出現(xiàn)“命令狀態(tài)信息”。
另外,作為一種通用的報(bào)文描述方法,需要考慮多種數(shù)據(jù)類型。變長(zhǎng)報(bào)文中包括標(biāo)志型數(shù)據(jù)和數(shù)值型數(shù)據(jù),數(shù)值型數(shù)據(jù)又分為不同的數(shù)據(jù)類型,如表2所示。有些數(shù)據(jù)項(xiàng)的解析需要考慮位運(yùn)算。
表2 變長(zhǎng)報(bào)文數(shù)據(jù)分類
4.2 變長(zhǎng)報(bào)文的元數(shù)據(jù)描述
一個(gè)數(shù)據(jù)報(bào)文是數(shù)據(jù)項(xiàng)的有限序列。如圖3所示,數(shù)據(jù)項(xiàng)分為條件數(shù)據(jù)項(xiàng)和數(shù)值型數(shù)據(jù)項(xiàng),數(shù)值型數(shù)據(jù)項(xiàng)可以受條件數(shù)據(jù)項(xiàng)的約束。
這里假設(shè)一個(gè)數(shù)據(jù)項(xiàng)是否出現(xiàn),只受一個(gè)標(biāo)志型布爾量的控制。本假設(shè)適合于目前絕大多數(shù)協(xié)議。
用Item=〈itemid,name,type,blocklen,startbit,endbit,coef,condition,valuetype,value,offset〉表示某一報(bào)文中的一個(gè)數(shù)據(jù)項(xiàng),其中:itemid為數(shù)據(jù)項(xiàng)的編號(hào);name為數(shù)據(jù)項(xiàng)名稱;type為數(shù)據(jù)類型(見表2);blocklen為數(shù)據(jù)項(xiàng)所在數(shù)據(jù)塊的長(zhǎng)度;startbit和endbit分別為該數(shù)據(jù)項(xiàng)在所在數(shù)據(jù)塊中的起始位和結(jié)束位;blocklen,startbit和endbit確定了該數(shù)據(jù)項(xiàng)所對(duì)應(yīng)的原始數(shù)據(jù)位置,對(duì)于有些只占二進(jìn)制串(n個(gè)字節(jié))的其中m個(gè)連續(xù)位的整數(shù)型數(shù)據(jù),利用這三個(gè)屬性計(jì)算整數(shù)值;對(duì)于浮點(diǎn)型數(shù)據(jù)項(xiàng),用coef表示最小單位;condition表示條件數(shù)據(jù)項(xiàng);它是決定Item是否在報(bào)文中出現(xiàn)的數(shù)據(jù)項(xiàng)的itemid。valuetype和value分別為解析值類型和解析結(jié)果;offset用于確定在該數(shù)據(jù)項(xiàng)解析結(jié)束后解析下一個(gè)數(shù)據(jù)項(xiàng)所需的原始數(shù)據(jù)偏移量。
圖3 報(bào)文描述概念模型
例如,對(duì)于表1中的命令狀態(tài)信息標(biāo)志,name=“命令狀態(tài)信息標(biāo)志”,type=INDICATE,blocklen=1,startbit=7,endbit=7,coef=1,condition=0(表示無(wú)條件解析),offset=0。對(duì)于表1中的“方位”,name=“方位”,type=FLOAT,blocklen=2,startbit=0,endbit=15,coef=0.1,condition=4(表示在items中第4項(xiàng)“遙測(cè)信息標(biāo)志”的值為真時(shí)解析該數(shù)據(jù)項(xiàng),否則不解析),offset=2。
4.3 變長(zhǎng)報(bào)文的自動(dòng)解析方法
當(dāng)采用如上的數(shù)據(jù)項(xiàng)描述后,就可以對(duì)接收?qǐng)?bào)文進(jìn)行自動(dòng)解析。
表items是Item構(gòu)成的有序集合,其中的元素按照數(shù)據(jù)項(xiàng)可能出現(xiàn)的順序排序。解析算法如下:
輸入:報(bào)文描述信息,二進(jìn)制數(shù)據(jù)buffer[0..n-1]
輸出:各數(shù)據(jù)項(xiàng)的解析值
步驟:
1、根據(jù)報(bào)文描述信息初始化items,i=j=0;
//i為要解析的數(shù)據(jù)項(xiàng)的編號(hào),j為buffer中第i個(gè)數(shù)據(jù)項(xiàng)所對(duì)應(yīng)的源碼數(shù)據(jù)的開始位置。
2、如果items[items[i].condition].value!=“假”
2.1 對(duì)buffer[j…j+ items[i].blocklen]解析,得到items[i] .valuetype;
2.2 根據(jù)items[i].valuetype將解析結(jié)果轉(zhuǎn)換,得到items[i].value;
2.3 j=j+ items[i].offset;
3、i++;
4、如果解析未結(jié)束,轉(zhuǎn)2;否則算法結(jié)束。
其中步驟2.1對(duì)items[i]進(jìn)行解析,數(shù)據(jù)塊為buffer[j…j+items[i].blocklen]。根據(jù)不同類型進(jìn)行相應(yīng)的處理:
1) 布爾型:根據(jù)“起始位”信息得到布爾值。
2) 整數(shù)型(包括UNSIGNED和SIGNED):根據(jù)“起始位”、“結(jié)束位”信息得到整型值。
3) 浮點(diǎn)數(shù)型:根據(jù)長(zhǎng)度確定浮點(diǎn)數(shù)精度,并進(jìn)行相應(yīng)的轉(zhuǎn)換得到結(jié)果。
4) 字符型:根據(jù)長(zhǎng)度直接轉(zhuǎn)換得到結(jié)果。
另外,可以用兩種方法判斷一個(gè)報(bào)文的解析是否結(jié)束:通過(guò)數(shù)據(jù)項(xiàng)編號(hào)i進(jìn)行判斷;通過(guò)數(shù)據(jù)偏移量j進(jìn)行判斷。也可以同時(shí)使用這兩個(gè)條件進(jìn)行判斷。
使用本方法開發(fā)的系統(tǒng)已經(jīng)在多型武器系統(tǒng)的測(cè)試工作中得到應(yīng)用,解析了近80種不同類型的報(bào)文,避免了多次重復(fù)開發(fā),極大地減少了工作量。
針對(duì)變長(zhǎng)報(bào)文,使用統(tǒng)一的報(bào)文表示方法,可以滿足不同行業(yè)、不同歷史階段遺留下來(lái)的不同標(biāo)準(zhǔn)的需要,也能夠很好地兼顧現(xiàn)有類型的異構(gòu)數(shù)據(jù)報(bào)文格式標(biāo)準(zhǔn)。本文提出的方法不僅適合于變長(zhǎng)報(bào)文解析,也適合于定長(zhǎng)報(bào)文解析。
[1] 柏雪倩,毛玉泉,李連寶.戰(zhàn)術(shù)數(shù)據(jù)鏈的報(bào)文格式解讀[J].通信技術(shù),2009,42(4):52-54.
[2] 劉鴻,尹霞.一種通用的協(xié)議報(bào)文格式描述語(yǔ)言——PFDL[J].小型微型計(jì)算機(jī)系統(tǒng),2003,24(7):1119-1123.
[3] 羅毅,吳產(chǎn)樂(lè),熊偉成.一種基于自解析報(bào)文協(xié)議的系統(tǒng)分層方法[J].計(jì)算機(jī)工程,2012,38(4):79-81.
[4] 劉喆,郇極,劉艷強(qiáng).基于XML的EtherCAT工業(yè)以太網(wǎng)協(xié)議解析技術(shù)[J].北京航空航天大學(xué)學(xué)報(bào),2011,37(9):1086-1090.
[5] 李海剛,高欣.基于元數(shù)據(jù)驅(qū)動(dòng)的通用電文解析技術(shù)[J].控制工程,2013,20(S1):142-145.
[6] 林霞,蔡聲鎮(zhèn),吳允平,等.基于特征關(guān)鍵字的多協(xié)議數(shù)據(jù)流轉(zhuǎn)換方法[J].計(jì)算機(jī)工程,2011,37(5).
[7] Computer Networks Group(NetGroup) at Politecnico di Torino, Analyzer, Available from: 〈http://analyzer.polito.it〉, March 1999.
[8] Surasak Sanguanpong, Ekapol Rojratanavichai, Syntax directed, definition supported universal protocol analyzer, in: Electrical Engineering Conference(EECON), Kasetsart University, Bangkok, December 1999, Available from: 〈http://anreg.cpe.ku.ac.th/pub/protocol.pdf〉 (in Thai).
[9] Fulvio Risso, Mario Baldi. NetPDL: An extensible XML-based language for packet header description. Computer Networks 50 (2006), 688-706.
[10] Computer Networks Group(NetGroup) at Politecnico di Torino, The NetBee Library, Available from: 〈http://www.nbee.org/〉, August 2004.
Describing and Interpreting Method of Variant-length Protocol Data
ZHANG Zhixiang SHANG Xiongwei
(Naval University of Engineering, Wuhan 430033)
More and more data communication protocols use variant length data, which is difficult to be described and interpreted automatically. This paper summarizes existed approaches for describing and interpreting of protocols, the disadvantages of hard-coding interpreting methods, proposes a general interpreting method based on package descriptions of package format and interpreting requirements. The conceptual model of protocol describing, the formal description of data items and a corresponding general interpreting algorithm are given. The uniform description method and general interpreting algorithm can contribute to constructing flexible interpreting system.
description of protocol, meta-data, interpreting of packages
2014年11月10日,
2014年12月30日
張志祥,男,博士,副教授,研究方向:軟件質(zhì)量保證,計(jì)算機(jī)控制。商雄偉,男,碩士研究生,研究方向:數(shù)據(jù)采集與處理。
TP311.52
10.3969/j.issn1672-9730.2015.05.018