CN112887054A - 一种基于长度转义的数据流封包方法、解包方法及系统 - Google Patents
一种基于长度转义的数据流封包方法、解包方法及系统 Download PDFInfo
- Publication number
- CN112887054A CN112887054A CN201911205296.XA CN201911205296A CN112887054A CN 112887054 A CN112887054 A CN 112887054A CN 201911205296 A CN201911205296 A CN 201911205296A CN 112887054 A CN112887054 A CN 112887054A
- Authority
- CN
- China
- Prior art keywords
- data
- length
- tail
- data segment
- data stream
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 77
- 238000004806 packaging method and process Methods 0.000 title description 11
- 238000005538 encapsulation Methods 0.000 claims description 2
- 230000006854 communication Effects 0.000 abstract description 30
- 238000004891 communication Methods 0.000 abstract description 28
- 238000012856 packing Methods 0.000 abstract description 10
- 230000002159 abnormal effect Effects 0.000 abstract description 9
- 238000012937 correction Methods 0.000 abstract description 5
- 230000005540 biological transmission Effects 0.000 description 12
- 238000012545 processing Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0006—Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the transmission format
- H04L1/0007—Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the transmission format by modifying the frame length
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/004—Arrangements for detecting or preventing errors in the information received by using forward error control
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0078—Avoidance of errors by organising the transmitted data in a format specifically designed to deal with errors, e.g. location
- H04L1/0079—Formats for control data
- H04L1/0082—Formats for control data fields explicitly indicating existence of error in data being transmitted, e.g. so that downstream stations can avoid decoding erroneous packet; relays
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0078—Avoidance of errors by organising the transmitted data in a format specifically designed to deal with errors, e.g. location
- H04L1/0083—Formatting with frames or packets; Protocol or part of protocol for error control
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2212/00—Encapsulation of packets
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Quality & Reliability (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种基于长度转义的数据流封包方法、解包方法及系统,封包方法包括:读取发送数据流中预设的截断符;在所述截断符处进行截断,将所述数据流拆分成一个或多个数据段;每个所述数据段中不包括所述截断符;在每个所述数据段的段头添加长度字段;所述长度字段用于标识各数据段长度以及数据段是否为尾部数据段;顺序组合添加了长度字段的各数据段以形成编码数据包;在所述编码数据包头部和尾部分别添加预设的截断符。通过设计头尾边界并结合长度转义法,使得流式数据通信过程中能够对消息边界快速解码,有效提高通信效率,降低通信双方的通信应用难度,同时能够进行纠错和异常识别。
Description
技术领域
本发明涉及通信数据处理技术领域,特别是一种基于长度转义的数据流封包方法、解包方法及系统。
背景技术
在TCP、串口通信等协议数据流传输过程中,由于底层采用类似nagle等算法机制来确保传输效率,数据传输过程存在大包分成小包、小包拼成大包多次传输的现象,导致在接收过程中不保留数据边界的现象出现。因此,通信双方需能在应用层对发、收数据进行边界识别,还原数据。一般识别边界的方法有固定数据帧长度、动态帧长度标识边界符以及固定帧头尾标识方法。
近年来,随着4G/5G网络及大数据的发展,使用网络通信进行传输的数据量越来越大,通信处理消耗给服务器的压力也越来越大,同时系统对通信数据处理的可靠性、处理效率、错帧识别率的要求也越来越高。经研究发现一般通信边界识别方法在车联网大数据采集处理上存在一些弊端,例如,固定帧长度传输,当帧长度不足时需填充固定数据,而当数据长度超过固定帧长度时需在应用层定义分包和拼包机制来满足应用要求,因此存在包负载率不高以及应用层实现便利性问题。而采用动态长度帧头标识,可以较好的解决帧负载率问题,但是当网络端口是对外开放的服务端口时,容易导致接收一些无效数据,或者当网络产生异常数据流时,不能很好的识别异常数据,从而导致解包效率低、错包使用等问题。而采用头尾帧边界方法,可以很好识别出合法格式的帧,但是存在数据包内容冲突转义的问题,需要遍历解决,从而在数据量很大的时候影响系统解包效能,增加数据长度等问题。
发明内容
本发明的主要目的在于提出一种基于长度转义的数据流封包方法、解包方法及系统,通过设计头尾边界并结合长度转义法,使得流式数据通信过程中能够对消息边界快速解码,有效提高通信效率,降低通信双方的通信应用难度,同时能够进行纠错和异常识别。
本发明采用如下技术方案:
一方面,本发明一种基于长度转义的数据流封包方法,包括:
读取发送数据流中预设的截断符;
在所述截断符处进行截断,将所述数据流拆分成一个或多个数据段;每个所述数据段中不包括所述截断符;
在每个所述数据段的段头添加长度字段;所述长度字段用于标识各数据段长度以及数据段是否为尾部数据段;
顺序组合添加了长度字段的各数据段以形成编码数据包;
在所述编码数据包头部和尾部分别添加预设的截断符。
优选的,所述数据流封包方法还包括:
如果在所述数据流尾部读取到所述截断符,增加包括第一预设值的长度字段作为尾部数据段。
优选的,所述长度字段标识的数据段长度等于对应数据段的数据长度加1。
优选的,根据数据段长度,所述长度字段包括一个或多个字节;
当所述长度字段包括一个字节时,该一个字节用于标识数据段长度以及数据段是否为尾部数据段;
当所述长度字段包括多个字节时,第一个字节的最高位用于标识数据段是否为尾部数据段,第一个字节的其他位之和等于第二预设值;其他字节的最高位设置为1,其他字节的其他位组合后用于标识数据段长度。
第二方面,本发明一种基于长度转义的数据流封包系统,包括:
截断符读取模块,用于读取数据流中预设的截断符;
数据流截断模块,用于在所述截断符处进行截断,将所述数据流拆分成一个或多个数据段;每个所述数据段中不包括所述截断符;
数据段长度添加模块,用于在每个所述数据段的段头添加长度字段;所述长度字段用于标识各数据段长度以及数据段是否为尾部数据段;
数据流组合模块,用于顺序组合添加了长度字段的各数据段以形成编码数据包;
首尾截断符添加模块,用于在所述编码数据包头部和尾部分别添加预设的截断符。
第三方面,本发明一种基于长度转义的数据流解包方法,包括:
读取接收数据流中第一个预设的截断符作为数据流边界头标识;
读取所述边界头标识之后的数据流中的长度字段;根据所述长度字段读取对应的数据段;如果根据所述长度字段判断出所述数据段为非尾部数据,在对应的数据段尾部增加所述截断符;如果根据所述长度字段判断出对应数据段为尾部数据段,读取尾部数据段之后的截断符作为数据流边界尾标识;
删除数据流中的边界头标识、长度字段及边界尾标识,获得实际的发送数据流。
优选的,所述数据流封包方法还包括:
如果所述长度字段等于第一预设值,读取该长度字段之后的截断符作为数据流边界尾标识,删除该第一预设值。
优选的,所述数据流封包方法还包括:
如果所述长度字段包括一个字节,且字节值等于截断符,表示数据字段非法,丢弃已读出的错误数据,重新识别后续数据;
如果所述长度字段包括多个字节,且第一个字节值等于截断符,或者,其他字节的最高位不等于1,表示数据字段非法,丢弃已读出的错误数据,重新识别后续数据。
优选的,所述数据流封包方法还包括:
如果根据所述长度字段判断出对应数据段为尾部数据段,且尾部数据段之后的数据不为截断符,表示数据字段非法,丢弃已读出的错误数据,重新识别后续数据。
第四方面,本发明一种基于长度转义的数据流解包系统,包括:
数据流边界头读取模块,用于读取接收数据流中第一个预设的截断符作为数据流边界头标识;
数据段及数据流边界尾读取模块,用于读取所述边界头标识之后的数据流中的长度字段;根据所述长度字段读取对应的数据段;如果根据所述长度字段判断出所述数据段为非尾部数据,在对应的数据段尾部增加所述截断符;如果根据所述长度字段判断出对应数据段为尾部数据段,读取尾部数据段之后的截断符作为数据流边界尾标识;
删除模块,用于删除数据流中的边界头标识、长度字段及边界尾标识,获得实际的发送数据流。
与现有技术相比,本发明的有益效果如下:
本发明通过设计头尾边界并结合长度转义法,能够为流式数据通信提供一种消息边界快速解码、具备纠错、异常识别的高效方法;解决了采用一般的固定数据包长度、或者动态数据包头长度编解码方法存在的错误纠正效率低的问题,解决了采用一般边界字符替换转义法,遍历转义解码时在大数据通信场景下影响解包性能的问题,由于采用了长度转义方法,解决了数据全文遍历的问题,明显提升了效率;而引入了新的数据头尾标志,可以很好的克服数据固定长度和动态数据包长度边界编解包方法错误误码率识别纠错的问题,同时这种头尾边界基于长度转义法的基础上实现,避免了内容包出现与头尾边界符的冲突问题,而又比一般边界字符替换转义法解包效率高,特别适合当前物联网场景下发送少接收多的场景使用。
附图说明
图1为本发明的基于长度转义的数据流封包方法的流程图;
图2为本发明基于长度转义的数据流封包方法的封包示意图;
图3为本发明的基于长度转义的数据流封包系统的结构框图;
图4为本发明的基于长度转义的数据流解包方法的流程图;
图5为本发明基于长度转义的数据流解包方法的详细流程图;
图6为本发明的基于长度转义的数据流解包系统的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步的详细描述。
参见图1所示,一方面,本发明一种基于长度转义的数据流封包方法,包括:
S101,读取发送数据流中预设的截断符;
S102,在所述截断符处进行截断,根据所述截断符的个数或位置将所述数据流拆分成一个或多个数据段;每个所述数据段中不包括所述截断符;
S103,在每个所述数据段的段头添加长度字段;所述长度字段用于标识各数据段长度以及数据段是否为尾部数据段;
S104,顺序组合添加了长度字段的各数据段以形成编码数据包;
S105,在所述编码数据包头部和尾部分别添加预设的截断符。
参见图2(a)所示,本发明实施例以截断符为0x00为例,一种基于长度转义的数据流封包方法,具体包括:
(a)顺序遍历发送数据流内是否含有预设的截断符(本实施例中,截断符设置为0x00),如果碰到截断符0x00则对数据进行截断,并取出截断符0x00之前的数据形成中间数据段,记录该中间数据段的长度(长度用长度字段表示,长度字段值=去掉0x00部分的数据段长度+1),在中间数据段头加上该数据段的长度字段。
(b)继续向前遍历数据包内容,重复(a)步骤,直到整个数据包结束。如果数据包遍历到最后一位是截断符0x00,则用第一预设值(本实施例中,第一预设值设置为0x81)替换该截断符0x00,形成尾部数据段。如果最后一位不是截断符0x00,则在尾部数据段段头用长度字段记录最后的数据长度(数据段长度+1)。
需要说明的是,如果在所述数据流尾部读取到所述截断符为两个或多个连续截断符,则需增加包括第一预设值的长度字段作为连续截断符中间的空数据段。
(c)顺序组合各个数据段的内容,即为编码后的数据包内容。
(d)编码结束在数据包头尾加上0x00,形成完整编码后的数据报文,返回给外层程序,最终把数据提交给目标数据传输通道发送出去。
进一步的,根据数据段长度,所述长度字段包括一个或多个字节;
当所述长度字段包括一个字节时,该一个字节用于标识数据段长度以及数据段是否为尾部数据段;
当所述长度字段包括多个字节时,第一个字节的最高位用于标识数据段是否为尾部数据段,第一个字节的其他位之和等于第二预设值;其他字节的最高位设置为1,其他字节的其他位组合后用于标识数据段长度。
具体的,长度字段的组成如下表1。
表1
其中,字节1的最高位b7标识是否结束帧,其中,最高位b7等于1表示结束帧(尾部数据段),最高位b7等于0表示中间转义帧(中间数据段)。字节1的b0-b6位表示长度标识,当长度小于126时长度字段用1个字节组成,表示范围1~125。当数据长度在126~16256时,长度用三个字节组成,此时字节1长度字段值等于126(最高位b7等于0,b0-b6位的十进制值等于126),数据长度在16257~2080768时,长度用4个字节组成,此时字节1长度部分值为127(最高位b7等于0,b0-b6位的十进制值等于127)。由于数据长度部分值必然是大于0的值,且长度扩展字段高位固定为1,因此处理过后数据包中不存在0x00的数据。
具体的,数据段长度值的存储方式包括:长度值小于126时用字节1表示。126<=长度值<=16256,用字节1+字节2+字节3表示,此时字节1(b0~6)=126,长度值的<128部分在字节3,长度值>=128部分在字节2。16257<=长度值<=2080768,用字节1+字节2+字节3+字节4表示,此时字节1(b0~6)=127,长度值的<128部分在字节4,128=<长度值<16256部分在字节3,16256=<长度值部分在字节2。
需要说明的是,尽管本发明实施例中的截断符设置为0x00,但其他字符值如0xFF等都是可以的,只要使得编码后的数据包内容中不包括该截断符,并且封包时在数据包头尾加上该截断符即可。具体的,如果截断符不是0时,由于对应数据段的数据长度加1后可能等于截断符,因此,使用长度+1不能确保长度字段字节中不出现截断符字符,而进行其他特殊处理,如截断符等于0xFF时,使长度字段标识的数据段长度不等于截断符,这时长度字段+1也没有办法规避和截断符冲突,但是可以规定0xFF在长度字段中不用,因为0xFF是长度字段每字节的最大值,因而可规定长度字节碰到这个数的时候可以直接进位处理,这样就可以避开出现0xFF。当然,也可以采用其他方法进行规避,只要能够使得编码后的数据包长度字段内容中不包括该截断符即可。截断符为其他字符时也可以进行对应的处理,具体的处理方式本发明实施例不做限制。
进一步的,参见图2(b)所示,考虑串口通信等误码率较高的流式数据通信,可以在发送数据流中增加一个字节的校验位(校验位放在数据流头部或者放在数据流尾部位置都可以),具体可以采用不带进位累计和的计算方法对要发送的数据进行不带进位累加,接收方进行累加校验。中间件接口提供是否启用数据包累加和校验接口。该接口降低了编解码效率,但结合以上异常数据包识别方法使用,可以提供较为严密的错误包过滤方法,提供更为严密的数据包边界识别方法。
参见图3所示,第二方面,本发明一种基于长度转义的数据流封包系统,包括:
截断符读取模块201,用于读取数据流中预设的截断符;
数据流截断模块202,用于在所述截断符处进行截断,根据所述截断符的个数或位置将所述数据流拆分成一个或多个数据段;每个所述数据段中不包括所述截断符;
数据段长度添加模块203,用于在每个所述数据段的段头添加长度字段;所述长度字段用于标识各数据段长度以及数据段是否为尾部数据段;
数据流组合模块204,用于顺序组合添加了长度字段的各数据段以形成编码数据包;
首尾截断符添加模块205,用于在所述编码数据包头部和尾部分别添加预设的截断符。
一种基于长度转义的数据流封包系统各模块的具体实现与一种基于长度转义的数据流封包方法相同,本实施例不再重复表述。
参见图4所示,第三方面,本发明一种基于长度转义的数据流解包方法,包括:
S301,读取接收数据流中第一个预设的截断符作为数据流边界头标识;
S302,读取所述边界头标识之后的数据流中的长度字段;根据所述长度字段读取对应的数据段;如果根据所述长度字段判断出所述数据段为非尾部数据,在对应的数据段尾部增加所述截断符;如果根据所述长度字段判断出对应数据段为尾部数据段,读取尾部数据段之后的截断符作为数据流边界尾标识;
S303,删除数据流中的边界头标识、长度字段及边界尾标识,获得实际的发送数据流。
进一步的,所述数据流封包方法还包括:
如果所述长度字段等于第一预设值(如图2(a)中的0x81),读取该长度字段之后的截断符作为数据流边界尾标识,删除该第一预设值。
本实施例中,一种基于长度转义的数据流封包方法和一种基于长度转义的数据流解包方法可以通过中间件实现。消息中间件提供消息发送编码接口和消息接收组包接口。在消息中间件内部对发送接口进行数据编码的具体实现,编码通过立即返回编码完后的数据给外层。在消息中间件内部实现消息数据接收接口,通过在中间件内部建立多通道数据缓冲区,并对各个缓冲区数据解码组包后异步返回消息报文数据给外层,消息解码组包采用异步回调的方法返回数据给外层。
数据流解包时,中间件通过接口接收外部传输的通道数据,如果是新的通道来源数据,首先在消息中间件中为数据接收通道定义好对应的全局缓冲区inBuffer[i](表示第i通道缓冲区),对收到的数据进行缓存到对应通道inBuffer[i]缓冲区,并初始化数据包状态为初始状态,包括边界头状态(ps[i])、接收数据长度(pl[i])、数据包接收状态(pf[i])、边界尾状态(pe[i])等;并建立输出消息报文缓冲区outBuffer[i][50](表示第i个输出数据区,一次解析完最多返回50个数据报),然后对接收到的数据进行边界识别。
参见图5所示,基于上述中间件的实现方式,一种基于长度转义的数据流解包方法的具体实现如下:
(a)接收数据流开始边界识别。如果预设的数据通道还没有识别到数据包边界,则开始判断识别边界0x00(即封包中的截断符)。通过从缓冲区取出逐个字节数据,判断数据是否为0x00,如果是则标识开始边界标识B为true,否则标识当前数据位无效数据,继续读取缓冲数据直到读到0x00为止,把B值置为true。
(b)读取长度字段属性标识(s)(对应字节1)。根据上一步找到开始边界后,如果缓冲区inBuffer[i]内还有数据,则读取后续长度字段字节1,判断读到的字节1值,如果高位7位(b7)为1,表示后续数据段为该消息包的结束帧(尾部数据段),如果高位7位值为0,则表示后续数据段为中间数据段,后续还有数据拼接进来才能形成完整数据报。如果读出紧跟的字段字节1为0x00,标识位异常数据。跳到开始步骤(a)重新识别数据包开始边界。
(c)读取数据长度字段值。读取字节1的低位(0~6)的值(lv),判断lv值,如果lv<126,则把lv值做为后续数据段长度值(sv)。如果lv=126,则表示126<=长度<16256,则读取字节2和字节3数据做为后续数据长度值(sv)。如果lv=127,则表示16256<=长度<2080768,则读取字节2、字节3和字节4数据做为后续数据长度值(sv)。
(d)读取数据段数据,识别完整包输出外部程序。
(d1)如果inBuffer[i]缓冲区数据后面还有sv长度的数据可读,则从inBuffer[i]读出sv值长度的数据,则读取前sv-1长度的数据放到outBuffer[i][j]后面(j从0开始),接收数据长度字段(pl[i])加上sv-1,如果sv-1=0则不读取。
(d2)如果数据属性标识(s)中b7的值为1,判断inBuffer[i]第sv位置的值是否0x00,如果是则表示读到完整的消息包边界尾,并把该通道的B标识为false,E标识true,表示消息中间件识别到完整的数据包,j值加1,然后跳到7步骤继续7~10步骤。
(d3)如果数据属性标识(s)中b7的值为1,且读到的inBuffer[i]第sv位置的值不为0x00,表示该数据段是异常数据,需跳到步骤7的重新识别数据包边界步骤。
(d4)如果数据属性标识位b7的值为0表示该数据段是中间数据段,则在outBuffer[i][j]追加0x00,接收数据长度字段(pl[i])加上1,然后跳到步骤9继续inBuffer[i]后续数据识别。
(d5)如果inBuffer[i]中没有sv长度的数据,消息中间件返回outBuffer[i][0~(j-1)]中j个数据包给外部程序(j>0情况下)。继续等待外部通道数据传输到中间件后再开始识别。
(e)根据外部接口,消息中间件循环步骤(a)~(d)步骤。
进一步的,上述解包过程中,还包括对接收的数据流进行异常识别处理,如下:
(a)如果数据长度字段中出现:字节1=0x00,字节2、字节3、字节4中出现高位b7不为1,则表示数据字段非法,则需要丢弃已读出的错误数据,重新后续数据识别。
(b)如果数据属性标识位b7值为1,则标识后续数据数据段为结束帧,此时如果数据段后面紧跟的字符值不为0x00,则表示数据非法,则需要丢弃已读出的错误数据,重新后续数据识别。
(c)如果一个数据通道识别过程经常出现以上的解码异常现象,则表示数据通道为异常或被攻击的数据通道,则中间通知外部程序断开该数据通道处理。
进一步的,如果发送数据流中增加了校验位(参见图2(b)),则在解包时需要计算校验和,并与发送数据流中的校验位进行比较,如果验证通过,数据合法,否则数据不合法。
参见图6第四方面,本发明一种基于长度转义的数据流解包系统,包括:
数据流边界头读取模块401,用于读取接收数据流中第一个预设的截断符作为数据流边界头标识;
数据段及数据流边界尾读取模块402,用于读取所述边界头标识之后的数据流中的长度字段;根据所述长度字段读取对应的数据段;如果根据所述长度字段判断出所述数据段为非尾部数据,在对应的数据段尾部增加所述截断符;如果根据所述长度字段判断出对应数据段为尾部数据段,读取尾部数据段之后的截断符作为数据流边界尾标识;
删除模块403,用于删除数据流中的边界头标识、长度字段及边界尾标识,获得实际的发送数据流。
一种基于长度转义的数据流解包系统各模块的具体实现与一种基于长度转义的数据流解包方法相同,本实施例不再重复表述。
在实际应用场景中,基于本发明的消息中间件,可以在通信的双方中(如客户端和服务端,互为发送方和接收方)进行调用以配对使用。在发送数据时调用本发明中间件的发送封包接口,传入要封包的数据报内容,中间件返回封包后的数据,然后发送方程序再把封包后的数据发送出去。接收方调用本发明中间件,在通信层收到数据流时,把数据通道识别id、数据流、回调函数接口对象传给中间件的解包接口,中间件可以实时的返回完整的数据报内容,接收方可以直接对中间件返回的报文内容进行解析处理,而不用关心通信双方数据报在通信层传输的边界识别错位问题。例如,在TCP通信中,通过本发明的应用,客户端和服务端可以只需定义数据报内容格式,双方无需定义通信报文识别的消息边界和包的误码识别方法,可以像UDP通信一样实现基于消息报文一样的消息通信。同时由于在消息中间件内部使用了长度转义法,使得解包效率大大提高,可以应用在服务端有大批量并发连接数据处理的场景。此外,在串口串行通信中,在下位机和上位机中使用本发明的中间件,也使得通信双方的编程的复杂度大大下降,解决了串口通信双方误码率导致边界识别效率低、错包使用、解包慢的问题。
最后,还需要说明的是,在本文中,诸如第一、第二、步骤101、步骤102等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种基于长度转义的数据流封包方法,其特征在于,包括:
读取发送数据流中预设的截断符;
在所述截断符处进行截断,将所述数据流拆分成一个或多个数据段;每个所述数据段中不包括所述截断符;
在每个所述数据段的段头添加长度字段;所述长度字段用于标识各数据段长度以及数据段是否为尾部数据段;
顺序组合添加了长度字段的各数据段以形成编码数据包;
在所述编码数据包头部和尾部分别添加预设的截断符。
2.根据权利要求1所述的基于长度转义的数据流封包方法,其特征在于,所述数据流封包方法还包括:
如果在所述数据流尾部读取到所述截断符,增加包括第一预设值的长度字段作为尾部数据段。
3.根据权利要求1所述的基于长度转义的数据流封包方法,其特征在于,所述长度字段标识的数据段长度等于对应数据段的数据长度加1。
4.根据权利要求1所述的基于长度转义的数据流封包方法,其特征在于,根据数据段长度,所述长度字段包括一个或多个字节;
当所述长度字段包括一个字节时,该一个字节用于标识数据段长度以及数据段是否为尾部数据段;
当所述长度字段包括多个字节时,第一个字节的最高位用于标识数据段是否为尾部数据段,第一个字节的其他位之和等于第二预设值;其他字节的最高位设置为1,其他字节的其他位组合后用于标识数据段长度。
5.一种基于长度转义的数据流封包系统,其特征在于,包括:
截断符读取模块,用于读取数据流中预设的截断符;
数据流截断模块,用于在所述截断符处进行截断,将所述数据流拆分成一个或多个数据段;每个所述数据段中不包括所述截断符;
数据段长度添加模块,用于在每个所述数据段的段头添加长度字段;所述长度字段用于标识各数据段长度以及数据段是否为尾部数据段;
数据流组合模块,用于顺序组合添加了长度字段的各数据段以形成编码数据包;
首尾截断符添加模块,用于在所述编码数据包头部和尾部分别添加预设的截断符。
6.一种基于长度转义的数据流解包方法,其特征在于,包括:
读取接收数据流中第一个预设的截断符作为数据流边界头标识;
读取所述边界头标识之后的数据流中的长度字段;根据所述长度字段读取对应的数据段;如果根据所述长度字段判断出所述数据段为非尾部数据,在对应的数据段尾部增加所述截断符;如果根据所述长度字段判断出对应数据段为尾部数据段,读取尾部数据段之后的截断符作为数据流边界尾标识;
删除数据流中的边界头标识、长度字段及边界尾标识,获得实际的发送数据流。
7.根据权利要求6所述的基于长度转义的数据流解包方法,其特征在于,所述数据流封包方法还包括:
如果所述长度字段等于第一预设值,读取该长度字段之后的截断符作为数据流边界尾标识,删除该第一预设值。
8.根据权利要求6所述的基于长度转义的数据流解包方法,其特征在于,所述数据流封包方法还包括:
如果所述长度字段包括一个字节,且字节值等于截断符,表示数据字段非法,丢弃已读出的错误数据,重新识别后续数据;
如果所述长度字段包括多个字节,且第一个字节值等于截断符,或者,其他字节的最高位不等于1,表示数据字段非法,丢弃已读出的错误数据,重新识别后续数据。
9.根据权利要求6所述的基于长度转义的数据流解包方法,其特征在于,所述数据流封包方法还包括:
如果根据所述长度字段判断出对应数据段为尾部数据段,且尾部数据段之后的数据不为截断符,表示数据字段非法,丢弃已读出的错误数据,重新识别后续数据。
10.一种基于长度转义的数据流解包系统,其特征在于,包括:
数据流边界头读取模块,用于读取接收数据流中第一个预设的截断符作为数据流边界头标识;
数据段及数据流边界尾读取模块,用于读取所述边界头标识之后的数据流中的长度字段;根据所述长度字段读取对应的数据段;如果根据所述长度字段判断出所述数据段为非尾部数据,在对应的数据段尾部增加所述截断符;如果根据所述长度字段判断出对应数据段为尾部数据段,读取尾部数据段之后的截断符作为数据流边界尾标识;
删除模块,用于删除数据流中的边界头标识、长度字段及边界尾标识,获得实际的发送数据流。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911205296.XA CN112887054B (zh) | 2019-11-29 | 2019-11-29 | 一种基于长度转义的数据流封包方法、解包方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911205296.XA CN112887054B (zh) | 2019-11-29 | 2019-11-29 | 一种基于长度转义的数据流封包方法、解包方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112887054A true CN112887054A (zh) | 2021-06-01 |
CN112887054B CN112887054B (zh) | 2023-11-21 |
Family
ID=76038988
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911205296.XA Active CN112887054B (zh) | 2019-11-29 | 2019-11-29 | 一种基于长度转义的数据流封包方法、解包方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112887054B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114205055A (zh) * | 2021-12-13 | 2022-03-18 | 北京恒安嘉新安全技术有限公司 | 数据传输方法、装置、设备及存储介质 |
WO2023005722A1 (zh) * | 2021-07-30 | 2023-02-02 | 华为技术有限公司 | 报文处理方法和通信设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5852469A (en) * | 1995-03-15 | 1998-12-22 | Kabushiki Kaisha Toshiba | Moving picture coding and/or decoding systems, and variable-length coding and/or decoding system |
US20030219015A1 (en) * | 2002-05-21 | 2003-11-27 | Alcatel | Method for encapsulating variable length packets, and related data packet encapsulator and decapsulator |
US8612612B1 (en) * | 2011-09-28 | 2013-12-17 | Juniper Networks, Inc. | Dynamic policy control for application flow processing in a network device |
US20180115920A1 (en) * | 2015-11-23 | 2018-04-26 | Nec Europe Ltd. | Ethernet frames encapsulation within cpri basic frames |
CN108989286A (zh) * | 2018-06-08 | 2018-12-11 | 北京开广信息技术有限公司 | 通用数据流的封装方法、解封装方法及装置 |
CN109698732A (zh) * | 2017-10-23 | 2019-04-30 | 华为技术有限公司 | 传输数据的方法和装置 |
-
2019
- 2019-11-29 CN CN201911205296.XA patent/CN112887054B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5852469A (en) * | 1995-03-15 | 1998-12-22 | Kabushiki Kaisha Toshiba | Moving picture coding and/or decoding systems, and variable-length coding and/or decoding system |
US20030219015A1 (en) * | 2002-05-21 | 2003-11-27 | Alcatel | Method for encapsulating variable length packets, and related data packet encapsulator and decapsulator |
US8612612B1 (en) * | 2011-09-28 | 2013-12-17 | Juniper Networks, Inc. | Dynamic policy control for application flow processing in a network device |
US20180115920A1 (en) * | 2015-11-23 | 2018-04-26 | Nec Europe Ltd. | Ethernet frames encapsulation within cpri basic frames |
CN109698732A (zh) * | 2017-10-23 | 2019-04-30 | 华为技术有限公司 | 传输数据的方法和装置 |
CN108989286A (zh) * | 2018-06-08 | 2018-12-11 | 北京开广信息技术有限公司 | 通用数据流的封装方法、解封装方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023005722A1 (zh) * | 2021-07-30 | 2023-02-02 | 华为技术有限公司 | 报文处理方法和通信设备 |
CN114205055A (zh) * | 2021-12-13 | 2022-03-18 | 北京恒安嘉新安全技术有限公司 | 数据传输方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112887054B (zh) | 2023-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3599673B2 (ja) | 無線データ送受信装置及びその方法 | |
KR101722719B1 (ko) | 역방향의 강력한 헤더 압축 수신기 | |
US9672830B2 (en) | Voice signal encoding and decoding method, device, and codec system | |
CN112887054B (zh) | 一种基于长度转义的数据流封包方法、解包方法及系统 | |
CN110505123B (zh) | 丢包率的计算方法、服务器及计算机可读存储介质 | |
US7388915B2 (en) | Video data coding/decoding apparatus and method | |
CN112332951B (zh) | 一种以太网帧抢占方法、装置、设备及存储介质 | |
CN112399479B (zh) | 用于数据传输的方法、电子设备和存储介质 | |
CN101755459A (zh) | 用于自适应地确定用于采集的ⅰ帧及平衡基本层与增强层的系统及方法 | |
CN111385055B (zh) | 一种数据传输方法和装置 | |
US20160329987A1 (en) | Streaming Media Packet Processing Method, WiFi Chip, and Mobile Terminal | |
US20050013313A1 (en) | Method for encapsulating data streams | |
US11057312B2 (en) | Apparatus and method for configuring MMT payload header | |
CN112565105A (zh) | 一种降低时间敏感帧转发时延的方法、装置及设备 | |
CN116684595A (zh) | 一种超低时延的图像编码系统、方法、装置及存储介质 | |
CN114979093B (zh) | 一种基于rtp的数据传输方法、装置、设备和介质 | |
CN113132766B (zh) | 一种ts封装格式的vbr发送方法 | |
CN114430488A (zh) | 一种视频编码和视频解码的方法及装置 | |
CN103929404B (zh) | 一种解析HTTP chunked编码数据的方法 | |
CN105407351B (zh) | 一种从实时传输协议数据包中重建编码方式的方法和装置 | |
US10742783B2 (en) | Data transmitting apparatus, data receiving apparatus and method thereof having encoding or decoding functionalities | |
WO2015101280A1 (zh) | 一种信道的码率分配方法及系统 | |
US10554573B2 (en) | Streaming media data transmission method and apparatus | |
EP2088708A1 (en) | Method for transmitting data packets with forward error correction | |
CN116893987B (zh) | 硬件加速方法、硬件加速器及硬件加速系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 361000 Fujian Province Xiamen Torch High tech Zone Software Park Innovation Building C Zone 303-E Patentee after: Xiamen Yaxun Zhilian Technology Co.,Ltd. Country or region after: China Address before: No.46 guanri Road, phase II, software park, Xiamen City, Fujian Province, 361000 Patentee before: XIAMEN YAXON NETWORK Co.,Ltd. Country or region before: China |
|
CP03 | Change of name, title or address |