CN113556331A - 一种tcp粘包处理方法、系统及存储介质 - Google Patents
一种tcp粘包处理方法、系统及存储介质 Download PDFInfo
- Publication number
- CN113556331A CN113556331A CN202110772488.XA CN202110772488A CN113556331A CN 113556331 A CN113556331 A CN 113556331A CN 202110772488 A CN202110772488 A CN 202110772488A CN 113556331 A CN113556331 A CN 113556331A
- Authority
- CN
- China
- Prior art keywords
- message
- tcp
- data
- length
- read
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 20
- 239000004696 Poly ether ether ketone Substances 0.000 claims abstract description 58
- 229920002530 polyetherether ketone Polymers 0.000 claims abstract description 58
- 238000012545 processing Methods 0.000 claims abstract description 38
- JUPQTSLXMOCDHR-UHFFFAOYSA-N benzene-1,4-diol;bis(4-fluorophenyl)methanone Chemical compound OC1=CC=C(O)C=C1.C1=CC(F)=CC=C1C(=O)C1=CC=C(F)C=C1 JUPQTSLXMOCDHR-UHFFFAOYSA-N 0.000 claims abstract description 35
- 230000007246 mechanism Effects 0.000 claims abstract description 32
- 238000000034 method Methods 0.000 claims abstract description 11
- 230000003287 optical effect Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 7
- 230000009286 beneficial effect Effects 0.000 description 5
- 230000006855 networking Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000000717 retained effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W28/00—Network traffic management; Network resource management
- H04W28/02—Traffic management, e.g. flow control or congestion control
- H04W28/06—Optimizing the usage of the radio link, e.g. header compression, information sizing, discarding information
- H04W28/065—Optimizing the usage of the radio link, e.g. header compression, information sizing, discarding information using assembly or disassembly of packets
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种TCP粘包处理方法、系统及存储介质,所述方法包括:在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;清除所述MSG_PEEK标记;从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理。本发明能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
Description
技术领域
本发明涉及TCP粘包处理领域,尤其涉及一种TCP粘包处理方法、系统及存储介质。
背景技术
目前,基站系统普遍采用分布式架构,对于宏站主要由基带处理单元、射频单元组成,对于室分系统由基带单元、扩展单元、射频单元组成,不同网元之间物理上通过光纤连接,可以实现灵活组网;基带单元和扩展单元需要支持多光口,根据组网场景基带单元可以接射频单元,也可以接扩展单元,扩展单元再接射频单元。基带单元需要控制所连接的扩展单元、射频单元,不同网元之间需要采用一种通信机制实现基带单元对网元的管理与控制,比如配置下发、状态查询,升级等操作。
由于TCP(传输控制协议)自身特性,发送端可能会将多次间隔较小且数据量较小的应用层数据,合并成一个大的数据块,然后进行封包发送到接收端,接收端难以区分,需要应用层采用合适的拆包策略。
其中,现有技术中常见的方法是接收端将每次接收到的数据放到缓冲区,其中,每次接收到的数据可能是一个完整的数据包,也可能是多个完整数据包,也可能包含多个数据包但最后一包数据不完整,接收端再从缓冲区中根据消息头找到消息边界处理每一包数据,不完整的数据包保留到缓冲区下下一个接收周期再进行解析,需要考虑的场景与异常处理比较多。
发明内容
本发明的主要目的在于提供一种TCP粘包处理方法、系统及存储介质,旨在保证每次读取到的消息均是完整的应用层消息,从而巧妙的解决TCP粘包问题。
为实现上述目的,本发明提供一种TCP粘包处理方法,所述方法包括以下步骤:
在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;
采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;
当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;
清除所述MSG_PEEK标记;
从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;
当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理。
本发明进一步的技术方案是,所述当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤之前还包括:
判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度;
若否,则返回执行所述采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据的步骤;
若是,则执行所述当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤。
本发明进一步的技术方案是,所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤之前还包括:
判断再次读取到的数据是否等于所述消息长度;
若否,则返回执行从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据的步骤;
若是,则执行所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤。
本发明进一步的技术方案是,所述消息头还包括消息类型和物理地址信息。
本发明进一步的技术方案是,所述物理地址信息至少包括基带单元光口号、扩展单元级数和扩展单元光口号中的一种或几种。
为实现上述目的,本发明还提出一种TCP粘包处理系统,所述系统包括存储器、处理器、以及存储在所述处理器上的TCP粘包处理程序,所述TCP粘包处理程序被所述处理器调用时执行以下步骤:
在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;
采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;
当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;
清除所述MSG_PEEK标记;
从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;
当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理。
本发明进一步的技术方案是,所述TCP粘包处理程序被所述处理器调用时还执行以下步骤:
判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度;
若否,则返回执行所述采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据的步骤;
若是,则执行所述当预先读取到的TCP消息的数据长度大于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤。
本发明进一步的技术方案是,所述TCP粘包处理程序被所述处理器调用时还执行以下步骤:
判断再次读取到的数据是否等于所述消息长度;
若否,则返回执行从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据的步骤;
若是,则执行所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤。
本发明进一步的技术方案是,所述消息头还包括消息类型和物理地址信息。
为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有TCP粘包处理程序,所述TCP粘包处理程序被处理器调用时执行如上所述的方法的步骤。
本发明TCP粘包处理方法、系统及存储介质的有益效果是:本发明通过上述技术方案,在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;清除所述MSG_PEEK标记;从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理,利用TCP自身特性,使用MSG_PEEK机制,在不实际从套接字接收队列接收完整数据的情况下预先读取消息头信息,如果读取到的数据长度小于消息头,则一直反复读取直到读到完整的消息头信息,从消息头中获取消息长度信息后再从套接字接收队列读取一条完整的应用层消息,采用此机制能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
附图说明
图1是本发明TCP粘包处理方法第一实施例的流程示意图;
图2是室分系统组网示意图;
图3是TCP建链示意图;
图4是数据包组成示意图;
图5是TCP接收端接收到的一个完整的数据包示意图;
图6是TCP接收端接收到的数据小于消息头的数据包示意图;
图7是TCP接收端接收到的一个不完整的数据包示意图;
图8是TCP接收端接收到第一个数据包,最后一个数据包不完整的示意图;
图9是本发明TCP粘包处理方法第二实施例的流程示意图;
图10是本发明TCP粘包处理方法第三实施例的流程示意图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
考虑到现有技术中常见是接收端先将每次接收到的数据放到缓冲区,其中,每次接收到的数据可能是一个完整的数据包,也可能是多个完整数据包,也可能包含多个数据包但最后一包数据不完整,然后再从缓冲区中根据消息头找到消息边界处理每一包数据,不完整的数据包保留到缓冲区下下一个接收周期再进行解析,需要考虑的场景与异常处理比较多,由此,本发明提出一种解决方案。
具体地,本发明提出一种TCP粘包处理方法、系统及存储介质,本发明考虑到应用层从套接字接收消息时可以使用不同的标志参数,MSG_PEEK标志使接收操作从套接字接收队列的开头开始返回数据,不会删除接收队列中的数据,后续再次接收时可以获取到完整的数据,因此,本发明利用TCP自身特性,使用MSG_PEEK机制,在不实际从套接字接收队列接收完整数据的情况下预先读取消息头信息,如果读取到的数据长度小于消息头,则一直反复读取直到读到完整的消息头信息,从消息头中获取消息长度信息后再从套接字接收队列读取一条完整的应用层消息,采用此机制能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
如图1所示,图1是本发明TCP粘包处理方法第一实施例的流程示意图。本实施例包括以下步骤:
步骤S10,在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头。
需要说明的是,本发明TCP粘包处理方法应用于TCP粘包处理系统,以下主要从组网形式、数据包组成和收包处理三个方面对本发明TCP粘包处理方法展开说明。
1、组网形式
如图2和图3所示,所述TCP粘包处理系统支持一个基带单元连接多个扩展单元,每一个扩展单元可以连接多个射频单元,其中,基带单元与扩展单元之间基带单元为TCP服务端,扩展单元为TCP客户端;扩展单元与射频单元之间扩展单元为TCP服务端、射频单元为客户端,即一个基带单元管理多个扩展单元、一个扩展单元管理多个射频单元。网元之间采用两级客户机/服务器架构分层管理,可以避免基带单元与射频单元之间直接的消息交互,两级客户机/服务器架构相互独立且便于扩展,支持扩展单元级联功能。
2、数据包组成
如图4所示,数据包由消息头与消息体组成,消息头中包含消息标识、消息长度、物理地址信息等信息,其中,物理地址信息主要包括基带单元端口号、扩展单元的级数、扩展单元对应的射频单元光口号等,物理地址信息可以唯一标识整个系统中的一个网元。
TCP是面向连接的,提供稳定可靠的服务,但TCP本身是无消息保护边界的,所以需要增加消息头,利用消息头来提取消息边界信息;消息头中的物理地址信息还可以用来寻址,在基带单元与扩展单元、射频单元交互时,只需在消息头中指明物理地址信息即可实现寻址功能,扩展单元在收到消息后比较消息头中的物理地址信息即可知是自身消息还是需要转发的消息。
3、收包机制及粘包处理
由于TCP自身特性,发送端可能会将多次间隔较小且数据量小的应用层数据,合并成一个大的数据块,然后进行封包发送到接收端,接收端难以区分,需要应用层采用合适的拆包策略。
常见的方法是接收端将每次接收到的数据放到缓冲区,如图5至图8所示,每次接收到的数据可能是一个完整的数据包、也可能是多个完整数据包、也可能包含多个数据包但最后一包数据不完整,接收端再冲缓冲区中根据消息头找到消息边界处理每一包数据,不完整的数据包保留到缓冲区下下一个接收周期再进行解析,需要考虑的场景与异常处理很多。
本实施例考虑到应用层从套接字接收消息时可以使用不同的标志参数,MSG_PEEK标志使接收操作从套接字接收队列的开头开始返回数据,不会删除接收队列中的数据,后续再次接收时可以获取到完整的数据。
因此,本实施例利用TCP自身特性,使用MSG_PEEK机制,在不实际从套接字接收队列接收完整数据的情况下预先读取消息头信息,如果读取到的数据长度小于消息头,则一直反复读取直到读到完整的消息头信息,从消息头中获取消息长度信息后再从套接字接收队列读取一条完整的应用层消息,采用此机制能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
步骤S20,采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据。
步骤S30,当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度。
本实施例中,在采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据后,如果预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度,如果TCP消息的数据长度小于所述消息头时,则返回继续从TCP消息接收队列中预先读取TCP消息的数据,一直反复读取直到读到完整的消息头消息。
步骤S40,清除所述MSG_PEEK标记。
可以理解的是,MSG_PEEK标志使接收操作从套接字接收队列的开头开始返回数据,不会删除接收队列中的数据,因此,本实施例在从所述TCP消息的消息头中获取消息长度后,清除所述MSG_PEEK标记,以便于后续再次接收时可以获取到完整的数据。
步骤S50,从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据。
本实施例在清除所述MSG_PEEK标记后,可根据所述消息长度从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据。
步骤S60,当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理。
可以理解的是,当再次读取到的数据等于所述消息长度时,即说明此次读取到的数据是一个完整的数据包,因此可以接收该完整的数据包,并将该完整的数据包转发给相应的数据处理模块进行处理。
本实施例的有益效果是:本实施例通过上述技术方案,在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;清除所述MSG_PEEK标记;从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理,利用TCP自身特性,使用MSG_PEEK机制,在不实际从套接字接收队列接收完整数据的情况下预先读取消息头信息,如果读取到的数据长度小于消息头,则一直反复读取直到读到完整的消息头信息,从消息头中获取消息长度信息后再从套接字接收队列读取一条完整的应用层消息,采用此机制能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
进一步地,请参照图9,图9是本发明TCP粘包处理方法第二实施例的流程示意图,本实施例与图1所示的第一实施例的区别在于,本实施例中,上述步骤S30,当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤之前还包括:
步骤S301,判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度。
本实施例考虑到接收到的TCP信息的数据可能是一个完整的数据包,也可能是多个完整的数据包,也可能是包含多个数据包但最后一包数据不完整,因此,本实施例在采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据之后,在当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度之前还判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度。
若否,则返回执行所述采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据的步骤。
本实施例中,如果读取到的TCP消息的数据长度小于消息头的消息长度,则返回继续采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据,一直反复读取直到读到完整的消息头消息。
若是,则执行所述当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤。
如果读取到的TCP消息的数据长度大于或等于消息头的消息长度,则所述TCP消息的消息头中获取消息长度。
本实施例的有益效果是:本实施例通过上述技术方案,在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度;若否,则返回执行所述采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据的步骤;若是,则从所述TCP消息的消息头中获取消息长度;清除所述MSG_PEEK标记;从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理,利用TCP自身特性,使用MSG_PEEK机制,在不实际从套接字接收队列接收完整数据的情况下预先读取消息头信息,如果读取到的数据长度小于消息头,则一直反复读取直到读到完整的消息头信息,从消息头中获取消息长度信息后再从套接字接收队列读取一条完整的应用层消息,采用此机制能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
进一步地,请参照图10,图10是本发明TCP粘包处理方法第三实施例的流程示意图,本实施例与图1所示的第一实施例的区别在于,本实施例中,上述步骤S60,当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤之前还包括:
步骤S601,判断再次读取到的数据是否等于所述消息长度。
若否,则返回执行从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据的步骤;
若是,则执行所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤。
可以理解的是,当再次读取到的数据等于所述消息长度时,即说明此次读取到的数据是一个完整的数据包,因此可以接收该完整的数据包,并将该完整的数据包转发给相应的数据处理模块进行处理。
本实施例的有益效果是:本实施例通过上述技术方案,在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;清除所述MSG_PEEK标记;从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;判断再次读取到的数据是否等于所述消息长度;若否,则返回执行从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据的步骤;若是,则接收完整的数据包,并对所述数据包进行处理,利用TCP自身特性,使用MSG_PEEK机制,在不实际从套接字接收队列接收完整数据的情况下预先读取消息头信息,如果读取到的数据长度小于消息头,则一直反复读取直到读到完整的消息头信息,从消息头中获取消息长度信息后再从套接字接收队列读取一条完整的应用层消息,采用此机制能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
为实现上述目的,本发明还提出一种TCP粘包处理系统,所述系统包括存储器、处理器、以及存储在所述处理器上的TCP粘包处理程序,所述TCP粘包处理程序被所述处理器调用时执行以下步骤:
在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;
采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;
当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;
清除所述MSG_PEEK标记;
从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;
当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理。
进一步地,所述TCP粘包处理程序被所述处理器调用时还执行以下步骤:
判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度;
若否,则返回执行所述采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据的步骤;
若是,则执行所述当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤。
进一步地,所述TCP粘包处理程序被所述处理器调用时还执行以下步骤:
判断再次读取到的数据是否等于所述消息长度;
若否,则返回执行从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据的步骤;
若是,则执行所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤。
本实施例中,所述消息头还包括消息类型和物理地址信息。
本发明TCP粘包处理系统的有益效果是:本发明通过上述技术方案,在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;清除所述MSG_PEEK标记;从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理,利用TCP自身特性,使用MSG_PEEK机制,在不实际从套接字接收队列接收完整数据的情况下预先读取消息头信息,如果读取到的数据长度小于消息头,则一直反复读取直到读到完整的消息头信息,从消息头中获取消息长度信息后再从套接字接收队列读取一条完整的应用层消息,采用此机制能保证每次读取到的消息边界清晰,均是完整的应用层消息,从而巧妙的解决了TCP粘包问题。
为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有TCP粘包处理程序,所述TCP粘包处理程序被处理器调用时执行如上实施例所述的方法的步骤,这里不再赘述。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种TCP粘包处理方法,其特征在于,所述方法包括以下步骤:
在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;
采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;
当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;
清除所述MSG_PEEK标记;
从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;
当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理。
2.根据权利要求1所述的TCP粘包处理方法,其特征在于,所述当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤之前还包括:
判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度;
若否,则返回执行所述采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据的步骤;
若是,则执行所述当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤。
3.根据权利要求1所述的TCP粘包处理方法,其特征在于,所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤之前还包括:
判断再次读取到的数据是否等于所述消息长度;
若否,则返回执行从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据的步骤;
若是,则执行所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤。
4.根据权利要求1至3任意一项所述的TCP粘包处理方法,其特征在于,所述消息头还包括消息类型和物理地址信息。
5.根据权利要求4所述的TCP粘包处理方法,其特征在于,所述物理地址信息至少包括基带单元光口号、扩展单元级数和扩展单元光口号中的一种或几种。
6.一种TCP粘包处理系统,其特征在于,所述系统包括存储器、处理器、以及存储在所述处理器上的TCP粘包处理程序,所述TCP粘包处理程序被所述处理器调用时执行以下步骤:
在接收到TCP消息时,对所述TCP消息进行MSG_PEEK标记,所述TCP消息包括消息头;
采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据;
当预先读取到的TCP消息的数据长度大于或等于所述消息头时,从所述TCP消息的消息头中获取消息长度;
清除所述MSG_PEEK标记;
从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据;
当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理。
7.根据权利要求6所述的TCP粘包处理系统,其特征在于,所述TCP粘包处理程序被所述处理器调用时还执行以下步骤:
判断读取到的TCP消息的数据长度是否大于或等于消息头的消息长度;
若否,则返回执行所述采用MSG_PEEK机制从TCP消息接收队列中预先读取所述TCP消息的数据的步骤;
若是,则执行所述当预先读取到的TCP消息的数据长度大于所述消息头时,从所述TCP消息的消息头中获取消息长度的步骤。
8.根据权利要求6所述的TCP粘包处理系统,其特征在于,所述TCP粘包处理程序被所述处理器调用时还执行以下步骤:
判断再次读取到的数据是否等于所述消息长度;
若否,则返回执行从所述TCP消息接收队列中再次读取与所述消息长度相对应的数据的步骤;
若是,则执行所述当再次读取到的数据等于所述消息长度时,接收完整的数据包,并对所述数据包进行处理的步骤。
9.根据权利要求6至8任意一项所述的TCP粘包处理系统,其特征在于,所述消息头还包括消息类型和物理地址信息。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有TCP粘包处理程序,所述TCP粘包处理程序被处理器调用时执行如权利要求1至5任意一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110772488.XA CN113556331A (zh) | 2021-07-08 | 2021-07-08 | 一种tcp粘包处理方法、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110772488.XA CN113556331A (zh) | 2021-07-08 | 2021-07-08 | 一种tcp粘包处理方法、系统及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113556331A true CN113556331A (zh) | 2021-10-26 |
Family
ID=78102956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110772488.XA Pending CN113556331A (zh) | 2021-07-08 | 2021-07-08 | 一种tcp粘包处理方法、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113556331A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114125081A (zh) * | 2021-10-27 | 2022-03-01 | 桂林长海发展有限责任公司 | 一种接收数据的处理方法、装置及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103024018A (zh) * | 2012-12-04 | 2013-04-03 | 北京蓝汛通信技术有限责任公司 | 一种在单台设备运行多cdn服务进程的方法及装置 |
CN104410613A (zh) * | 2014-11-20 | 2015-03-11 | 广西大学 | 一种处理传输控制协议粘包方法及装置 |
CN104780065A (zh) * | 2015-04-01 | 2015-07-15 | 福建星网锐捷网络有限公司 | 一种tcp热备份方法和系统 |
CN105991223A (zh) * | 2015-02-13 | 2016-10-05 | Tcl集团股份有限公司 | 一种tcp网络传输数据中防粘包的方法及系统 |
US20210084016A1 (en) * | 2019-09-13 | 2021-03-18 | Oracle International Corporation | Systems and methods for client collaborated migration of live tls connection |
-
2021
- 2021-07-08 CN CN202110772488.XA patent/CN113556331A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103024018A (zh) * | 2012-12-04 | 2013-04-03 | 北京蓝汛通信技术有限责任公司 | 一种在单台设备运行多cdn服务进程的方法及装置 |
CN104410613A (zh) * | 2014-11-20 | 2015-03-11 | 广西大学 | 一种处理传输控制协议粘包方法及装置 |
CN105991223A (zh) * | 2015-02-13 | 2016-10-05 | Tcl集团股份有限公司 | 一种tcp网络传输数据中防粘包的方法及系统 |
CN104780065A (zh) * | 2015-04-01 | 2015-07-15 | 福建星网锐捷网络有限公司 | 一种tcp热备份方法和系统 |
US20210084016A1 (en) * | 2019-09-13 | 2021-03-18 | Oracle International Corporation | Systems and methods for client collaborated migration of live tls connection |
Non-Patent Citations (2)
Title |
---|
WANGXINYU2011: "UDP分两次接收数据包MSG_PEEK", 《CSDN》 * |
周迪: "Winsock API选项配置", 《计算机与信息技术》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114125081A (zh) * | 2021-10-27 | 2022-03-01 | 桂林长海发展有限责任公司 | 一种接收数据的处理方法、装置及存储介质 |
CN114125081B (zh) * | 2021-10-27 | 2023-09-22 | 桂林长海发展有限责任公司 | 一种接收数据的处理方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103780679A (zh) | 基于http协议的长延时远程调用方法 | |
CN113014666B (zh) | 一种区块链协议栈架构方法、系统、设备及存储介质 | |
CN113259264B (zh) | 数据传输方法、装置、计算机设备和存储介质 | |
CN113014510B (zh) | 惯导系统分布式测试中数据缓存方法及装置 | |
CN105389120A (zh) | 支持通过活动消息的rma api | |
CN115174472A (zh) | 一种消息转发处理方法及相关装置 | |
CN114035987A (zh) | 基于消息队列的数据传输方法、装置、电子设备及介质 | |
CN113556331A (zh) | 一种tcp粘包处理方法、系统及存储介质 | |
CN112422485B (zh) | 一种传输控制协议的通信方法及装置 | |
US7526420B2 (en) | Method and system for virtual injection of network application codes into network simulation | |
CN113691600A (zh) | 设备状态信息的同步方法以及装置、计算机可读存储介质 | |
CN113194494A (zh) | 一种空口资源控制方法、装置、网络侧设备及终端 | |
CN112073488A (zh) | 处理请求的方法及装置 | |
CN111930482A (zh) | 基于节点集群的任务处理方法、装置、设备及存储介质 | |
CN104639379A (zh) | 测试代理方法及其装置 | |
CN106713170B (zh) | 一种vsm通道的报文分片方法及装置 | |
CN109871277B (zh) | 进程间多请求管理方法、装置、终端设备及可读存储介质 | |
CN113626295B (zh) | 压测数据的处理方法、系统及计算机可读存储介质 | |
CN111078425B (zh) | 消息处理方法、装置、存储介质及电子设备 | |
KR100875912B1 (ko) | 개방형 환경에서의 네트워크 이벤트들을 처리하는 통신망이벤트 처리 장치 및 그 방법 | |
CN114079974A (zh) | 网络能力开放方法、装置、upf实体及cpe网元 | |
CN111130968A (zh) | 一种解决Modbus总线通信粘包的方法及终端 | |
CN110808909A (zh) | 跨虚拟系统的报文处理方法和装置 | |
CN115086173B (zh) | 网络升级过程中的可靠性保障方法和装置 | |
JP4649461B2 (ja) | 端末装置稼動確認方法、稼動確認装置、稼動確認システムおよび稼動確認プログラム |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20211026 |