一种船舶通信报文实时解析过滤方法与流程

文档序号:17299020发布日期:2019-04-03 04:44阅读:173来源:国知局
一种船舶通信报文实时解析过滤方法与流程
本发明是一种船舶通信报文实时解析过滤方法,主要用于船舶通信报文传输过程中的解析及过滤,属于信息
技术领域

背景技术
:船舶系统是一个耦合度高,各设备之间相互关联的复杂通信系统。目前,船舶系统内部各设备之间用以太网技术实现数据的通信。在各种设备开发开发调试的过程中,需要进行多次通信测试以保证设备运行的正确性。若在船舶航行中出现网络故障,仅仅依靠船员根据他们的经验和专业素养来进行故障判断,极有可能造成不可估量损失。因此,无论是在船舶开发调试的过程中还是船舶网络故障发生时,使用快速的方法对通信报文进行解析并调试显得尤为重要。目前船舶通信系统中实时通信的数据量较大,报文种类繁多,且报文针对新型设备的对接需要经常需要对报文数据字段的内容进行更改,所以对于如何动态的配置报文数据字段进行解析以及如何快速实时地通过解析对应数据从而滤掉无效、错误和用户“不关心”的网络原始数据的要求也不断提高。传统报文的解析方法,在接收到一条报文后,在程序代码中对数据报文的每一个数据字段依次进行解析。所有解析代码都是依照差不多的逻辑对字节进行处理,每条报文需要写单独的代码进行处理,代码繁琐且复用性差。当报文的数据字段变化时,只能对程序进行修改且扩展性差。陈星亮等学者提出了海洋水文气象报文自动解析系统的设计与实现。基于海洋水文气象报文格式数据开发了功能实用易于扩展的报文自动解析存储系统。该方法利用多线程技术提高报文数据解析的时效性,是一种高效的报文解析方法,但方法只能作用于线下数据,并不能线上在接收的同时进行解析。吴建斌等学者为了提高报文的解析速率,提出了一种基于xml的多格式报文解析方法,该方法可以对报文数据进行动态解析,但是随着船舶通信系统报文的大幅度增长,xml文件在读取与更改时会消耗大量的内存以及时间,同时解析的过程是按顺序解析,解析的速度跟不上实际应用中报文获取的速度,从而无法实时的对报文进行数据提取以及过滤。目前的船舶通信系统中,报文种类繁多,报文的数据字段也经常会为了满足其他接口的需要进行修改。在开发调试或者维修检测的过程中,需要实时对特定的数据字段进行提取或过滤。在解析时,数据的规模和大小也往往不可预知,且为了满足实时性的要求,对于数据的处理只能是一次扫描,无法回溯。本文在充分了解船舶通信系统的实际应用特点的基础上,提出了一种多协议船舶通信报文动态解析与快速提取过滤数据的方法,利用该方法既可以动态配置报文格式进行解析,也可以实现线上快速地针对指定数据字段进行提取或过滤,在实际的系统中得到了广泛的应用。技术实现要素:本发明采用的技术方案为一种船舶通信报文实时解析过滤方法,该方法包括以下步骤:s1报文配置(1)报文定义由于udp报文在传输的过程中延迟小,且数据传输效率高,船舶通信系统中一般采用udp报文进行通信。在两个设备a和b间交互时,设备a先给设备b发送一条命令报文,在设备b收到设备a的命令报文后,设备b向设备a发送确认报文,表明已经收到了设备a向设备b发送的命令报文。若设备a在一段时间内并未收到设备b发送来的确认报文,则重新向设备b发送命令报文,以此来保证通信之间的稳定性。船舶通信报文结构如图1所示,船舶通信udp报文主要由udp报文头和udp数据两部分组成。headdata1,headdata2……headdatan代表报文头中的信息字段,包括发方ip、发方端口号、目标ip、目标端口号及报文长度等信息。udp数据是真正需要传递的数据信息,udp数据的前四个字节为报文id,报文id可以唯一确定一条报文。对报文进行解析时,结合报文id即可根据这条报文所定义的数据字段对接收的数据进行解析。data1,data2……datan代表报文中的数据字段,数据字段可由使用者自行进行定义。报文数据字段规范化定义如表1所示,报文数据字段根据需要对它的数据进行了规范化定义,以此来保证报文配置模块可以满足所有报文的定义要求。其中字段名称、字段类型和长度是必填项,其他的数据根据字段类型需要填写。常见的字段类型有整数型、小数型、枚举型、字符串型和循环型等。整数型有最大值和最小值要求,小数型要确定其精度,枚举型需要确定每一解析值的准确含义,循环型需要知道详细的循环解析次数。起始位数和终止位数则是根据每个数据字段在该条报文中的位置由报文配置模块计算所得,确定了起始位数和终止位数可以快速确定这一字段在该条报文中的位置,由此获得指定数据。这样的优势在于不用循环解析出所有数据,便可以对报文数据进行快速提取和实时过滤。表1报文数据字段规范化定义数据特性含义name字段名称type字段类型beginindex起始位数endindex终止位数length长度precision精度max最大值min最小值bitenum枚举值(2)配置流程对传统报文配置需要专业化人员对数据库文件进行配置带来的通用性差的特点。本文在进行报文配置时,设计了报文配置模块,提供良好的操作界面,用户在填写指定信息后,该模块便可以将所有的数据字段信息写入数据库中。报文配置模块在windows平台下采用c#语言开发,结合c#中的dev界面插件可以给用户提供一个非常直观的编辑界面。使用者可根据需要对报文的数据字段进行添加和修改操作,该模块为报文的动态解析和数据的实时过滤提供服务。报文配置模块的具体工作流程如图2所示。1)启动报文配置模块,根据报文的唯一标识报文id从数据库中取出该条报文下的所有数据字段信息,并根据数字字段的先后顺序以表格的形式显示。2)若想要添加数据字段,点击数据字段添加按钮,确定字段类型并填写该字段类型需要的字段信息完成数据字段的添加。完成添加后,模块会根据已知数据字段的总长度和新添加的数据字段的长度来计算出新添加的数据字段的起始位数和终止位数并显示在数据字段表格中。3)若想要修改已添加数据字段的信息,选中待修改数据字段并点击修改按钮,根据数据字段的类型重新填写需要的字段信息。完成修改后,模块会根据每一条数据字段的长度重新计算待修改数据字段之后的每一条数据字段的起始位数和终止位数,并对待修改数据字段的信息进行刷新,显示在数据字段表格中。4)若想要修改已添加数据字段的顺序,选中待修改数据字段并点击上移或下移按钮。模块会对包含当前操作的数据字段之后的每一个数据字段重新计算其起始位数和终止位数,并显示在数据字段表格中。5)点击完成按钮结束对当前报文数据字段的配置并保存,模块根据最终数据字段表格显示的内容对数据库进行更改。(3)报文加密国家密码局在2010年先后提出具有我国自主知识产权的安全加密算法,如表2所示。这些算法具有良好的运算性能和安全指数,有望成为主流的算法广泛活跃于未来的商业活动中。表2国产加密算法名称类型密钥/分组长度(位)sm1分组密码算法128sm2椭圆曲线公钥密码算法256(推荐)sm3杂凑算法256sm4分组加密算法128sm7对称加密算法128sm9非对称加密算法\在本项目中,采用sm4算法进行关键数据的加解密,使用sm2算法中的密钥协商模块进行通信数据加密密钥的协商,在密钥协商中,需要对认证双方的信息进行摘要计算,此部分采用sm3算法。(a)sm4算法sm4算法是一种分组加密算法,该算法具有计算参数少、运算速度快、安全性高的特点,适合为要求传输数据长度短、执行效率高的系统提供高等级的安全性,同时本算法使用128位密钥进行轮密钥数据加密,足以保证数据的安全。在本发明中,加密数据调用的关键方法及描述如表3所示。表3sm4算法外部接口函数(b)sm3摘要算法sm3算法又称为杂凑算法,能够安全的对数据信息进行摘要处理,适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。在本发明中,使用sm3算法对通信双方的信息进行摘要处理,作为信息摘要模块在sm2中被使用。本模块将算法封装成三个模块接口,接受调用函数的调用请求,读取输入参数,并设置摘要信息参数,作为指针方式返回,使用灵活方便。具体算法实现和接口描述如表4所示。表4sm3算法外部接口函数方法名称返回类型方法描述sm3_init(void)void初始化参数和环境sm3_update(byte*,dword)void对message进行摘要计算sm3_final_byte(byte*)void以字节方式存储摘要结果(c)sm2密钥协商算法完整的sm2算法能实现数据的加解密、密钥协商、数字签名和签名认证,且安全级别高,占用资源少,能够广泛应用于现代商业活动中的数据的加解密部分。本发明基于openssl大数库构造椭圆曲线系,实现sm2的密钥协商部分,完成通信数据加解密的密钥协商,且使用随机数进行动态密码生成处理,使得数据通道加密更为安全。sm2算法具体实现及接口描述如表5所示。s2报文解析方法由于船舶通信系统中报文数目繁多且每条报文中的数据字段较多的特点,本文采用sqlite数据库对所有的报文以及报文中的数据字段进行记录。使用这种轻型的数据库可以极大的减少程序中的资源占用,相比于其他的数据库具有更快的处理速度,同时还有官方提供的odbc接口便于开发。(1)数据库设计报文配置以及报文解析所用到的数据库总体设计如图3所示。表2至表4分别列出数据库中的每张表中的具体数据及含义。报文表如表2所示,报文id作为报文的唯一标识,为该表主键。报文名称和长度为必填项,为每一条报文的基本信息。ip地址和端口号作为选填项,可用于验证报文发送的正确性。表2protocol报文表字段表如表3所示,字段在该报文中的顺序id作为字段数据的唯一标识,为该表主键。报文id为外键,用于确定该条数据字段所对应的报文。字段名称、字段数据类型、字段长度、字段在报文数据中的起始和终止位置为必填项,是每一个数据字段的基本信息。数据数值精度、最大值、最小值和重复次数作为选填项,根据数据类型的需要进行填写。表3field字段表枚举表如表4所示,枚举值id作为枚举值的唯一标识,为该表主键。报文id和字段顺序id作为外键,用于确定该枚举值所对应的报文中的数据字段位置。枚举值和枚举值所对应的解释为必填项。表4enum枚举表(2)解析流程通过报文配置模块配置后,可对已配置好的所有报文进行解析。解析的具体流程如图4所示。1)利用winpcap对数据包进行获取,获取的报文放入报文缓存中。若报文缓存不为空,则取出缓存中的第一条报文进行解析。2)从udp头解析出报文的长度,再从udp头结尾处向右移动4位解析出报文的唯一标识报文id。根据报文id,从报文表中找到该条报文的具体内容。若从报文库中找不到该条报文id或报文的实际长度与报文配置的长度不符,则报出相关错误。3)通过报文id从数据字段表中找到该条报文下的所有数据字段,根据每个数据字段的起始终止位数和类型以此进行解析。例如某数据字段是补码形式的浮点型,则先从该数据字段表中取出起始位数、终止位数、最大值、最小值和精度。通过起始位数和终止位数,对数据进行拼接,拼接完毕后将补码形式转化为对应的十进制数字,然后与精度值相乘。最后对此结果进行判定,若在最小值和最大值区间内,则继续进行下一数据字段的解析,否则报出相关错误。4)显示解析结果。(3)实时提取过滤在船舶设备开发调试的或维修的过程中,经常会对一个或者多个数据字段进行监控,从而更加精准的判断数据的走向或者以此来排查一些偶发的事故。单靠手动通过解析后的报文对某些数据字段进行提取或者逐条从中发现问题所在,会消耗大量的时间,极有可能带来一些严重的后果。基于上述报文配置模块,本方法提出一种报文实时提取过滤的方法,可以实时对指定数据进行提取或过滤,便于用户对数据的分析以及异常发现。具体流程如图5所示。1)通过人机交互界面从报文数据库中选择需要提取或过滤的报文和其中的数据字段。若需要以某一个条件对数据字段进行过滤,还需要设置此字段的过滤条件,例如这个数据大于某值等。2)若报文缓存不为空,则取出缓存中的第一条报文进行解析。3)从udp头解析出报文的长度,再从udp头结尾处向右移动4位解析出报文的唯一标识报文id。若该报文id未被选择,则不进行任何解析操作。否则,根据报文id,从报文表中找到该条报文的具体内容。若从报文库中找不到该条报文id或报文的实际长度与报文配置的长度不符,则报出相关错误。4)通过报文id从数据字段表中找到该条报文下所选择需要提取或过滤的数据字段,根据这些数据字段的起始终止位数直接定位到对应数据,并进行解析。5)若进行提取操作,则显示解析结果,并将所选待提取的数据字段进行io输出。6)若进行过滤操作,则根据解析结果与过滤条件进行判定。满足条件则显示这条解析结果,不满足条件则不进行显示。附图说明图1船舶通信报文结构。图2报文配置模块流程图。图3数据库的总体设计。图4报文解析流程图。图5报文实时提取过滤流程图。具体实施方式为了确保动态配置和实时解析过滤方法的实用性,根据实际情况模拟了一个测试坏境,并在此环境中分别对实时解析,过滤和提取三个功能进行测试。上述测试环境中,硬件部分包括3台计算机,10个子设备,1个交换机。三台电脑中,一台作为整个系统的控制计算机,可对所有的子设备进行控制;1台作为报文模拟发送计算机,持续模拟发送带有数据的报文;1台作为解析计算机,有上述报文报文配置模块,报文解析模块以及报文提取过滤模块。所有设备间都使用以太网进行连接,所有的设备和电脑都通过交换机连接到同一局域网下。实验过程如下:1)启动报文动态配置模块,对所有实验中用到的报文进行配置。实验中用到的报文分为两种,一种为船舶设备每隔一段时间给解析计算机发送的设备状态报文,另一种为报文模拟发送计算机模拟发送的带有很多数据信息的报文,报文中的数据可任意进行设置。2)通过控制计算机启动整个实验的通信环境。船舶设备的状态报文每秒向解析计算机发送2条。报文模拟计算机模拟发送100条带有数据的报文,每秒向解析计算机发送50条,且这些报文中的数据自行定义便于过滤以及检测。3)启动报文解析模块,捕获100000条数据报文。4)设置过滤条件,启动报文过滤模块,捕获100000条数据报文。5)设计提取条件,启动报文提取模块,捕获100000条数据报文。性能测试指标如表5所示。表5性能测试指标性能指标每条报文处理时间60-70μs吞吐量14200-16600p/s每秒处理报文数5020包捕获率100%过滤正确率100%提取准确率100%从实验中可以看出,对于单条报文的处理时间远小于1ms,完全可以满足船舶通信系统的实时解析的需求。船舶系统中的子设备大多以每秒2条至50条的频率进行通信,实验中模拟100个设备以每秒50条的频率进行通信,包捕获率为100%,说明解析模块工作稳定。通过对过滤功能和提取功能的实验,其正确率和准确率均为100%,说明这两个模块可以实时地对数据进行解析以及提取或过滤操作,保证提取或过滤后的结果的准确性。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1