用于有长度限制的网络传输协议中分片传输数据包的方法技术

技术编号:20181445 阅读:40 留言:0更新日期:2019-01-23 01:56
本发明专利技术提供一种用于有长度限制的网络传输协议中分片传输数据包的方法,其特征在于:在传输层,发送端将大数据包分割成若干可以一次发送成功的数据片,接收端收到一个数据包的全部的数据片后,按顺序组装数据包完毕后发送给应用层;发送端分割数据片时,增加保证数据片准确传输的头部结构;接收端收齐一个完整的数据包后,剥离头部结构,组装完毕后发往应用层。本发明专利技术技术方案将在网络服务程序中发挥重要作用,能够提供网络运营效率,在通信行业具有重大的市场价值。

A Method for Piecewise Transport of Packets in Network Transport Protocol with Length Limitation

The invention provides a method for transmitting data packet in network transmission protocol with length limitation, which is characterized by: in the transmission layer, the sender divides the large data packet into several data slices that can be successfully sent at one time, the receiver receives all data slices of a data packet, assembles the data packet sequentially and sends them to the application layer; and when the sender divides the data slice, the sender sends the data slice sequentially. Increase the header structure to ensure the accurate transmission of data slices; after receiving a complete data package, the receiver strips the header structure and sends it to the application layer after assembly. The technical scheme of the invention will play an important role in the network service program, can provide network operation efficiency, and has great market value in the communication industry.

【技术实现步骤摘要】
用于有长度限制的网络传输协议中分片传输数据包的方法
本专利技术涉及一种分片传输大数据包的方法,可用于使用有长度限制的网络传输协议传输超过协议限制的最大长度的数据包。
技术介绍
在某些应用场景中,网络传输使用的传输协议对传输的数据包存在长度限制,而应用层要传输的大数据包可能会超出限制长度,例如:用lora等串口协议传输超过256字节的数据包。lora可用于无线远距离传输,但传输速度极慢,传输的数据包太大会非常耗时且不稳定。为满足这些特定的应用场景,需要在应用层限制数据包的大小;这样使得应用层的业务逻辑受到传输层的限制,不利用应用层的开发和维护。
技术实现思路
本专利技术提供了一种新的对大数据包进行分片重组的传输方法。本专利技术技术方案提供一种用于有长度限制的网络传输协议中分片传输数据包的方法,在传输层,发送端将大数据包分割成若干可以一次发送成功的数据片,接收端收到一个数据包的全部的数据片后,按顺序组装数据包完毕后发送给应用层;发送端分割数据片时,增加保证数据片准确传输的头部结构;接收端收齐一个完整的数据包后,剥离头部结构,组装完毕后发往应用层;增加头部结构的实现方式为,在每片数据的头部增加一个片头部,片头部包含下列字段,片id,按数据片在数据包的位置顺序从1开始编号;片size,提供本数据片的内容的长度;数据包id,标记应用层传输过来的要发送的数据包,从0开始累加,当累加到数据类型允许的最大值时,重新从0开始累加;Flag,标识是否分片;对于数据包的第一个数据片增加数据包头部,数据包头部包含数据包长度。而且,对于数据包的第一个数据片增加数据包头部时,数据包头部包含crc校验字段,用于传输层对数据可靠性进行校验,确保接收到的数据完全正确。而且,在传输层,需要发送数据包时,判断数据包的长度是否超过网络传输协议限制,如果未超过,则在数据前增加片头部,其中,片id为1;flag为0,表示未分片;如果超过限制,则需要分片,将数据分成符合网络传输协议限制的若干片,在每片数据前加上片头部,并对各个字段赋值,其中片id从1开始,按顺序累加;flag标记为1,表示是分片数据。而且,接收端从网络上接收到数据后,首先读取数据的片头部;如果片头部的flag标记为0,则表示此数据片是一个完整的数据包,去掉片头部后,直接将数据内容发送给应用层;如果片头部的flag标记为1,则表示这是一个分片数据。读取片头部里的数据包id字段,在缓冲区里查找,是否有元素的数据包id字段和收到的数据片的数据包id相同。而且,当在缓冲区里查找的结果是,没有元素的数据包id字段和收到的数据片的数据包id相同,说明收到了一个新的数据包,则在缓冲区里取一个未使用的元素,存储此数据片对应的数据包的数据,将元素的数据包id赋值为此数据片的数据包id,记录当前时间到元素的时间戳字段,将数据片加入到元素的数据片队列中。而且,当在缓冲区里查找的结果是,有元素的数据包id字段和收到的数据片的数据包id相同,说明收到了该元素所存储的数据包的一个数据片,遍历数据片队列,查找是否有片id重复,如果有,说明接收错误,丢弃此数据片,如果没有,将数据片加入到元素的数据片队列中。本专利技术所提供方法突破某些网络传输协议的数据包长度限制,实现了传输层和应用层完全分离,应用层的业务逻辑完全不受传输层影响。本专利技术对比已有技术有以下创新点:1、在发送端发送数据时,对超过传输协议限制的大数据包进行分片,在接收端缓存收到的数据片,直到收齐一个数据包的全部数据片,组装完毕后再发送给应用层,这样可以实现传输任意大的数据包,同时对应用层屏蔽实现细节,业务逻辑不受传输层限制。2、在数据片的数据前增加片头部,片头部包含片id字段和数据包id字段,可以确保数据片在传输过程中乱序传输后,接收端仍然能正确的按顺序还原数据包。3、在数据片的片头部中包含片长度字段,以及在第一片数据片的内容前增加数据包头部,数据包头部中包含数据包长度字段,接收端通过比较已接收的数据长度和数据包长度,可以得知是否收齐数据包。4、接收端在接收到一个新的数据包的数据片时,在缓存此数据片时记录当前的时间戳,之后周期性的检查缓冲区的数据,如果时间超过一个限定值,可以清空此数据片队列。可以防止数据包id回绕,以及网络传输中某些数据片丢包导致占满缓冲区。本专利技术技术方案将在网络服务程序中发挥重要作用,能够提供网络运营效率,在通信行业具有重大的市场价值。附图说明图1为本专利技术实施例的数据结构图。图2为本专利技术实施例的流程图。具体实施方式以下结合附图和实施例详细说明本专利技术技术方案,提供了对该实施例的全面理解的详细细节。本专利技术提出一种新的对大数据包进行分片重组的传输方法:应用层和传输层完全分离,对分片重组的细节全部隐藏在传输层,应用层可以只关注业务逻辑,当需要传输数据时,在发送端将超过传输协议限制的大数据包分割成若干可以一次发送成功的数据片,直接将数据发往接收端的传输层;传输层将数据组装完毕,再发给应用层。即接收端的传输层缓存收到的数据片,在收到一个数据包的全部的数据片后,按顺序组装数据包完毕后发送给应用层。为了准确传输,本专利技术提出设置头部结构,传输层发送端对收到的数据进行分片,增加头部结构;接收端收齐一个完整的数据包后,剥离头部结构,组装完毕后发往应用层。参见图1,实施例中,对每片要发送的数据,都需要增加数据片头部,数据片头部包含字段:1、片id,按数据片在数据包的位置顺序从1开始编号,即每个数据包分割的数据片都从1开始按顺序累加;出现不需要分片的数据包只有1片,片id为1。2、数据包id,标记应用层传输过来的要发送的数据包,从0开始累加,当累加到数据类型允许的最大值时,重新从0开始累加。3、片size,本数据片的大小,不包含片头部,用于提供本数据片的内容的长度。4、flag,标识是否分片,对于可以直接发送的小数据包,此字段为0,表示未分片;其他有分片的数据包,每片数据的此字段都必须为1。对于第一片数据(片id为1的数据片),需要增加数据包头部,数据包头部包含下列字段:1、数据包长度,不包含传输层新增的片头部和和数据包头部,是本数据包的内容的长度。对于分片的数据包,数据包长度等于各片的片长度累加;对于未分片的数据包,数据包长度要和片长度相等。2、crc校验字段,此字段可选,用于传输层对数据可靠性进行校验,确保接收到的数据完全正确。例如,原始数据分为三片,内容A部分、内容B部分、内容C部分,分别为第一片(片id为1)、第二片(片id为2)、第三片(片id为3)。参见图2,本专利技术实施例可以分为2个部分,发送端和接收端。发送端接收应用层需要发送的数据包,先判断数据包是否超出长度,如果超出,则需要分片发送;之后将数据包分片,每片的大小要可以通过网络一次发送完毕;添加头部,然后将数据片发送出去,一次发送一个数据片。接收端申请一个大的缓冲区,缓冲区里的一个元素存储收到的同一个数据包的所有数据片。接收端缓存接收到数据片,收齐一个数据包的全部数据片后,去掉添加的头部,按顺序组装完毕,校验正确后发送给应用层。为了便于实施参考起见,提供实施例中各操作具体说明如下:在发送端1.接收应用层发送的数据,可以是消息队列或函数调用等形式。2.系统用一个全局变量(全局数据包id)表示当前所要发本文档来自技高网...

【技术保护点】
1.一种用于有长度限制的网络传输协议中分片传输数据包的方法,其特征在于:在传输层,发送端将大数据包分割成若干可以一次发送成功的数据片,接收端收到一个数据包的全部的数据片后,按顺序组装数据包完毕后发送给应用层;发送端分割数据片时,增加保证数据片准确传输的头部结构;接收端收齐一个完整的数据包后,剥离头部结构,组装完毕后发往应用层;增加头部结构的实现方式为,在每片数据的头部增加一个片头部,片头部包含下列字段,片id,按数据片在数据包的位置顺序从1开始编号;片size,提供本数据片的内容的长度;数据包id,标记应用层传输过来的要发送的数据包,从0开始累加,当累加到数据类型允许的最大值时,重新从0开始累加;Flag,标识是否分片;对于数据包的第一个数据片增加数据包头部,数据包头部包含数据包长度。

【技术特征摘要】
1.一种用于有长度限制的网络传输协议中分片传输数据包的方法,其特征在于:在传输层,发送端将大数据包分割成若干可以一次发送成功的数据片,接收端收到一个数据包的全部的数据片后,按顺序组装数据包完毕后发送给应用层;发送端分割数据片时,增加保证数据片准确传输的头部结构;接收端收齐一个完整的数据包后,剥离头部结构,组装完毕后发往应用层;增加头部结构的实现方式为,在每片数据的头部增加一个片头部,片头部包含下列字段,片id,按数据片在数据包的位置顺序从1开始编号;片size,提供本数据片的内容的长度;数据包id,标记应用层传输过来的要发送的数据包,从0开始累加,当累加到数据类型允许的最大值时,重新从0开始累加;Flag,标识是否分片;对于数据包的第一个数据片增加数据包头部,数据包头部包含数据包长度。2.根据权利要求1所述用于有长度限制的网络传输协议中分片传输数据包的方法,其特征在于:对于数据包的第一个数据片增加数据包头部时,数据包头部包含crc校验字段,用于传输层对数据可靠性进行校验,确保接收到的数据完全正确。3.根据权利要求1所述用于有长度限制的网络传输协议中分片传输数据包的方法,其特征在于:在传输层,需要发送数据包时,判断数据包的长度是否超过网络传输协议限制,如果未超过,则在数据前增加片头部,其中,片id为1;flag为0,表示未分片;如果超过限制,则需要分片,将数据分成符合网络传输协议限制的若干片...

【专利技术属性】
技术研发人员:王鑫鹏南亮
申请(专利权)人:武汉虹信通信技术有限责任公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1