王永娜, 趙 奎, 王鴻亮, 王俊霖
?
針對異構協議的動態解析器模型①
王永娜1,2, 趙 奎2, 王鴻亮2, 王俊霖3
1(中國科學院大學, 北京 100049)2(中國科學院沈陽計算技術研究所, 沈陽 110168)3(大連理工大學軟件學院, 大連 116024)
介紹了異構協議報文格式和特點, 通過使用 XML 語言描述可擴展協議報文的方法, 以簡單協議解析為基礎, 將解析器功能模塊化, 從而設計此異構協議動態解析器模型. 應用此模型實現不必重新編譯, 只需進行少量代碼修改, 即可完成異構協議報文自動模型匹配, 進而完成報文數據解析. 針對兩種簡單協議進行模型應用, 結果表明使用XML語言描述協議報文的方法及可重構的解析器能夠有效地描述和解析異構協議報文, 獲得可靠的解析結果.
異構協議; 動態解析; XML; 狀態機
設備管控系統是通過數據通信進行設備采集信息及控制反饋信息的交互, 實現信息采集處理與遠程設備管控, 需要按照相關協議格式與底層設備進行數據通信. 由于設備及通信信息種類繁多, 通信協議多樣, 存在不同類型的協議幀格式[1], 導致數據預處理的復雜度增大.
基于可擴展低耦合的設計思想, 此協議解析器模型采用具有自描述性語言XML表現協議格式與內容, 采納設計模式思想, 設計出可根據解析對象格式通過XML語言自定義協議解析規則, 實現異構協議動態匹配, 使其可在不重新編譯情況下, 通過XML配置文件和解析模塊少量代碼的修改, 實現將異構協議動態解析為標準協議. 模型獨立性強, 可擴展性好, 可解決數據通信中異構協議數據的交互問題.
基本協議解析是識別數據報頭部和提取數據字段以供后續數據處理的過程[2]. 協議解析器模型在此基礎上進行擴展, 按照數據的流入、處理、流出, 可分為三大主要模塊: 異構數據接入層, 譯碼層, 標準數據交互層.
異構數據接入層與數據采集端進行交互, 完成UDP異構數據報接收[3]. 譯碼層進行數據報匹配及解析處理, 詳細設計分為決策組件和適配組件, 決策組件是模型的檢測機構, 鑒別報文合法性; 適配組件將已通過檢測的報文進行模式適配, 匹配XML配置文件中定義的解析模板, 完成報文解析. 標準數據交互層負責將數據發送到管控系統后續的數據處理服務器做進一步的數據存庫與推送.
動態協議解析器模型架構設計圖如圖1所示.

圖1 動態協議解析器模型架構
協議解析的基本流程是解析器讀取數據報首部, 驗證數據報文合法性, 通過讀取識別信息, 確定是否有解析模板可以匹配解析, 適配相應解析模板進行異構協議數據的解析, 最終將標準數據傳送給數據處理服務器做進一步數據處理與數據轉存、顯示. 功能組件詳細設計如下.
3.1 異構數據接入層
協議解析器模型要接入的基本信息單元是數據包, 將數據包接收階段定義為不同的狀態, 將接收新的數據作為外部觸發條件, 從而改變狀態, 此異構數據接入層可抽象表現為一個基于有限狀態機的網絡通信數據接收端[4]. 基于有限狀態機的狀態模型圖如下:
3.2 譯碼層決策組件
譯碼層是整個模型核心部分, 解析異構協議首先要判斷協議內容是否合法, 能否被適配組件解析, 因此決策組件協議識別至關重要. 協議解析器采用數據報邊接收邊解析的方式, 基于有限狀態機進行異構數據接入的同時, 進行協議合法性決策判斷.
狀態機的兩個主要組成部分是: 事物所處狀態、引發狀態變化的外部事件[5]. 程序實現過程中定義不同數字編號表示不同狀態, 狀態變量值的改變即可描述狀態的變化. 結合狀態圖, 示例代碼實現如下:
LONG ReciveInfo::OnCommunication(WPARAM data)
{
receivedata = (BYTE)data;
if(receive_state_machine == 0)
{
if(receivedata == 0x77) // 接收到起始標志
receive_state_machine = 1;
else
receive_state_machine = 0; // 狀態機復位
}
else if(receive_state_machine == 4)
{
if(receivedata == 0xAA) // 接收到校驗位
receive_state_machine = 5;
else
receive_state_machine = 0; // 狀態機復位
}
}
將接收數據劃分為不用階段, 通過變量值表示狀態, 接收數據幀和數據監測結果作為狀態機觸發條件, 從而改變狀態, 最終完成一個數據包的接收和校驗.

圖2 異構數據接入層狀態圖
3.3 譯碼層適配組件
動態協議解析器模型中適配組件的設計是通過分析異構協議變化特點, 設計可擴展協議格式, 采用具有自描述性及可擴展性的XML 配置文檔進行封裝, 反映通信協議的格式和內容. 經決策組件校驗的協議可被適配組件按解析模板進行動態解析. 協議的改變只需要動態修改XML描述文件同時符合XML Schema驗證文檔即可. 根據XML協議配置文件適配協議解析模板, 通過動態加載XML協議數據幀得出字段的物理含義.
解析器模型框架詳細組件設計如圖3所示.

圖3 異構協議動態解析器模型
4.1 報文的XML文件描述
網絡通信協議需要用協議幀描述傳輸信息, 通常采用硬編碼方式嚴格定義協議格式, 針對每個協議格式編寫固定代碼實現協議解析, 此方式不具通用性, 不便于擴展, 而基于 XML 配置文檔的解析方式使得異構協議可擴展, 在軟件解析中應用較多[6].
使用XML描述協議表現協議字段在數據幀中的位置及所占的字節數等抽象化信息, 可以定義統一的數據傳輸格式, 協議內容及形式的改變, 只修改XML文檔中元素的屬性值即可, 此文件是解析器淺層解析的模板.
4.2 XML解析模板配置文件
以上配置文件代碼描述了幀標識與解析模板號的關系, 協議解析程序對數據幀進行匹配時會識別出幀標識, 與XML配置文件進行模板匹配, 最終通過temp屬性值確定數據幀解析模板號, 完成數據解析.
4.3 XML Schema協議驗證文檔
為改善硬編碼的不可擴展性, XML協議描述文件也要摒棄嚴格定義協議格式的方式, 將數據升華為Item元素抽象間接描述, 定義一個Schema文檔規范XML配置文件架構[7]. XML Schema示例代碼如下:
4.4 XML解析庫的使用
常見XML解析器有tinyxml、Xerces、pugixml、libxml等, 通過對比不同XML解析器對編程語言及開發環境等的支持[8], 選擇Xerces-C++應用于本模型.
Xerces-C++ 主要組件是掃描程序, 本解析器模型需要進行驗證因此選擇SGXMLScanner[9]. 根據線程模型, 主線程調用Initialize(), 創建其他用于解析的線程, 最后調用Terminate(). 初始化期間創建解析器池, 可以在運行時使用這些解析器, 從而避免構造和分解解析器的開銷.
5.1 實驗設計
以設備管控系統為背景, 項目中數據網關需要和底層儀器進行通信采集信息, 選取以下兩種異構協議報文進行測試.

XML協議描述示例代碼如下:
將具體元素抽象為Item元素, 可承載不同協議內容, 避免了固定協議格式的弊端. 測試表明: 基于XML文件的協議描述方式可以很好地描述異構協議, 且修改與擴展方便可行.
通過使用編程接口及線程池、網絡通信等實現協議數據接收及解析推送. 測試程序解析類工廠模式類圖設計如圖5.

圖5 解析類工廠模式類圖
5.2 測試結果
測試程序采用多線程編程模擬數據采集器控制數據數量, 從而測試解析不同數量數據幀所需要的時間.

圖6 協議解析器數據接入及解析界面
上圖為協議解析器模型測試程序數據接收層接收的數據及經過譯碼層后解析出的數據演示界面. 數據幀解析時間采用軟件讀取定時計數器值, 將不同時刻讀取的值進行差值計算得出時間測試值.
結果表1所示.

表1 解析時間記錄表
從測試可以看出: 數據幀解析時間為ms級別, 且從整體看協議解析所需時間未表現出隨數據幀數量的增加同比上升, 以上數據僅表現出此實驗的測試結果, 實際應用中結合調度器線程合理分配, 進一步改進解析模塊程序或將得到更好的時間性能指標.
該解析器模型使用XML描述協議格式與內容, 層次關系清晰, 協議發生變化或新增協議時, 只需適當修改XML協議描述文件, 或增加新的解析模塊, 即可實現對數據幀的解析, 充分體現了設計考慮的可重構性與可擴展性[10]. 此模型可靠性強, 數據轉換效率高, 能夠對數據格式和映射關系實現靈活定制, 可以應用到多種類型設備及工業控制, 實現異構數據轉換.
1 俞曉華,于鳳芹,欽道理.一種能耗數據采集協議描述及生成解析方法.計算機技術與發展,2015.
2 Gibb G. Design Principles for Packet Parsers. Stanford University Microsoft Research, 2015.
3 王智莉,卜方玲.異構感知數據的動態適配接入方法.傳感器與微系統,2015.
4 潘準洋,劉彩霞,劉樹新.基于有限狀態機的網絡協議狀態機制檢測方法.計算機應用研究,2015.
5 李瑩,賈彬.一種基于狀態機的串口通信協議的設計與實現.電子設計工程,2012.
6 齊建業,余祥,劉峻宇,李強.協議一致性測試數據包的構造與解析.西南科技大學學報,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 梁彥杰,廉東本.基于消息中間件的數據交換平臺傳輸框架設計.計算機系統應用,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
國家水體污染控制與治理科技重大專項課題(2012ZX07505003)
2016-04-26;收到修改稿時間:2016-06-21
[10.15888/j.cnki.csa.005533]