王永娜, 趙 奎, 王鴻亮, 王俊霖
?
針對(duì)異構(gòu)協(xié)議的動(dòng)態(tài)解析器模型①
王永娜1,2, 趙 奎2, 王鴻亮2, 王俊霖3
1(中國(guó)科學(xué)院大學(xué), 北京 100049)2(中國(guó)科學(xué)院沈陽(yáng)計(jì)算技術(shù)研究所, 沈陽(yáng) 110168)3(大連理工大學(xué)軟件學(xué)院, 大連 116024)
介紹了異構(gòu)協(xié)議報(bào)文格式和特點(diǎn), 通過(guò)使用 XML 語(yǔ)言描述可擴(kuò)展協(xié)議報(bào)文的方法, 以簡(jiǎn)單協(xié)議解析為基礎(chǔ), 將解析器功能模塊化, 從而設(shè)計(jì)此異構(gòu)協(xié)議動(dòng)態(tài)解析器模型. 應(yīng)用此模型實(shí)現(xiàn)不必重新編譯, 只需進(jìn)行少量代碼修改, 即可完成異構(gòu)協(xié)議報(bào)文自動(dòng)模型匹配, 進(jìn)而完成報(bào)文數(shù)據(jù)解析. 針對(duì)兩種簡(jiǎn)單協(xié)議進(jìn)行模型應(yīng)用, 結(jié)果表明使用XML語(yǔ)言描述協(xié)議報(bào)文的方法及可重構(gòu)的解析器能夠有效地描述和解析異構(gòu)協(xié)議報(bào)文, 獲得可靠的解析結(jié)果.
異構(gòu)協(xié)議; 動(dòng)態(tài)解析; XML; 狀態(tài)機(jī)
設(shè)備管控系統(tǒng)是通過(guò)數(shù)據(jù)通信進(jìn)行設(shè)備采集信息及控制反饋信息的交互, 實(shí)現(xiàn)信息采集處理與遠(yuǎn)程設(shè)備管控, 需要按照相關(guān)協(xié)議格式與底層設(shè)備進(jìn)行數(shù)據(jù)通信. 由于設(shè)備及通信信息種類(lèi)繁多, 通信協(xié)議多樣, 存在不同類(lèi)型的協(xié)議幀格式[1], 導(dǎo)致數(shù)據(jù)預(yù)處理的復(fù)雜度增大.
基于可擴(kuò)展低耦合的設(shè)計(jì)思想, 此協(xié)議解析器模型采用具有自描述性語(yǔ)言XML表現(xiàn)協(xié)議格式與內(nèi)容, 采納設(shè)計(jì)模式思想, 設(shè)計(jì)出可根據(jù)解析對(duì)象格式通過(guò)XML語(yǔ)言自定義協(xié)議解析規(guī)則, 實(shí)現(xiàn)異構(gòu)協(xié)議動(dòng)態(tài)匹配, 使其可在不重新編譯情況下, 通過(guò)XML配置文件和解析模塊少量代碼的修改, 實(shí)現(xiàn)將異構(gòu)協(xié)議動(dòng)態(tài)解析為標(biāo)準(zhǔn)協(xié)議. 模型獨(dú)立性強(qiáng), 可擴(kuò)展性好, 可解決數(shù)據(jù)通信中異構(gòu)協(xié)議數(shù)據(jù)的交互問(wèn)題.
基本協(xié)議解析是識(shí)別數(shù)據(jù)報(bào)頭部和提取數(shù)據(jù)字段以供后續(xù)數(shù)據(jù)處理的過(guò)程[2]. 協(xié)議解析器模型在此基礎(chǔ)上進(jìn)行擴(kuò)展, 按照數(shù)據(jù)的流入、處理、流出, 可分為三大主要模塊: 異構(gòu)數(shù)據(jù)接入層, 譯碼層, 標(biāo)準(zhǔn)數(shù)據(jù)交互層.
異構(gòu)數(shù)據(jù)接入層與數(shù)據(jù)采集端進(jìn)行交互, 完成UDP異構(gòu)數(shù)據(jù)報(bào)接收[3]. 譯碼層進(jìn)行數(shù)據(jù)報(bào)匹配及解析處理, 詳細(xì)設(shè)計(jì)分為決策組件和適配組件, 決策組件是模型的檢測(cè)機(jī)構(gòu), 鑒別報(bào)文合法性; 適配組件將已通過(guò)檢測(cè)的報(bào)文進(jìn)行模式適配, 匹配XML配置文件中定義的解析模板, 完成報(bào)文解析. 標(biāo)準(zhǔn)數(shù)據(jù)交互層負(fù)責(zé)將數(shù)據(jù)發(fā)送到管控系統(tǒng)后續(xù)的數(shù)據(jù)處理服務(wù)器做進(jìn)一步的數(shù)據(jù)存庫(kù)與推送.
動(dòng)態(tài)協(xié)議解析器模型架構(gòu)設(shè)計(jì)圖如圖1所示.
圖1 動(dòng)態(tài)協(xié)議解析器模型架構(gòu)
協(xié)議解析的基本流程是解析器讀取數(shù)據(jù)報(bào)首部, 驗(yàn)證數(shù)據(jù)報(bào)文合法性, 通過(guò)讀取識(shí)別信息, 確定是否有解析模板可以匹配解析, 適配相應(yīng)解析模板進(jìn)行異構(gòu)協(xié)議數(shù)據(jù)的解析, 最終將標(biāo)準(zhǔn)數(shù)據(jù)傳送給數(shù)據(jù)處理服務(wù)器做進(jìn)一步數(shù)據(jù)處理與數(shù)據(jù)轉(zhuǎn)存、顯示. 功能組件詳細(xì)設(shè)計(jì)如下.
3.1 異構(gòu)數(shù)據(jù)接入層
協(xié)議解析器模型要接入的基本信息單元是數(shù)據(jù)包, 將數(shù)據(jù)包接收階段定義為不同的狀態(tài), 將接收新的數(shù)據(jù)作為外部觸發(fā)條件, 從而改變狀態(tài), 此異構(gòu)數(shù)據(jù)接入層可抽象表現(xiàn)為一個(gè)基于有限狀態(tài)機(jī)的網(wǎng)絡(luò)通信數(shù)據(jù)接收端[4]. 基于有限狀態(tài)機(jī)的狀態(tài)模型圖如下:
3.2 譯碼層決策組件
譯碼層是整個(gè)模型核心部分, 解析異構(gòu)協(xié)議首先要判斷協(xié)議內(nèi)容是否合法, 能否被適配組件解析, 因此決策組件協(xié)議識(shí)別至關(guān)重要. 協(xié)議解析器采用數(shù)據(jù)報(bào)邊接收邊解析的方式, 基于有限狀態(tài)機(jī)進(jìn)行異構(gòu)數(shù)據(jù)接入的同時(shí), 進(jìn)行協(xié)議合法性決策判斷.
狀態(tài)機(jī)的兩個(gè)主要組成部分是: 事物所處狀態(tài)、引發(fā)狀態(tài)變化的外部事件[5]. 程序?qū)崿F(xiàn)過(guò)程中定義不同數(shù)字編號(hào)表示不同狀態(tài), 狀態(tài)變量值的改變即可描述狀態(tài)的變化. 結(jié)合狀態(tài)圖, 示例代碼實(shí)現(xiàn)如下:
LONG ReciveInfo::OnCommunication(WPARAM data)
{
receivedata = (BYTE)data;
if(receive_state_machine == 0)
{
if(receivedata == 0x77) // 接收到起始標(biāo)志
receive_state_machine = 1;
else
receive_state_machine = 0; // 狀態(tài)機(jī)復(fù)位
}
else if(receive_state_machine == 4)
{
if(receivedata == 0xAA) // 接收到校驗(yàn)位
receive_state_machine = 5;
else
receive_state_machine = 0; // 狀態(tài)機(jī)復(fù)位
}
}
將接收數(shù)據(jù)劃分為不用階段, 通過(guò)變量值表示狀態(tài), 接收數(shù)據(jù)幀和數(shù)據(jù)監(jiān)測(cè)結(jié)果作為狀態(tài)機(jī)觸發(fā)條件, 從而改變狀態(tài), 最終完成一個(gè)數(shù)據(jù)包的接收和校驗(yàn).
圖2 異構(gòu)數(shù)據(jù)接入層狀態(tài)圖
3.3 譯碼層適配組件
動(dòng)態(tài)協(xié)議解析器模型中適配組件的設(shè)計(jì)是通過(guò)分析異構(gòu)協(xié)議變化特點(diǎn), 設(shè)計(jì)可擴(kuò)展協(xié)議格式, 采用具有自描述性及可擴(kuò)展性的XML 配置文檔進(jìn)行封裝, 反映通信協(xié)議的格式和內(nèi)容. 經(jīng)決策組件校驗(yàn)的協(xié)議可被適配組件按解析模板進(jìn)行動(dòng)態(tài)解析. 協(xié)議的改變只需要?jiǎng)討B(tài)修改XML描述文件同時(shí)符合XML Schema驗(yàn)證文檔即可. 根據(jù)XML協(xié)議配置文件適配協(xié)議解析模板, 通過(guò)動(dòng)態(tài)加載XML協(xié)議數(shù)據(jù)幀得出字段的物理含義.
解析器模型框架詳細(xì)組件設(shè)計(jì)如圖3所示.
圖3 異構(gòu)協(xié)議動(dòng)態(tài)解析器模型
4.1 報(bào)文的XML文件描述
網(wǎng)絡(luò)通信協(xié)議需要用協(xié)議幀描述傳輸信息, 通常采用硬編碼方式嚴(yán)格定義協(xié)議格式, 針對(duì)每個(gè)協(xié)議格式編寫(xiě)固定代碼實(shí)現(xiàn)協(xié)議解析, 此方式不具通用性, 不便于擴(kuò)展, 而基于 XML 配置文檔的解析方式使得異構(gòu)協(xié)議可擴(kuò)展, 在軟件解析中應(yīng)用較多[6].
使用XML描述協(xié)議表現(xiàn)協(xié)議字段在數(shù)據(jù)幀中的位置及所占的字節(jié)數(shù)等抽象化信息, 可以定義統(tǒng)一的數(shù)據(jù)傳輸格式, 協(xié)議內(nèi)容及形式的改變, 只修改XML文檔中元素的屬性值即可, 此文件是解析器淺層解析的模板.
4.2 XML解析模板配置文件
以上配置文件代碼描述了幀標(biāo)識(shí)與解析模板號(hào)的關(guān)系, 協(xié)議解析程序?qū)?shù)據(jù)幀進(jìn)行匹配時(shí)會(huì)識(shí)別出幀標(biāo)識(shí), 與XML配置文件進(jìn)行模板匹配, 最終通過(guò)temp屬性值確定數(shù)據(jù)幀解析模板號(hào), 完成數(shù)據(jù)解析.
4.3 XML Schema協(xié)議驗(yàn)證文檔
為改善硬編碼的不可擴(kuò)展性, XML協(xié)議描述文件也要摒棄嚴(yán)格定義協(xié)議格式的方式, 將數(shù)據(jù)升華為Item元素抽象間接描述, 定義一個(gè)Schema文檔規(guī)范XML配置文件架構(gòu)[7]. XML Schema示例代碼如下:
4.4 XML解析庫(kù)的使用
常見(jiàn)XML解析器有tinyxml、Xerces、pugixml、libxml等, 通過(guò)對(duì)比不同XML解析器對(duì)編程語(yǔ)言及開(kāi)發(fā)環(huán)境等的支持[8], 選擇Xerces-C++應(yīng)用于本模型.
Xerces-C++ 主要組件是掃描程序, 本解析器模型需要進(jìn)行驗(yàn)證因此選擇SGXMLScanner[9]. 根據(jù)線(xiàn)程模型, 主線(xiàn)程調(diào)用Initialize(), 創(chuàng)建其他用于解析的線(xiàn)程, 最后調(diào)用Terminate(). 初始化期間創(chuàng)建解析器池, 可以在運(yùn)行時(shí)使用這些解析器, 從而避免構(gòu)造和分解解析器的開(kāi)銷(xiāo).
5.1 實(shí)驗(yàn)設(shè)計(jì)
以設(shè)備管控系統(tǒng)為背景, 項(xiàng)目中數(shù)據(jù)網(wǎng)關(guān)需要和底層儀器進(jìn)行通信采集信息, 選取以下兩種異構(gòu)協(xié)議報(bào)文進(jìn)行測(cè)試.
XML協(xié)議描述示例代碼如下:
將具體元素抽象為Item元素, 可承載不同協(xié)議內(nèi)容, 避免了固定協(xié)議格式的弊端. 測(cè)試表明: 基于XML文件的協(xié)議描述方式可以很好地描述異構(gòu)協(xié)議, 且修改與擴(kuò)展方便可行.
通過(guò)使用編程接口及線(xiàn)程池、網(wǎng)絡(luò)通信等實(shí)現(xiàn)協(xié)議數(shù)據(jù)接收及解析推送. 測(cè)試程序解析類(lèi)工廠(chǎng)模式類(lèi)圖設(shè)計(jì)如圖5.
圖5 解析類(lèi)工廠(chǎng)模式類(lèi)圖
5.2 測(cè)試結(jié)果
測(cè)試程序采用多線(xiàn)程編程模擬數(shù)據(jù)采集器控制數(shù)據(jù)數(shù)量, 從而測(cè)試解析不同數(shù)量數(shù)據(jù)幀所需要的時(shí)間.
圖6 協(xié)議解析器數(shù)據(jù)接入及解析界面
上圖為協(xié)議解析器模型測(cè)試程序數(shù)據(jù)接收層接收的數(shù)據(jù)及經(jīng)過(guò)譯碼層后解析出的數(shù)據(jù)演示界面. 數(shù)據(jù)幀解析時(shí)間采用軟件讀取定時(shí)計(jì)數(shù)器值, 將不同時(shí)刻讀取的值進(jìn)行差值計(jì)算得出時(shí)間測(cè)試值.
結(jié)果表1所示.
表1 解析時(shí)間記錄表
從測(cè)試可以看出: 數(shù)據(jù)幀解析時(shí)間為ms級(jí)別, 且從整體看協(xié)議解析所需時(shí)間未表現(xiàn)出隨數(shù)據(jù)幀數(shù)量的增加同比上升, 以上數(shù)據(jù)僅表現(xiàn)出此實(shí)驗(yàn)的測(cè)試結(jié)果, 實(shí)際應(yīng)用中結(jié)合調(diào)度器線(xiàn)程合理分配, 進(jìn)一步改進(jìn)解析模塊程序或?qū)⒌玫礁玫臅r(shí)間性能指標(biāo).
該解析器模型使用XML描述協(xié)議格式與內(nèi)容, 層次關(guān)系清晰, 協(xié)議發(fā)生變化或新增協(xié)議時(shí), 只需適當(dāng)修改XML協(xié)議描述文件, 或增加新的解析模塊, 即可實(shí)現(xiàn)對(duì)數(shù)據(jù)幀的解析, 充分體現(xiàn)了設(shè)計(jì)考慮的可重構(gòu)性與可擴(kuò)展性[10]. 此模型可靠性強(qiáng), 數(shù)據(jù)轉(zhuǎn)換效率高, 能夠?qū)?shù)據(jù)格式和映射關(guān)系實(shí)現(xiàn)靈活定制, 可以應(yīng)用到多種類(lèi)型設(shè)備及工業(yè)控制, 實(shí)現(xiàn)異構(gòu)數(shù)據(jù)轉(zhuǎn)換.
1 俞曉華,于鳳芹,欽道理.一種能耗數(shù)據(jù)采集協(xié)議描述及生成解析方法.計(jì)算機(jī)技術(shù)與發(fā)展,2015.
2 Gibb G. Design Principles for Packet Parsers. Stanford University Microsoft Research, 2015.
3 王智莉,卜方玲.異構(gòu)感知數(shù)據(jù)的動(dòng)態(tài)適配接入方法.傳感器與微系統(tǒng),2015.
4 潘準(zhǔn)洋,劉彩霞,劉樹(shù)新.基于有限狀態(tài)機(jī)的網(wǎng)絡(luò)協(xié)議狀態(tài)機(jī)制檢測(cè)方法.計(jì)算機(jī)應(yīng)用研究,2015.
5 李瑩,賈彬.一種基于狀態(tài)機(jī)的串口通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn).電子設(shè)計(jì)工程,2012.
6 齊建業(yè),余祥,劉峻宇,李強(qiáng).協(xié)議一致性測(cè)試數(shù)據(jù)包的構(gòu)造與解析.西南科技大學(xué)學(xué)報(bào),2013.
7 Thaw TZ, Khin MM. Measuring qualities of XML schema documents. Journal of Software Engineering and Applications, 2013.
8 http://lars.ruoff.free.fr/xmlcpp/.
9 http://xerces.apache.org/xerces-c/.
10 梁彥杰,廉東本.基于消息中間件的數(shù)據(jù)交換平臺(tái)傳輸框架設(shè)計(jì).計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(4):10-13.
Model of Dynamic Parser for Heterogeneous Protocol
WANG Yong-Na1,2, ZHAO Kui2, WANG Hong-Liang2, WANG Jun-Lin3
1(University of Chinese Academy of Sciences, Beijing 100049, China)2(Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang 110168, China)3(School of Software Technology, Dalian University of Technology, Dalian 116024, China)
This paper firstly describes the format and features of heterogeneous protocol packet. Then it describes the extended protocol packets by using the XML language, and modularizes the parser function to design a model of dynamic heterogeneous protocol parser based on the method of simple protocol analysis. Realizations applying this model can be achieved without recompiling, and only a small amount of code changes is needed to complete the model automatic matching of heterogeneous protocol packets, and then complete the analysis of packet data. We apply the model into two simple protocols, and the results show that the method of using XML to describe the protocol message and the reconfigurable parser can describe and analyze the heterogeneous protocol message effectively, and obtain reliable analysis result.
heterogeneous protocol; dynamic analysis; XML; state machine
國(guó)家水體污染控制與治理科技重大專(zhuān)項(xiàng)課題(2012ZX07505003)
2016-04-26;收到修改稿時(shí)間:2016-06-21
[10.15888/j.cnki.csa.005533]