APP下载

通用变长协议数据描述及解析方法研究*

2015-03-14张志祥商雄伟

舰船电子工程 2015年5期
关键词:数据项报文编码

张志祥 商雄伟

(海军工程大学 武汉 430033)



通用变长协议数据描述及解析方法研究*

张志祥 商雄伟

(海军工程大学 武汉 430033)

越来越多的数据通信协议中出现了选项和长度不固定的报文,给报文描述和自动解析带来困难。分析了硬编码报文解析方式的特点和存在的问题,提出了基于报文描述信息的统一报文解析方式,该方式使用于元数据描述报文格式和解析要求。设计了报文描述的概念模型,报文中各数据项的形式化描述,以及相应的通用解析算法。使用这种统一的报文描述方法和通用解析算法,可以灵活地解析数据。

协议描述; 元数据; 报文解析

Class Number TP311.52

1 引言

工业控制系统通常是由多个子系统构成,各子系统之间通过以太网、串口、总线等不同传输接口交换数据。为了检验报文协议,以及分析系统功能和性能,需要对各子系统之间传输的报文进行解析。越来越多的协议采用变长方式进行编码,给自动解码带来困难。目前的应用大多是针对特殊的协议定制一套处理方法,这使得程序的扩充性和通用性变得很差,很难适应协议的新版本或者支持别的协议。对于子系统多、接口复杂的系统,往往报文种类数量众多,增加了解析的工作量和难度。本文提出了基于元数据描述报文,基于报文描述的通用解析方法。

2 现状分析

对报文的研究包括如下几个方面:报文生成、报文数据传输/获取、报文数据解析/转换和报文协议描述等,其中报文协议描述是报文数据生成以及报文数据解析/转换的基础。

报文协议分为定长和变长两种。对于定长协议报文,每一种报文中数据项数量和格式固定。定长报文具有编码和解码简单的优点,在有些情况下定长报文编码过长。在通信带宽受限或者通信信道质量较差的情况下,不宜传送较长的报文。和定长协议相比,变长协议具有报文数据短、传输可靠性高、速度快等特点。变长报文协议通过语法实现报文数据的可变性。报文由强制字段和可选字段组成,在报文描述中,字段或字段组是否出现由指示器来确定,从而实现按需发送,减少在传输过程中带来的大量数据冗余,节约有限的带宽资源。例如,欧美战术数据链协议中专门有支持可变格式报文的VMF报文[1]。对于变长报文,目前采用自然语言、表格等非形式化方法描述每个字段的名称、占用比特数和位置,说明每个字段的含义和可能取值。这样的表示方法比较直观,但是不适合机器阅读,而且不同的协议之间表示方法有较大的差别,所以难以用于需要进行多协议统一处理的场合。

文献[2]提出了一种通用的协议报文格式描述语言PFDL,使用该语言可以定义常量、变量、比特、选项、子结构等类型。“选项”类型可支持可变格式的报文描述,但这种“可变”是静态的,无法支持靠报文数据本身描述的可变性。文献[3]将自描述的结构体信息与数据信息分离,定义一种自解析报文协议HML。该协议通过限制结构体信息的层数,在保持自描述特性的同时,提高报文解析效率,解决高并发的大规模处理系统层次之间通信问题。但该协议的描述和使用很复杂;文献[4~5]也使用XML语言描述协议报文,实现与协议无关的数据流解析和转换,但都没有处理变长报文的能力。文献[6]提出一种基于特征关键字的多协议数据流转换方法,分析基于特征关键字的数据帧格式描述方法,通过将通信协议数据帧格式的描述与数据流的解析转换代码相分离,实现与协议无关的数据流解析和转换。该方法用稳定的程序处理不稳定的数据流,避免不同通信协议之间的数据流转换均要编写专用解析转换程序的缺陷,具有较好的灵活性和普适性。国外有代表性的工作是文献[7~9]。文献[9]提出了一种基于XML的报文描述语言NetPDL,使用该语言可以描述应用无关的协议,并实现多种网络应用,在此基础上,文献[10]实现了一个基于NetPDL的解析引擎BetBee。NetPDL提供了丰富的标签元素,可以描述包括变长报文在内的各种报文,但描述复杂。

上述方法均没有很好地处理变长报文协议的自动化编解码问题。越来越多的应用要求能够统一的处理不同的协议,统一的处理不同的报文格式。但没有对可变格式报文统一的形式化描述方法,因此无法对可变格式报文进行自动化的编码和解码。

3 报文解析方法

对变长报文的解析存在两种方式:硬编码报文解析方式和统一报文解析方式。这里称负责解析报文的程序为“解析器”。

硬编码报文解析方式是为每类报文开发一个解析器,每个解析器负责一种报文的解析。报文流到达后,由多路分发器根据报文中的报文标识确定报文的具体类型,并分发到不同的解析器进行解析,得到报文解析结果。每种解析器负责解析一种报文。类型具体处理过程如图1所示。

图1 硬编码报文解析方式

硬编码报文解析方式的特点是一个解析器只解析一种类型的报文。其优点是解析器的设计较简单,易于实现,其缺点是将解析规则硬编码为各种解析器,使程序无法通用,一旦报文定义发生改变,都需要对原有程序重新进行调整,这使得程序本身非常脆弱,程序员工作量大,也不利于系统的扩展。

统一报文解析方式是增加表示层(元数据)描述报文格式和报文解析要求,报文解析器根据报文描述信息对报文流进行解析,输出解析结果。其处理过程如图2所示。元数据是对报文数据格式的描述。

图2 统一报文解析方式

这种方式的特点是通过报文描述信息体现报文的多样性,通过改变报文描述信息扩充解析功能。对于定长报文,实现这种方式比较容易。但对于变长报文,其描述较复杂,报文解析器的编写难度大。

变长报文描述的难点在于:数据种类多,难以处理;可选字段出现的条件复杂,难以描述;多类型数据和可选数据的描述到解析引擎的转换复杂。

4 通用数据报文描述

4.1 变长数据报文实例

表1是某报文的描述信息,其中信息状态字中的一些比特(bit)位表示后续信息块是否出现。

表1 变长数据报文实例

数据报文是一个字节流。数据项是对应应用领域的一个特定信息,如表1中的通信标志、传送字节数、命令状态信息、遥测信息、设备工作状态、方位、距离等。作为报文描述的最小单位,一个数据项对应报文中的一个或者几个bit位。变长报文的特点是某些数据项是否存在受之前解析出来的某些数据项的值决定,称后者为条件数据项。

变长数据报文描述的难点在于如何表示某些数据项出现的条件。在变长报文中,某些数据项受其条件数据项的值的控制。如当“信息状态字”中的最低位为1时才会出现“命令状态信息”。

另外,作为一种通用的报文描述方法,需要考虑多种数据类型。变长报文中包括标志型数据和数值型数据,数值型数据又分为不同的数据类型,如表2所示。有些数据项的解析需要考虑位运算。

表2 变长报文数据分类

4.2 变长报文的元数据描述

一个数据报文是数据项的有限序列。如图3所示,数据项分为条件数据项和数值型数据项,数值型数据项可以受条件数据项的约束。

这里假设一个数据项是否出现,只受一个标志型布尔量的控制。本假设适合于目前绝大多数协议。

用Item=〈itemid,name,type,blocklen,startbit,endbit,coef,condition,valuetype,value,offset〉表示某一报文中的一个数据项,其中:itemid为数据项的编号;name为数据项名称;type为数据类型(见表2);blocklen为数据项所在数据块的长度;startbit和endbit分别为该数据项在所在数据块中的起始位和结束位;blocklen,startbit和endbit确定了该数据项所对应的原始数据位置,对于有些只占二进制串(n个字节)的其中m个连续位的整数型数据,利用这三个属性计算整数值;对于浮点型数据项,用coef表示最小单位;condition表示条件数据项;它是决定Item是否在报文中出现的数据项的itemid。valuetype和value分别为解析值类型和解析结果;offset用于确定在该数据项解析结束后解析下一个数据项所需的原始数据偏移量。

图3 报文描述概念模型

例如,对于表1中的命令状态信息标志,name=“命令状态信息标志”,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项“遥测信息标志”的值为真时解析该数据项,否则不解析),offset=2。

4.3 变长报文的自动解析方法

当采用如上的数据项描述后,就可以对接收报文进行自动解析。

表items是Item构成的有序集合,其中的元素按照数据项可能出现的顺序排序。解析算法如下:

输入:报文描述信息,二进制数据buffer[0..n-1]

输出:各数据项的解析值

步骤:

1、根据报文描述信息初始化items,i=j=0;

//i为要解析的数据项的编号,j为buffer中第i个数据项所对应的源码数据的开始位置。

2、如果items[items[i].condition].value!=“假”

2.1 对buffer[j…j+ items[i].blocklen]解析,得到items[i] .valuetype;

2.2 根据items[i].valuetype将解析结果转换,得到items[i].value;

2.3 j=j+ items[i].offset;

3、i++;

4、如果解析未结束,转2;否则算法结束。

其中步骤2.1对items[i]进行解析,数据块为buffer[j…j+items[i].blocklen]。根据不同类型进行相应的处理:

1) 布尔型:根据“起始位”信息得到布尔值。

2) 整数型(包括UNSIGNED和SIGNED):根据“起始位”、“结束位”信息得到整型值。

3) 浮点数型:根据长度确定浮点数精度,并进行相应的转换得到结果。

4) 字符型:根据长度直接转换得到结果。

另外,可以用两种方法判断一个报文的解析是否结束:通过数据项编号i进行判断;通过数据偏移量j进行判断。也可以同时使用这两个条件进行判断。

5 结语

使用本方法开发的系统已经在多型武器系统的测试工作中得到应用,解析了近80种不同类型的报文,避免了多次重复开发,极大地减少了工作量。

针对变长报文,使用统一的报文表示方法,可以满足不同行业、不同历史阶段遗留下来的不同标准的需要,也能够很好地兼顾现有类型的异构数据报文格式标准。本文提出的方法不仅适合于变长报文解析,也适合于定长报文解析。

[1] 柏雪倩,毛玉泉,李连宝.战术数据链的报文格式解读[J].通信技术,2009,42(4):52-54.

[2] 刘鸿,尹霞.一种通用的协议报文格式描述语言——PFDL[J].小型微型计算机系统,2003,24(7):1119-1123.

[3] 罗毅,吴产乐,熊伟成.一种基于自解析报文协议的系统分层方法[J].计算机工程,2012,38(4):79-81.

[4] 刘喆,郇极,刘艳强.基于XML的EtherCAT工业以太网协议解析技术[J].北京航空航天大学学报,2011,37(9):1086-1090.

[5] 李海刚,高欣.基于元数据驱动的通用电文解析技术[J].控制工程,2013,20(S1):142-145.

[6] 林霞,蔡声镇,吴允平,等.基于特征关键字的多协议数据流转换方法[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日

张志祥,男,博士,副教授,研究方向:软件质量保证,计算机控制。商雄伟,男,硕士研究生,研究方向:数据采集与处理。

TP311.52

10.3969/j.issn1672-9730.2015.05.018

猜你喜欢

数据项报文编码
基于J1939 协议多包报文的时序研究及应用
国六柴油车远程排放监测数据项间相关性特征研究*
生活中的编码
基于相似度的蚁群聚类算法∗
低轨星座短报文通信中的扩频信号二维快捕优化与实现
CTCS-2级报文数据管理需求分析和实现
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
非完整数据库Skyline-join查询*
浅析反驳类报文要点