張志祥 商雄偉
(海軍工程大學(xué) 武漢 430033)
?
通用變長協(xié)議數(shù)據(jù)描述及解析方法研究*
張志祥 商雄偉
(海軍工程大學(xué) 武漢 430033)
越來越多的數(shù)據(jù)通信協(xié)議中出現(xiàn)了選項(xiàng)和長度不固定的報(bào)文,給報(bào)文描述和自動解析帶來困難。分析了硬編碼報(bào)文解析方式的特點(diǎ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)通常是由多個子系統(tǒng)構(gòu)成,各子系統(tǒng)之間通過以太網(wǎng)、串口、總線等不同傳輸接口交換數(shù)據(jù)。為了檢驗(yàn)報(bào)文協(xié)議,以及分析系統(tǒng)功能和性能,需要對各子系統(tǒng)之間傳輸?shù)膱?bào)文進(jìn)行解析。越來越多的協(xié)議采用變長方式進(jìn)行編碼,給自動解碼帶來困難。目前的應(yīng)用大多是針對特殊的協(xié)議定制一套處理方法,這使得程序的擴(kuò)充性和通用性變得很差,很難適應(yīng)協(xié)議的新版本或者支持別的協(xié)議。對于子系統(tǒng)多、接口復(fù)雜的系統(tǒng),往往報(bào)文種類數(shù)量眾多,增加了解析的工作量和難度。本文提出了基于元數(shù)據(jù)描述報(bào)文,基于報(bào)文描述的通用解析方法。
對報(bào)文的研究包括如下幾個方面:報(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é)議分為定長和變長兩種。對于定長協(xié)議報(bào)文,每一種報(bào)文中數(shù)據(jù)項(xiàng)數(shù)量和格式固定。定長報(bào)文具有編碼和解碼簡單的優(yōu)點(diǎn),在有些情況下定長報(bào)文編碼過長。在通信帶寬受限或者通信信道質(zhì)量較差的情況下,不宜傳送較長的報(bào)文。和定長協(xié)議相比,變長協(xié)議具有報(bào)文數(shù)據(jù)短、傳輸可靠性高、速度快等特點(diǎn)。變長報(bào)文協(xié)議通過語法實(shí)現(xiàn)報(bào)文數(shù)據(jù)的可變性。報(bào)文由強(qiáng)制字段和可選字段組成,在報(bào)文描述中,字段或字段組是否出現(xiàn)由指示器來確定,從而實(shí)現(xiàn)按需發(fā)送,減少在傳輸過程中帶來的大量數(shù)據(jù)冗余,節(jié)約有限的帶寬資源。例如,歐美戰(zhàn)術(shù)數(shù)據(jù)鏈協(xié)議中專門有支持可變格式報(bào)文的VMF報(bào)文[1]。對于變長報(bào)文,目前采用自然語言、表格等非形式化方法描述每個字段的名稱、占用比特?cái)?shù)和位置,說明每個字段的含義和可能取值。這樣的表示方法比較直觀,但是不適合機(jī)器閱讀,而且不同的協(xié)議之間表示方法有較大的差別,所以難以用于需要進(jìn)行多協(xié)議統(tǒng)一處理的場合。
文獻(xiàn)[2]提出了一種通用的協(xié)議報(bào)文格式描述語言PFDL,使用該語言可以定義常量、變量、比特、選項(xiàng)、子結(jié)構(gòu)等類型?!斑x項(xiàng)”類型可支持可變格式的報(bào)文描述,但這種“可變”是靜態(tài)的,無法支持靠報(bào)文數(shù)據(jù)本身描述的可變性。文獻(xiàn)[3]將自描述的結(jié)構(gòu)體信息與數(shù)據(jù)信息分離,定義一種自解析報(bào)文協(xié)議HML。該協(xié)議通過限制結(jié)構(gòu)體信息的層數(shù),在保持自描述特性的同時,提高報(bào)文解析效率,解決高并發(fā)的大規(guī)模處理系統(tǒng)層次之間通信問題。但該協(xié)議的描述和使用很復(fù)雜;文獻(xiàn)[4~5]也使用XML語言描述協(xié)議報(bào)文,實(shí)現(xiàn)與協(xié)議無關(guān)的數(shù)據(jù)流解析和轉(zhuǎn)換,但都沒有處理變長報(bào)文的能力。文獻(xiàn)[6]提出一種基于特征關(guān)鍵字的多協(xié)議數(shù)據(jù)流轉(zhuǎn)換方法,分析基于特征關(guān)鍵字的數(shù)據(jù)幀格式描述方法,通過將通信協(xié)議數(shù)據(jù)幀格式的描述與數(shù)據(jù)流的解析轉(zhuǎn)換代碼相分離,實(shí)現(xiàn)與協(xié)議無關(guān)的數(shù)據(jù)流解析和轉(zhuǎn)換。該方法用穩(wěn)定的程序處理不穩(wěn)定的數(shù)據(jù)流,避免不同通信協(xié)議之間的數(shù)據(jù)流轉(zhuǎn)換均要編寫專用解析轉(zhuǎn)換程序的缺陷,具有較好的靈活性和普適性。國外有代表性的工作是文獻(xiàn)[7~9]。文獻(xiàn)[9]提出了一種基于XML的報(bào)文描述語言NetPDL,使用該語言可以描述應(yīng)用無關(guān)的協(xié)議,并實(shí)現(xiàn)多種網(wǎng)絡(luò)應(yīng)用,在此基礎(chǔ)上,文獻(xiàn)[10]實(shí)現(xiàn)了一個基于NetPDL的解析引擎BetBee。NetPDL提供了豐富的標(biāo)簽元素,可以描述包括變長報(bào)文在內(nèi)的各種報(bào)文,但描述復(fù)雜。
上述方法均沒有很好地處理變長報(bào)文協(xié)議的自動化編解碼問題。越來越多的應(yīng)用要求能夠統(tǒng)一的處理不同的協(xié)議,統(tǒng)一的處理不同的報(bào)文格式。但沒有對可變格式報(bào)文統(tǒng)一的形式化描述方法,因此無法對可變格式報(bào)文進(jìn)行自動化的編碼和解碼。
對變長報(bào)文的解析存在兩種方式:硬編碼報(bào)文解析方式和統(tǒng)一報(bào)文解析方式。這里稱負(fù)責(zé)解析報(bào)文的程序?yàn)椤敖馕銎鳌薄?/p>
硬編碼報(bào)文解析方式是為每類報(bào)文開發(fā)一個解析器,每個解析器負(fù)責(zé)一種報(bào)文的解析。報(bào)文流到達(dá)后,由多路分發(fā)器根據(jù)報(bào)文中的報(bào)文標(biāo)識確定報(bào)文的具體類型,并分發(fā)到不同的解析器進(jìn)行解析,得到報(bào)文解析結(jié)果。每種解析器負(fù)責(zé)解析一種報(bào)文。類型具體處理過程如圖1所示。
圖1 硬編碼報(bào)文解析方式
硬編碼報(bào)文解析方式的特點(diǎn)是一個解析器只解析一種類型的報(bào)文。其優(yōu)點(diǎn)是解析器的設(shè)計(jì)較簡單,易于實(shí)現(xiàn),其缺點(diǎn)是將解析規(guī)則硬編碼為各種解析器,使程序無法通用,一旦報(bào)文定義發(fā)生改變,都需要對原有程序重新進(jìn)行調(diào)整,這使得程序本身非常脆弱,程序員工作量大,也不利于系統(tǒng)的擴(kuò)展。
統(tǒng)一報(bào)文解析方式是增加表示層(元數(shù)據(jù))描述報(bào)文格式和報(bào)文解析要求,報(bào)文解析器根據(jù)報(bào)文描述信息對報(bào)文流進(jìn)行解析,輸出解析結(jié)果。其處理過程如圖2所示。元數(shù)據(jù)是對報(bào)文數(shù)據(jù)格式的描述。
圖2 統(tǒng)一報(bào)文解析方式
這種方式的特點(diǎn)是通過報(bào)文描述信息體現(xiàn)報(bào)文的多樣性,通過改變報(bào)文描述信息擴(kuò)充解析功能。對于定長報(bào)文,實(shí)現(xiàn)這種方式比較容易。但對于變長報(bào)文,其描述較復(fù)雜,報(bào)文解析器的編寫難度大。
變長報(bào)文描述的難點(diǎn)在于:數(shù)據(jù)種類多,難以處理;可選字段出現(xiàn)的條件復(fù)雜,難以描述;多類型數(shù)據(jù)和可選數(shù)據(jù)的描述到解析引擎的轉(zhuǎn)換復(fù)雜。
4.1 變長數(shù)據(jù)報(bào)文實(shí)例
表1是某報(bào)文的描述信息,其中信息狀態(tài)字中的一些比特(bit)位表示后續(xù)信息塊是否出現(xiàn)。
表1 變長數(shù)據(jù)報(bào)文實(shí)例
數(shù)據(jù)報(bào)文是一個字節(jié)流。數(shù)據(jù)項(xiàng)是對應(yīng)應(yīng)用領(lǐng)域的一個特定信息,如表1中的通信標(biāo)志、傳送字節(jié)數(shù)、命令狀態(tài)信息、遙測信息、設(shè)備工作狀態(tài)、方位、距離等。作為報(bào)文描述的最小單位,一個數(shù)據(jù)項(xiàng)對應(yīng)報(bào)文中的一個或者幾個bit位。變長報(bào)文的特點(diǎn)是某些數(shù)據(jù)項(xiàng)是否存在受之前解析出來的某些數(shù)據(jù)項(xiàng)的值決定,稱后者為條件數(shù)據(jù)項(xiàng)。
變長數(shù)據(jù)報(bào)文描述的難點(diǎn)在于如何表示某些數(shù)據(jù)項(xiàng)出現(xiàn)的條件。在變長報(bào)文中,某些數(shù)據(jù)項(xiàng)受其條件數(shù)據(jù)項(xiàng)的值的控制。如當(dāng)“信息狀態(tài)字”中的最低位為1時才會出現(xiàn)“命令狀態(tài)信息”。
另外,作為一種通用的報(bào)文描述方法,需要考慮多種數(shù)據(jù)類型。變長報(bào)文中包括標(biāo)志型數(shù)據(jù)和數(shù)值型數(shù)據(jù),數(shù)值型數(shù)據(jù)又分為不同的數(shù)據(jù)類型,如表2所示。有些數(shù)據(jù)項(xiàng)的解析需要考慮位運(yùn)算。
表2 變長報(bào)文數(shù)據(jù)分類
4.2 變長報(bào)文的元數(shù)據(jù)描述
一個數(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è)一個數(shù)據(jù)項(xiàng)是否出現(xiàn),只受一個標(biāo)志型布爾量的控制。本假設(shè)適合于目前絕大多數(shù)協(xié)議。
用Item=〈itemid,name,type,blocklen,startbit,endbit,coef,condition,valuetype,value,offset〉表示某一報(bào)文中的一個數(shù)據(jù)項(xiàng),其中:itemid為數(shù)據(jù)項(xiàng)的編號;name為數(shù)據(jù)項(xiàng)名稱;type為數(shù)據(jù)類型(見表2);blocklen為數(shù)據(jù)項(xiàng)所在數(shù)據(jù)塊的長度;startbit和endbit分別為該數(shù)據(jù)項(xiàng)在所在數(shù)據(jù)塊中的起始位和結(jié)束位;blocklen,startbit和endbit確定了該數(shù)據(jù)項(xiàng)所對應(yīng)的原始數(shù)據(jù)位置,對于有些只占二進(jìn)制串(n個字節(jié))的其中m個連續(xù)位的整數(shù)型數(shù)據(jù),利用這三個屬性計(jì)算整數(shù)值;對于浮點(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é)束后解析下一個數(shù)據(jù)項(xiàng)所需的原始數(shù)據(jù)偏移量。
圖3 報(bào)文描述概念模型
例如,對于表1中的命令狀態(tài)信息標(biāo)志,name=“命令狀態(tài)信息標(biāo)志”,type=INDICATE,blocklen=1,startbit=7,endbit=7,coef=1,condition=0(表示無條件解析),offset=0。對于表1中的“方位”,name=“方位”,type=FLOAT,blocklen=2,startbit=0,endbit=15,coef=0.1,condition=4(表示在items中第4項(xiàng)“遙測信息標(biāo)志”的值為真時解析該數(shù)據(jù)項(xiàng),否則不解析),offset=2。
4.3 變長報(bào)文的自動解析方法
當(dāng)采用如上的數(shù)據(jù)項(xiàng)描述后,就可以對接收報(bào)文進(jìn)行自動解析。
表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)的編號,j為buffer中第i個數(shù)據(jù)項(xiàng)所對應(yīng)的源碼數(shù)據(jù)的開始位置。
2、如果items[items[i].condition].value!=“假”
2.1 對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對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ù)長度確定浮點(diǎn)數(shù)精度,并進(jìn)行相應(yīng)的轉(zhuǎn)換得到結(jié)果。
4) 字符型:根據(jù)長度直接轉(zhuǎn)換得到結(jié)果。
另外,可以用兩種方法判斷一個報(bào)文的解析是否結(jié)束:通過數(shù)據(jù)項(xiàng)編號i進(jìn)行判斷;通過數(shù)據(jù)偏移量j進(jìn)行判斷。也可以同時使用這兩個條件進(jìn)行判斷。
使用本方法開發(fā)的系統(tǒng)已經(jīng)在多型武器系統(tǒng)的測試工作中得到應(yīng)用,解析了近80種不同類型的報(bào)文,避免了多次重復(fù)開發(fā),極大地減少了工作量。
針對變長報(bào)文,使用統(tǒng)一的報(bào)文表示方法,可以滿足不同行業(yè)、不同歷史階段遺留下來的不同標(biāo)準(zhǔn)的需要,也能夠很好地兼顧現(xiàn)有類型的異構(gòu)數(shù)據(jù)報(bào)文格式標(biāo)準(zhǔn)。本文提出的方法不僅適合于變長報(bào)文解析,也適合于定長報(bào)文解析。
[1] 柏雪倩,毛玉泉,李連寶.戰(zhàn)術(shù)數(shù)據(jù)鏈的報(bào)文格式解讀[J].通信技術(shù),2009,42(4):52-54.
[2] 劉鴻,尹霞.一種通用的協(xié)議報(bào)文格式描述語言——PFDL[J].小型微型計(jì)算機(jī)系統(tǒng),2003,24(7):1119-1123.
[3] 羅毅,吳產(chǎn)樂,熊偉成.一種基于自解析報(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ū)動的通用電文解析技術(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