基于安全协议的网络拆包和组包方法与流程

文档序号:15567370发布日期:2018-09-29 03:39阅读:819来源:国知局
本发明涉及网络通信
技术领域
,尤其涉及用于轨道交通信号系统的网络拆包和组包方法。
背景技术
:在铁路信号领域,广泛应用了基于udp(用户数据报协议)/ip(网协)协议的网络通信,由于osi(开放式系统互连)协议在数据链路层以太网物理特性的限制,当单个数据包大于1472个字节时,将会在ip层进行分包,并在对端的ip层进行组包,但udp协议是不可靠传输协议,当分片丢失导致重组失败,会导致udp数据被丢弃,进而影响应用层对数据的使用。技术实现要素:本发明的目的在于提供一种基于安全协议的网络拆包和组包方法,使得单个数据包的长度限制在1472个字节内,从而避免了在ip层进行拆包失败造成的数据丢失。实现上述目的的技术方案是:一种基于安全协议的网络拆包和组包方法,包括:步骤一,对接收自应用层的数据进行判断,对大于udp单包最大值的数据进行拆包;步骤二,假设数据总数为k,拆解后包的个数为n,单个包的大小为ks,依次判断:k/n是否大于单包最大值,ks×n是否等于k,k-ks×(n-1)是否大于或等于单包最大值,k-ks×(n-1)是否大于等于单包最大值,根据判断结果进行拆包;步骤三,拆包后,在发送的每一包数据里加载报头,该报头包括:拆解包的总数量、当前包的序列号、拆解包的发送序列号(tsn)、拆解包的接收序列号(rsn)和组合包的循环冗余校验码(crc);步骤四,对接收数据包依次进行crc校验、时间校验和数据有效性校验,校验通过后存入圆形缓存区;步骤五,检查圆形缓存区内数据是否符合组包条件,符合后,开启定时器,在规定时间内组包,若超过规定时间,丢弃整个包。优选的,所述的步骤二包括:判断k/n是否大于单包最大值,若是,n=n+1并重新开始本次判断;若否,进入下一步;判断ks×n是否等于k,若是,拆包成功;若否,进入下一步;判断k-ks×(n-1)是否大于或等于单包最大值,若是,求余,拆包成功;若否,进入下一步;判断k-ks×(n-1)是否大于等于单包最大值,若是,n=n+1并重新判断k/n是否大于单包最大值;若否,求余,拆包成功。优选的,所述的圆形缓存区包括:数据头的位置、数据尾的位置、buffer的大小和拆分包的数据。优选的,所述的步骤五中,所述的组包条件包括:环形buffer不为空,当前数据与环形buffer中已经缓存数据不冗余,则认为当前数据不冗余。优选的,所述的步骤五中,所述的规定时间内组包,包括:根据应用层数据中的tsn/rsn选取同一个周期内组合的若干包数据中最新的数据包;根据每个拆分包的序号进行选择排序,组合成完整的一包数据;组包结束后,对整个包的crc进行一次计算,如果和单个包中记录的crc数据不一致,整个包将会丢弃。本发明的有益效果是:本发明采取采用本地时钟,远程时钟,组合包的序列号,crc(循环冗余校验码)校验等安全手段对拆分包的数据安全进行保护,有效提高安全。同时,可根据配置进行灵活定义单个拆分包的大小和拆分包的个数,不受osi网络协议的限制。组合数据包时采用圆形缓存技术,提高数据读取效率。附图说明图1是本发明的基于安全协议的网络拆包和组包方法的流程图;图2是本发明中拆包的流程图;图3是本发明中组包的流程图。具体实施方式下面将结合附图对本发明作进一步说明。以两套互为冗余的移动控制单元(mcu)为例,一套mcu为主用,另一套为备用。两套之间采用udp/ip安全通信。请参阅图1,本发明的基于安全协议的网络拆包和组包方法,包括下列步骤:步骤一,对接收自应用层的数据进行判断,对大于udp单包最大值的数据进行拆包。单包最大值指1472个字节。步骤二,为了平衡网络负载,采用平均数算法计算网络数据包的大小。假设数据总数为k,拆解后包的个数为n,单个包的大小为ks,依次判断:k/n是否大于单包最大值,ks×n是否等于k,k-ks×(n-1)是否大于或等于单包最大值,k-ks×(n-1)是否大于等于单包最大值,根据判断结果进行拆包。具体地,如图2所示,包括下列步骤:判断k/n是否大于单包最大值,若是,n=n+1并重新开始本次判断;若否,进入下一步;判断ks×n是否等于k,若是,拆包成功;若否,进入下一步;判断k-ks×(n-1)是否大于或等于单包最大值,若是,求余,拆包成功;若否,进入下一步;判断k-ks×(n-1)是否大于等于单包最大值,若是,n=n+1并重新判断k/n是否大于单包最大值;若否,求余,拆包成功。如此,得以保证k=ks×n或者k=ks×(n-1)+kp;其中kp=ks-1;这样可以保证在拆解最小包数量的情况下,每包数据的大小误差不超过1个字节;当网络数据流量很大时,可以很好的均衡网络负载。步骤三,拆包后,在发送的每一包数据里加载报头,该报头包括:拆解包的总数量、当前包的序列号、拆解包的tsn、拆解包的rsn和组合包的crc。如下表1所示:表1其中,udp数据格式如下表2所示:域名城字节数接口类型2报文类型1接收方属性2接收方id2发送方属性2发送方id2信息传输的时间戳14接收方报文序列号2发送方报文序列号2远程通讯时钟4本地通讯时钟4长度2应用数据域0-1400第一crc4第二crc4表2udp协议的报文头,应用程序会提供目的端口的ip地址和端口号,由udp层打包进报文头中再传给网络层。udp协议使用报头中的校验码来保证数据的安全。校验码首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此udp协议可以检测是否出错。设备控制单元的有效性包括时间序列和传输内容两个方面,时间序列上时效性保证过时的命令不会被执行,也不会接收到过时的设备状态,而使移动控制单元得出错误授权和发出错误命令。传输内容上通过正确性来保证设备控制单元在和与其对应的正确的单元在对话,并接收到了无错误的命令,避免执行了错误的命令。设备控制单元与其他子系统之间的通信的时效性通过报文序列号和通讯时钟两个方面来保证。报文序列号是对报文按序列进行编号,以标记报文的连续性。发送报文的序列号在每次新报文中都会进行加一更新,接收报文的序列号是对发送序列号的复制,作为发送序列号的接收确认。通讯时钟分为本地时钟和远程时钟,本地时钟由自身维护,远程时钟由通讯对象维护,是一种探测报文之间通讯刷新延时的机制,不受两个通讯子系统之间的本地时钟不同步的影响。udp数据报文的正确性通过验证通讯双方的身份,发送报文的类型及对报文数据域内容的校验进行验证。设备控制单元针对udp报文的时效性和正确性来对数据有效性进行验证,若时效性查过允许范围,或报文正确性异常,则丢弃该报文,并在系统日志中记录。序列号允许差值是根据不同接口来设置的,通过接口之间的通讯超时时间和巡检率来计算的,即序列号允许差值=通讯超时时间/巡检率。若接受报文序列号不在允许差值内,则设备控制单元将丢弃该报文。若发送报文序列号不在允许差值内,则与设备控制单元通信的子系统将丢弃该报文。设备控制单元在接收到的报文中能解析出两个通讯时钟,一是对方的本地时钟,一是自身的远程时钟,对方的本地时钟用于更新发送给对方的远程时钟;而自身的远程时钟是用于计算设备控制单元的信息刷新延迟的,即接收到报文时的自身本地时钟减去对方发来的自身远程时钟,即为设备控制单元发出上一条信息与本次接收到信息之间的信息延迟,若该信息延迟过大,若延迟超过3s,则设备控制单元将认为通讯丢失,丢弃该条报文。在发送出去的报文中,设备控制单元有一自身的本地时钟,也有其维护的对方的远程时钟。当通讯对象接收到该报文时,也会与设备控制单元一样进行信息延迟的检查,若延迟过大,则认为通讯丢失,将该报文丢弃。接口设备身份识别由两部分构成:设备的属性和设备id,通俗的说,即设备是什么和设备是哪一个。发送方属性指定了报文由什么类型的子系统发出,不同的子系统由1-99之间的不同数字来表示。与设备控制单元通信的子系统是移动控制单元,其值为“2”。若设备控制单元接收到的报文的发送方属性不是“2”,则丢弃该报文。接收方属性指定了报文由什么类型的子系统发出,不同的子系统由1-99之间的不同数字来表示。设备控制单元的值为“9”。若与设备控制单元通信的子系统接收到的报文的接收方属性不是“9”,则丢弃该报文。每台设备在开机启动时都应能探测到自己的id,在运行过程中也持续进行检测和比较,并在通信时将该id写入通信报文中:若子系统为发送方,则写入发送方id中;若子系统为接收方,则检查报文的接收方id与自身id是否匹配,若不匹配,则丢弃该报文。接口类型定义的是该接口是哪两个子系统之间的接口,不同的接口由一特定的数值(介于0-99之间的整数)来区分,对应着特定的接收方和发送方属性。在cbtc2.0中,与设备控制单元接口的只有移动控制单元,它们之间的接口对应的数值为“9”,对应的发送方和接收方属性为设备控制单元的“9”和移动控制单元的“2”。若接口类型与设备控制单元自身的属性,及发送方或接收方的属性不符,则系统将拒绝此报文。报文类型域用于标识该条报文的作用,指示通信的子系统之间是要建立通讯,维持通讯,从冗余单元接管通讯,重新同步时钟还是对上述报文的回应。0-9分别代表了不同的报文类型:0=广播报文;1=请求通信;2=握手;3=握手确认;4=轮询;5=应答;6=切换;7=切换确认;8=同步请求;9=同步确认。若该域的值不在上述定义的范围内,设备控制单元将会丢弃该报文。应用数据域长度标明了应用数据域的长度,便于接收到报文的子系统进行解析,并且udp报文的数据域有一定的长度限制,即1400字节。若该长度超过了1400字节,则设备控制单元会丢弃该报文。循环冗余校验域由两部分组成,第一循环冗余校验码和第二循环冗余校验码。crc校验码具有数据传输检错功能,其特征是信息字段和校验字段的长度可以任意选定。在发送方利用生成多项式对信息进行模二除生成校验码,而在数据的接收方利用生成多项式对收到的编码多项式做模二除检测。若接收方计算得出的crc校验码与传输的crc校验码不一致,接收方将拒绝该报文。在cbtc2.0的设备控制单元和移动控制单元的约定中,第一校验码是对从接口类型至应用数据域的最后一位进行运算得出的。若第一校验码不一致,则设备控制单元即拒绝该报文。在cbtc2.0的设备控制单元和移动控制单元的约定中,第二校验码是对从接口类型至第一校验码的所有数据进行运算得出的,对数据的正确性有双重保证。若第二校验码不一致,则设备控制单元也会拒绝该报文。当udp数据有效性验证失败时,设备控制单元将拒绝或丢弃该报文,并记录在系统日志中。下面以应用数据域长度错误和校验码错误为例进行说明。当数据长度超限时,设备控制单元拒绝该报文;当crc校验码域的第一校验码或第二校验码出错时,设备控制单元均会拒绝该报文,在系统日志中进行查看。步骤四,对接收数据包依次进行crc校验、时间校验和数据有效性校验,校验通过后存入圆形缓存区,否则丢弃。圆形缓存区包括:数据头的位置、数据尾的位置、buffer(缓冲器)的大小和拆分包的数据。数据头的位置主要用来记录当前写入buffer的index;数据尾主要记录当前读取buffer的index;buffer的大小用来记录当前圆形buffer中的数据个数,从而可以判断出buffer是否为空或者满。步骤五,为了正确的组包,采用了两套tsn/rsn,即udp/ip层协议中的tsn/rsn和应用层数据中的tsn/rsn;其中,udp/ip协议中的tsn/rsn主要记录每个拆分包的顺序;应用层数据中的tsn/rsn用来记录组合包的顺序。如图3所示,检查圆形缓存区内数据是否符合组包条件,组包条件是:环形buffer不为空,当前数据与环形buffer中已经缓存数据不冗余,则认为当前数据不冗余。不符合则不组包。符合后,当收到任何一包拆分包后,开启定时器,在规定时间内组包,即:根据应用层数据中的tsn/rsn选取同一个周期内组合的若干包数据中最新的数据包,根据每个拆分包的序号进行选择排序,组合成完整的一包数据,若超过规定时间,丢弃整个包。组包结束后,对整个包的crc进行一次计算,如果和单个包中记录的crc数据不一致,整个包将会丢弃。以上实施例仅供说明本发明之用,而非对本发明的限制,有关
技术领域
的技术人员,在不脱离本发明的精神和范围的情况下,还可以作出各种变换或变型,因此所有等同的技术方案也应该属于本发明的范畴,应由各权利要求所限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1