本发明涉及信息处理技术领域,尤其涉及一种tcp重组方法、装置、电子设备及存储介质。
背景技术:
互联网的发展离不开网络通信,目前使用最广的是tcp/ip协议。其中ip层主要负责将数据送到正确的地方,但它不能保证这些数据一定会送到,也不能保证控制数据的传输速率及数据到达的顺序。而tcp主要就是解决上述问题,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。tcp通过滑动窗口协议来控制流量的传输速率,通过超时重传及捎带序列号的方式保证数据有序。
通常监控业务指标,需要在业务的实现中加入统计功能,这样耦合度太高,尤其是当统计项比较多且比较复杂的场景。为了业务功能与监控业务指标解藕,其中一种方法是使用交换机数据镜像功能,将网络流量复制一份,并转发到指定的监控服务进行解析。
常规的tcp丢包处理流程:判断接收到的tcp包seq是否匹配,如果不匹配则缓存起来。一段时间后,还未收到期望的tcp包,则要求对方重发该包。收到重发后的tcp包,按seq顺序处理tcp包。
常规的tcp丢包后,可直接要求发送重发丢失的包保证通信的质量。但镜像过程中产生的数据丢包不能跟常规tcp传输一样,丢包后还可以要求发送方重传,此时无法避免tcp包丢失,导致常规的tcp组包不适用这种场景。
因此如何解决在镜像模式下发生的tcp丢包问题已经成为业界亟待解决的问题。
技术实现要素:
本发明提供一种tcp重组方法、装置、电子设备及存储介质,用以解决现有技术中无法处理在镜像模式下发生的tcp丢包问题的缺陷,实现tcp重组方法。
本发明提供一种tcp重组方法,包括:
在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;
在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
将所述目标tcp包发送到业务层进行处理。
根据本发明提供的一种tcp重组方法,所述方法还包括:
在当前tcp包的序列满足期望序列的情况下,将所述当前tcp包发送到业务层进行处理,并更新期望;
检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望;
在所述缓存链表中的首个tcp包的序列,满足更新后的期望时,将所述缓存链表中的首个tcp包,作为目标tcp包,发送到业务层进行处理。
根据本发明提供的一种tcp重组方法,在检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望的步骤之后,所述方法还包括:
在所述缓存链表中的首个tcp包不满足更新后的期望时,检测所述缓存链表中的tcp包的数量是否超过预设数量;
在缓存链表中所缓存的tcp包超过预设数量的情况下,向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
将所述目标tcp包发送到业务层进行处理。
根据本发明提供的一种tcp重组方法,所述方法还包括:
每隔预设时间间隔,触发定时检测,获取当前时刻的缓存链表;
遍历当前时刻的缓存链表,在当前时刻的缓存链表中存在未遍历的连接时,检测所述连接的缓存链表中的首个tcp包是否超时;
若所述连接的缓存链表中的首个tcp包超时,则向业务层发送一个丢包事件;
将所述连接的缓存链表中的首个tcp包发送到业务层进行处理。
根据本发明提供的一种tcp重组方法,在所述将所述向业务层发送一个丢包事件的步骤之后,所述方法还包括:
删除连接的缓存链表中的首个tcp包,得到更新后的缓存链表;
计算当前期望的下一个期望,得到更新后的期望;
当更新后的缓存链表中的首个tcp包不符合更新后的期望时,继续对当前时刻的缓存链表进行遍历。
根据本发明提供的一种tcp重组方法,在所述计算当前期望的下一个期望,得到更新后的期望的步骤之后,所述方法还包括:
当更新后的缓存链表中的首个tcp包符合更新后的期望时,将所述更新后的缓存链表中的首个tcp包发送到业务层进行处理;
删除更新后的缓存链表中的首个tcp包,得到目标缓存链表,并对更新后的期望继续进行更新,得到目标期望。
本发明还提供一种tcp重组装置,包括:
缓存模块,用于在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;
处理模块,用于在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
发送模块,用于将所述目标tcp包发送到业务层进行处理。
根据本发明提供的一种tcp重组装置,所述装置还包括:
更新模块,用于在当前tcp包的序列满足期望序列的情况下,将所述当前tcp包发送到业务层进行处理,并更新期望;
检测模块,用于检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望;
计算模块,用于在所述缓存链表中的首个tcp包的序列,满足更新后的期望时,将所述缓存链表中的首个tcp包,作为目标tcp包,发送到业务层进行处理。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述tcp重组方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述tcp重组方法的步骤。
本发明提供的一种tcp重组方法、装置、电子设备及存储介质,通过将在不满足期望的当前tcp包,存储到缓存链表中,并且每次存储是均对缓存链表中存储的总数进行检测,在发现缓存链表缓存的tcp包的数量已经超过预设数量的情况下,此时已经无法继续对tcp包进行缓存,此时向业务层发送一个丢包事件,由业务层决定是否丢弃当前正在处理的数据,并且继续将提取所述缓存链表中的首个tcp包,发送到业务层进行处理,可以尽量减少丢包对业务处理影响的范围。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的tcp重组方法的流程示意图;
图2为本发明提供的tcp包重组对应的流程图;
图3为本发明提供的定时检测流程示意图;
图4为本发明提供的tcp重组装置示意图;
图5为本发明提供的电子设备的实体结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图3描述本发明的tcp重组方法。
图1是本发明提供的tcp重组方法的流程示意图,如图1所示,包括:
步骤s1,在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;
具体的,本发明中所描述的当前tcp包具体是指镜像过程中产生的tcp包,即网络镜像数据的tcp包。
本发明在接收到一个新的tcp包时,把这个包作为当前处理的tcp包,将当前处理的tcp包的源地址、目地地址排序后作简单hash得到该连接的唯一标识,使用连接的唯一标识查找该连接的业务处理对象,并计算当前tcp包的流向,得到对应的缓存链表及期望seq。
假设交互的两个地址分别为a、b,那每个业务的处理对象有a->b缓存tcp包链表,b->a缓存tcp包链表,及各自的期望seq。
在当前的tcp包的序列不满足期望seq时,则说明当前发生了丢包的情况,而为了避免当前的丢包而影响后续数据的处理,则首先将tcp包的序列顺序,将当前tcp包依次存储到缓存链表中,可以在解决丢包问题后,将缓存链表中存储的tcp包下发到业务层继续进行处理,有效避免业务阻塞。
步骤s2,在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
本发明中,每次向缓存链表中存储tcp包之后,均会检测该缓存链表中的存储的tcp包存储的数量是否超过预设数量,用于避免缓存链表存储满之后,无法继续进行缓存,从而导致大量业务数据丢失的情况。
本发明中检测到缓存链表中所缓存的tcp包超过预设数量的情况下,则说明,此时缓存链表已经不适宜继续进行tcp包的存储,而在依然没有解决丢包事件的情况下,可以向业务层发送一个丢包事件,从而由业务层判断是否需要丢弃该数据。
同时,在项业务层发送一个丢包事件后,则可以相当于解决了最初的当前tcp包的序列不满足期望的丢包事件,则提取所述缓存链表中的首个tcp包,作为目标tcp包,即对缓存链表中的数据进行处理,有效避免业务堵塞。
步骤s3,将所述目标tcp包发送到业务层进行处理。
本发明中提取所述缓存链表中的首个tcp包,作为目标tcp包;将所述目标tcp包发送到业务层进行处理,是为了实现解决tcp丢包问题后,继续进行业务处理,从而避免因为tcp丢包而导致的持续业务阻塞。
本发明通过将在不满足期望的当前tcp包,存储到缓存链表中,并且每次存储是均对缓存链表中存储的总数进行检测,在发现缓存链表缓存的tcp包的数量已经超过预设数量的情况下,此时已经无法继续对tcp包进行缓存,此时向业务层发送一个丢包事件,由业务层决定是否丢弃当前正在处理的数据,并且继续将提取所述缓存链表中的首个tcp包,发送到业务层进行处理,可以尽量减少丢包对业务处理影响的范围。
在另一实施例中,所述方法还包括:
在当前tcp包的序列满足期望的情况下,将所述当前tcp包发送到业务层进行处理,并更新期望;
检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望;
在所述缓存链表中的首个tcp包的序列,满足更新后的期望时,将所述缓存链表中的首个tcp包,作为目标tcp包,发送到业务层进行处理。
具体的,在当前tcp包的序列满足期望的情况下,即说明目前尚未发生丢包的情况,则继续进行下一步处理。
本发明中所描述的对期望进行更新具体是指,当前seq 数据长度。如果syn标志被置位,还需再额外加1。
本发明中在每次更新期望后,都会检测缓存链表中的首个tcp包的序列是否满足新的期望,其可以有效保证缓存链表中的tcp包被遗漏,保证业务的正常进行。
本发明中提取所述缓存链表中的首个tcp包,作为目标tcp包;将所述目标tcp包发送到业务层进行处理,是为了实现解决tcp丢包问题后,继续进行业务处理,从而避免因为tcp丢包而导致的持续业务阻塞。
本发明通过在更新期望后,检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望,从而能够保证缓存链表中的tcp包,在解决丢包问题后,能够正常下发,从而保证业务的正常进行。
在另一实施例中,在检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望的步骤之后,所述方法还包括:
在所述缓存链表中的首个tcp包不满足更新后的期望时,检测所述缓存链表中的tcp包的数量是否超过预设数量;
在缓存链表中所缓存的tcp包超过预设数量的情况下,向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
将所述目标tcp包发送到业务层进行处理。
具体的,在所述缓存链表中的首个tcp包不满足更新后的期望时,则说明此时缓存链表中的tcp包仍然无法进行下发,则检测所述缓存链表中的tcp包的数量是否超过预设数量。
本发明中检测到缓存链表中所缓存的tcp包超过预设数量的情况下,则说明,此时缓存链表已经不适宜继续进行tcp包的存储,而在依然没有解决丢包事件的情况下,可以像业务层发送一个丢包事件,从而由业务层判断是否需要丢弃该数据。
在另一实施例中,所述方法还包括:
每隔预设时间间隔,触发定时检测,获取当前时刻的缓存链表;
遍历当前时刻的缓存链表,在当前时刻的缓存链表中存在未遍历的连接时,检测所述连接的缓存链表中的首个tcp包是否超时;
若所述连接的缓存链表中的首个tcp包超时,则向业务层发送一个丢包事件;
将所述连接的缓存链表中的首个tcp包发送到业务层进行处理。
具体的,本发明中的预设时间间隔可以根据需要预先设定,例如10s或者15s触发一次定时监测。
本发明中的定时监测就是指每个预设时间检测自动进行下述检测流程。
本发明中所描述的当前时刻的缓存链表具体可以是指,触发定时检测时刻的缓存链表。
本发明中检测所述连接的缓存链表中的首个tcp包是否超时,是在保持连接的情况下,检测该tcp包所保存的时间是否超过预设时间,若其缓存的tcp包超过预设时间,还未被发送到业务层进行处理,则判定其发生丢包,其可以有效避免,长时间无法进行分包的tcp包导致业务阻塞的情况。
本发明中所描述的遍历当前时刻的缓存链表,是指按照上述步骤对缓存链表中的每个连接进行上述分析。
本发明通过每个预设时间,进行定时检测,判断每个连接的缓存链表中的首个tcp包是否超时,从而避免当连接意外断开或连接断开的包丢失,这部分缓存的内存将永远无法释放,导致内存泄漏的情况。
在另一实施例中,在所述将所述向业务层发送一个丢包事件的步骤之后,所述方法还包括:
删除连接的缓存链表中的首个tcp包,得到更新后的缓存链表;
计算当前期望的下一个期望,得到更新后的期望;
当更新后的缓存链表中的首个tcp包不符合更新后的期望时,继续对当前时刻的缓存链表进行遍历。
本发明中删除连接的缓存链表中的首个tcp包,是因为之前首个tcp包已经下发到业务层,此时缓存链表中的相关数据应当删除,从而实现缓存链表中首个tcp包的更新。
同样,由于之前首个tcp包已经下发到业务层,因此也需要对期望进行相应的更新,得到更新后的期望。
当更新后的缓存链表中的首个tcp包不符合更新后的期望时,则说明此时缓存链表中的tcp包仍然无法进行下发,继续对当前时刻的缓存链表进行遍历。
当更新后的缓存链表中的首个tcp包符合更新后的期望时,将所述更新后的缓存链表中的首个tcp包发送到业务层进行处理;
删除更新后的缓存链表中的首个tcp包,得到目标缓存链表,并对更新后的期望继续进行更新,得到目标期望。
本发明通过将在不满足期望的当前tcp包,存储到缓存链表中,并且每次存储是均对缓存链表中存储的总数进行检测,在发现缓存链表缓存的tcp包的数量已经超过预设数量的情况下,此时已经无法继续对tcp包进行缓存,此时向业务层发送一个丢包事件,由业务层决定是否丢弃当前正在处理的数据,并且继续将提取所述缓存链表中的首个tcp包,发送到业务层进行处理,可以尽量减少丢包对业务处理影响的范围。
在上述实施例中,可以将tcp重组的超时时间、每个tcp连接的缓存包大小提取出来作为配置,当其中任何一个满足条件,都触发丢包事件。这样就可以根据实际部署的物理机配制(主要是内存大小),及业务需要配制合理的值。
假设只有超时时间的限制,如果丢包了,那可能会因为传输速度过快,用不了多久就会撑暴内存。如果只有缓存包大小限制,当连接意外断开或连接断开的包(含fin标志的包)丢失,这部分缓存的内存将永远无法释放,导致内存泄漏。
当收到的tcp包的seq不是期望时,会将它缓存在一个双向链表中。从链表的尾部往前开始判断刚收到的tcp包是否处于链表中的包的后面。因为大多数情况下tcp包都是顺序的,所以大多都只需要比较一次。在比较两个tcp包前后顺序的时候还需要考虑seq绕回的问题。
如果seq2在seq1后面,则满足右边条件(c代码):(s32)((u32)seq2-(u32)seq1)>0
为什么简单的一行就可以判断呢。分析以下场景:
1、没有发生回绕,假设seq1=0x01,seq2=0x80000000,seq2-seq1=0x7fffffff,最终结果强转为32位有符号,结果为正值,条件成立,顺序为seq1->seq2,与实际一致。
2、没有发生回绕,假设seq1=0x01,seq2=0x80000001,seq2-seq1=0x80000000,最终结果强转为32位有符号,此时最高位被置1,结果为负值条件不成立,所以顺序为seq2->seq1,现实际不一致。
3、发生回绕,假设seq1=0xffffffff,seq2=0x01。seq2-seq1=2,因为计算发生溢出,最终条件成立,所以顺序为seq1->seq2,与实际一致。
4、发生回绕,假设seq1=0xffffffff,seq2=0x80000000。seq2-seq1=0x80000001,最终结果强转为32位有符号,此时最高位被置1,结果为负值条件不成立,所以顺序为seq2->seq1,与实际不一致。
从以上场景分析,使用上述判断正确的前提是,回绕后增量小于2^(32-1)-1,因此可以支持回绕近2g的数据,但实际单个连接的缓存大小不会设这么大,所以能满足使用要求。
在另一实施例中,图2为本发明提供的tcp包重组对应的流程图,如图2所示,首先,接到一个新的tcp包,把这个包作为当前处理的tcp包。将当前处理的tcp包的源地址、目地地址排序后作简单hash得到该连接的唯一标识,即以网络四元组为key,使用连接的唯一标识查找该连接的业务处理对象,并计算当前tcp包的流向,得到对应的缓存链表及期望seq,若没有则创建,初始化期望seq为0。假设交互的两个地址分别为a、b,那每个业务的处理对象有a->b缓存tcp包链表,b->a缓存tcp包链表,及各自的期望seq。
接着判断当前处理的tcp包是否是期望seq。判断方法:计算当前tcp包的seq,判断当前seq与下一个期望的seq是否相等,或者下一个期望的seq为0。因为是直接镜像网络上的包,很可能是中途开始接入数据包,所以首次来的tcp包直接当成第一个包。
若是期望的seq包则下发当前tcp包到业务层处理,并计算下一次期望的tcp包的seq。下一个期望seq的计算方法为当前seq 数据长度。如果syn标志被置位,还需再额外加1;将当前处理的tcp包按seq期望的顺序存储在链表中。排序的时候需要考虑seq绕回场景。查看该连接对应的缓存链表中首个tcp包seq是否是期望的。
若该连接对应的缓存链表中首个tcp包seq是期望的,则将缓存链表中首个tcp包作为当前处理的包,并从缓存的链表中移除首个tcp包。
若该连接对应的缓存链表中首个tcp包seq不是期望的,则判断当前缓存的包大小是否超过限制,若其超过限制则回到将将缓存链表中首个tcp包作为当前处理的包,并从缓存的链表中移除首个tcp包的步骤,若未超过限制,则结束流程。
若该连接对应的缓存链表中首个tcp包seq不是期望的,则将包按照seq期望顺序存在链表中,继续监测当前缓存的包大小是否超过限制,若若其超过限制则回到将将缓存链表中首个tcp包作为当前处理的包,并从缓存的链表中移除首个tcp包的步骤,若未超过限制,则结束流程。
图3为本发明提供的定时检测流程示意图,如图3所示,包括:触发定时检测,然后检测是否存在未遍历的连接,若不存在未遍历的连接,则结束流程;若存在未遍历的连接,则去除当前连接,接着检测当前连接缓存的首个tcp包是否超时,若检测当前连接缓存的首个tcp包未超时的情况下,则回到检测是否存在未遍历连接的操作;
若检测当前连接缓存的首个tcp包超时的情况下,则下发一个丢包的消息到业务层,删除缓存的首个tcp包,下发到业务层,并计算下一个期望的seq,然后检测缓存链表首个tcp包是否匹配期望的seq,若缓存链表首个tcp包是匹配期望的seq,则回到删除缓存的首个tcp包,下发到业务层,并计算下一个期望的seq的步骤;
若缓存链表首个tcp包不是匹配期望的seq,则回到检测是否存在未遍历连接的操作。
在另一实施例中,假设所有包正确的顺序都为1、2、3、4、5……
示例1
假设一条tcp连接上过来的数据包依次为1、3、4、2。
收到1号包后,发现是该连接首次收到包,立即下发到业务层,此时缓存链表为空,下一个期望包号为2。
收到3号包后,发现与期望包2不匹配,则将包缓存起来,此时缓存链表为3。
收到4号包后,发现与期望包2不匹配,则将包缓存起来,此时缓存链表为3、4。
收到2号包后,发现与期望包2匹配,则立即下发2号包到业务层,并计算出下一个期望包。号为3,然后与缓存链表首个包3匹配,则立即下发3号包到业务层,删除缓存链表首个包(3号)并计算出下一个期望包为4,然后与缓存链表首个包4匹配,则立即下发4号包到业务层,删除缓存链表首个包(4号),计算出下一个期望为5,此时缓存为空,结束。
示例2
假设一条tcp连接上过来的数据包依次为3,5,6,7……100000。
收到3号包后,发现是该连接首次收到包,立即下发到业务层,此时缓存链表为空,下一个期望包号为4。
收到5号包后,发现与期望包4不匹配,则将包缓存起来,此时缓存链表为5。
收到6号包后,发现与期望包4不匹配,则将包缓存起来,此时缓存链表为5、6。
……
收到999号包后,发现与期望包4不匹配,并判断此时缓存包总大小超过阈值,先下发一个丢包消息到业务层,然后强制下发缓存中首个包(5号),然后循环计算并判断链表中的包是否符合期望并下发,最终将所有包下发至业务层。
示例3
假设一条tcp连接上过来的数据包依次为5,7,8一直保持连接、并不再发包。
收到5号包后,发现是该连接首次收到包,立即下发到业务层,此时缓存链表为空,下一个期望包号为6。
收到7号包后,发现与期望包6不匹配,则将包缓存起来,此时缓存链表为7。
收到8号包后,发现与期望包6不匹配,则将包缓存起来,此时缓存链表为7、8。
……
一段时间后,触发超时,下发一个丢包消息到业务层,然后强制下发缓存中首个包(7号),然后循环计算并判断链表中的包是否符合期望并下发。
这个示例要求一直保持连接,是因为断开连接的话,会触发fin标志下发,收到fin包后,就需要立即触发丢包消息判断,并强制下发缓存中所有的包。
下面对本发明提供的tcp重组装置进行描述,下文描述的tcp重组装置与上文描述的tcp重组方法可相互对应参照。
图4为本发明提供的tcp重组装置示意图,如图4所示,包括:缓存模块410、处理模块420和发送模块430;其中,缓存模块410用于在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;其中,处理模块420用于在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;其中,发送模块430用于将所述目标tcp包发送到业务层进行处理。
所述装置还包括:更新模块,用于在当前tcp包的序列满足期望序列的情况下,将所述当前tcp包发送到业务层进行处理,并更新期望;检测模块,用于检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望;计算模块,用于在所述缓存链表中的首个tcp包的序列,满足更新后的期望时,将所述缓存链表中的首个tcp包,作为目标tcp包,发送到业务层进行处理。
所述检测模块还用于:在所述缓存链表中的首个tcp包不满足更新后的期望时,检测所述缓存链表中的tcp包的数量是否超过预设数量;在缓存链表中所缓存的tcp包超过预设数量的情况下,向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;将所述目标tcp包发送到业务层进行处理。
所述装置还包括定时监测模块,所述定时监测模块用于每隔预设时间间隔,触发定时检测,获取当前时刻的缓存链表;
遍历当前时刻的缓存链表,在当前时刻的缓存链表中存在未遍历的连接时,检测所述连接的缓存链表中的首个tcp包是否超时;
若所述连接的缓存链表中的首个tcp包超时,则向业务层发送一个丢包事件;
将所述连接的缓存链表中的首个tcp包发送到业务层进行处理。
所述定时监测模块,还用于计算当前期望的下一个期望,得到更新后的期望;
当更新后的缓存链表中的首个tcp包不符合更新后的期望时,继续对当前时刻的缓存链表进行遍历。
当更新后的缓存链表中的首个tcp包符合更新后的期望时,将所述更新后的缓存链表中的首个tcp包发送到业务层进行处理;
删除更新后的缓存链表中的首个tcp包,得到目标缓存链表,并对更新后的期望继续进行更新,得到目标期望。
本发明通过将在不满足期望的当前tcp包,存储到缓存链表中,并且每次存储是均对缓存链表中存储的总数进行检测,在发现缓存链表缓存的tcp包的数量已经超过预设数量的情况下,此时已经无法继续对tcp包进行缓存,此时向业务层发送一个丢包事件,由业务层决定是否丢弃当前正在处理的数据,并且继续将提取所述缓存链表中的首个tcp包,发送到业务层进行处理,可以尽量减少丢包对业务处理影响的范围。
图5为本发明提供的电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(communicationsinterface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行tcp重组方法,该方法包括:在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;将所述目标tcp包发送到业务层进行处理。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的tcp重组方法,该方法包括:在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;将所述目标tcp包发送到业务层进行处理。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的tcp重组方法,该方法包括:在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;将所述目标tcp包发送到业务层进行处理。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种tcp重组方法,其特征在于,包括:
在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;
在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
将所述目标tcp包发送到业务层进行处理。
2.根据权利要求1所述tcp重组方法,其特征在于,所述方法还包括:
在当前tcp包的序列满足期望的情况下,将所述当前tcp包发送到业务层进行处理,并更新期望;
检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望;
在所述缓存链表中的首个tcp包的序列,满足更新后的期望时,将所述缓存链表中的首个tcp包,作为目标tcp包,发送到业务层进行处理。
3.根据权利要求2所述tcp重组方法,其特征在于,在检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望的步骤之后,所述方法还包括:
在所述缓存链表中的首个tcp包不满足更新后的期望时,检测所述缓存链表中的tcp包的数量是否超过预设数量;
在缓存链表中所缓存的tcp包超过预设数量的情况下,向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
将所述目标tcp包发送到业务层进行处理。
4.根据权利要求1所述tcp重组方法,其特征在于,所述方法还包括:
每隔预设时间间隔,触发定时检测,获取当前时刻的缓存链表;
遍历当前时刻的缓存链表,在当前时刻的缓存链表中存在未遍历的连接时,检测所述连接的缓存链表中的首个tcp包是否超时;
若所述连接的缓存链表中的首个tcp包超时,则向业务层发送一个丢包事件;
将所述连接的缓存链表中的首个tcp包发送到业务层进行处理。
5.根据权利要求4所述tcp重组方法,其特征在于,在所述将所述向业务层发送一个丢包事件的步骤之后,所述方法还包括:
删除连接的缓存链表中的首个tcp包,得到更新后的缓存链表;
计算当前期望的下一个期望,得到更新后的期望;
当更新后的缓存链表中的首个tcp包不符合更新后的期望时,继续对当前时刻的缓存链表进行遍历。
6.根据权利要求5所述tcp重组方法,其特征在于,在所述计算当前期望的下一个期望,得到更新后的期望的步骤之后,所述方法还包括:
当更新后的缓存链表中的首个tcp包符合更新后的期望时,将所述更新后的缓存链表中的首个tcp包发送到业务层进行处理;
删除更新后的缓存链表中的首个tcp包,得到目标缓存链表,并对更新后的期望继续进行更新,得到目标期望。
7.一种tcp重组装置,其特征在于,包括:
缓存模块,用于在当前tcp包的序列不满足期望的情况下,按照当前tcp包的序列顺序,将当前tcp包存储到缓存链表中;
处理模块,用于在缓存链表中所缓存的tcp包超过预设数量的情况下,则向业务层发送一个丢包事件,并提取所述缓存链表中的首个tcp包,作为目标tcp包;
发送模块,用于将所述目标tcp包发送到业务层进行处理。
8.根据权利要求7所述的tcp重组装置,其特征在于,所述装置还包括:
更新模块,用于在当前tcp包的序列满足期望序列的情况下,将所述当前tcp包发送到业务层进行处理,并更新期望;
检测模块,用于检测所述缓存链表中的首个tcp包的序列,是否满足更新后的期望;
计算模块,用于在所述缓存链表中的首个tcp包的序列,满足更新后的期望时,将所述缓存链表中的首个tcp包,作为目标tcp包,发送到业务层进行处理。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述tcp重组方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述tcp重组方法的步骤。
技术总结