CN106911644A - 一种报文重组方法和设备 - Google Patents
一种报文重组方法和设备 Download PDFInfo
- Publication number
- CN106911644A CN106911644A CN201510980136.8A CN201510980136A CN106911644A CN 106911644 A CN106911644 A CN 106911644A CN 201510980136 A CN201510980136 A CN 201510980136A CN 106911644 A CN106911644 A CN 106911644A
- Authority
- CN
- China
- Prior art keywords
- tcp
- message
- tcp message
- seq
- group
- 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
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]
- H04L69/163—In-band adaptation of TCP data exchange; In-band control procedures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9057—Arrangements for supporting packet reassembly or resequencing
Abstract
本发明实施例涉及通信技术领域,尤其涉及一种报文重组方法和设备,用于通过简单的方法实现报文的重组。本发明实施例中,接收待重组的TCP会话对应的TCP报文,并在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。如此,可仅通过TCP报文的ACK和SEQ即可实现对报文的重组,方法简单高效。
Description
技术领域
本发明实施例涉及通信领域,尤其涉及一种报文重组方法和设备。
背景技术
随着网络通信流量的迅速增长,通常需要对传输的报文进行统计分析,以便检测安全威胁和了解用户需求。在对传输的报文进行统计分析之前需要先采集这些报文。
传输控制协议(Transfer Control Protocol,简称TCP)是一种面向连接的,基于字节流的运输层通信协议。TCP连接具有请求和响应两个对应的方向,每个TCP包具有序列号(Sequence,简称SEQ)、确认号(Acknowledgement,简称ACK)及数据包的长度(Length,简称LEN)等参数。单个TCP包的数据长度有限,当应用层的数据较大时,会将其拆分为几个TCP数据包发送,所以应用层在解析收到的TCP包数据时,必须先将拆分的TCP包进行重组。
现有技术中提供一种报文重组的方法,根据TCP分片报文的源网络协议(Internet Protocol,简称IP)、目的IP和源端口确定超文本传输协议(HyperTextTransfer Protocol,简称HTTP)报文所属的TCP会话;根据哈希函数计算出TCP会话的哈希关键字,将接收的TCP分片报文按照报文序号顺序链接至已建立的TCP会话的哈希链表中;当接收到TCP会话的全部TCP分片报文后,根据TCP会话对应的哈希链表进行HTTP报文重组。可见,该方法中,根据TCP分片报文的源IP、目的IP和源端口确定HTTP报文所属的TCP会话,需要通过哈希函数计算出TCP会话的哈希关键字,算法比较复杂,多次计算在海量数据的情况下重组效率较低。
综上,亟需一种报文重组方法,用于通过简单的方法实现报文的重组。
发明内容
本发明实施例提供一种报文重组方法,用于通过简单的方法实现报文的重组。
本发明实施例提供一种TCP报文重组方法,包括:
确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的序列号SEQ判断当前接收的TCP报文是否为正常顺序到达;
若当前接收的TCP报文为正常顺序到达,则将当前TCP报文放入正常队列;否则,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文;
根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列;
在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。
可选地,确定当前接收的TCP报文是否为待重组的TCP会话,具体包括:
预先配置待重组TCP会话对应的网络协议IP和端口;
若确定接收到的TCP报文的源IP和源端口为待重组TCP会话对应的IP和端口,或者确定接收到的TCP报文的目标IP和目标端口为待重组TCP会话对应的IP和端口,则确定接收到TCP报文为待重组TCP会话;
否则,则确定接收到TCP报文不是待重组TCP会话。
可选地,通过以下方式确定接收到的当前TCP报文为正常顺序到达:
接收到的当前TCP报文的SEQ等于正常队列的最后一个TCP报文的SEQ与正常队列的最后一个TCP报文的长度LEN之和。
可选地,根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列,具体包括:
若当前TCP报文的SEQ等于上一个TCP报文的SEQ,且当前TCP报文的LEN不大于上一个TCP报文的LEN,则:
将当前TCP报文的所有内容确定为重复内容,并将当前TCP报文丢弃。
可选地,根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列,具体包括:
若当前TCP报文的SEQ大于上一个TCP报文的SEQ,当前TCP报文的SEQ小于上一个TCP报文的SEQ与LEN之和,且当前TCP报文的SEQ与LEN之和大于上一个TCP报文的SEQ与LEN之和;则:
将当前TCP报文中的前M个字节作为重复内容,并从当前TCP报文中将重复内容删除;其中,M等于上一个TCP报文的SEQ与LEN之和减去当前TCP报文的SEQ所得的差值;
重置当前TCP报文的SEQ,重置之后的当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和;
若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
可选地,根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列,具体包括:
若确定当前TCP报文的SEQ大于上一个TCP报文的SEQ与LEN之和时,确定当前TCP报文与上一个TCP报文没有重复内容,将当前TCP报文放入失序队列;和/或
若确定当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和时,则确定当前TCP报文与上一个TCP报文没有重复内容,若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
可选地,确定待重组TCP会话对应的所有TCP报文已经传输完毕,具体包括:
在当前TCP报文的FIN位为1时,确定待重组TCP会话对应的所有TCP报文已经传输完毕。
可选地,根据每个TCP会话的ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文之后,还包括:
针对多组TCP报文中的一组TCP报文,若一组TCP报文的目标IP和目标端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为请求报文组;若一组TCP报文的源IP和源端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为响应报文组;
针对多组TCP报文,对多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组;其中匹配的一对请求报文组和响应报文组满足匹配条件,匹配条件为:请求报文组的ACK等于响应报文组的第一个TCP报文的SEQ,且请求报文组中的最后一个TCP报文的SEQ与LEN之和等于响应报文组的ACK。
可选地,针对多组TCP报文,对多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组之后,还包括:
针对至少一对匹配的请求报文组和响应报文组中的每对请求报文组和响应报文组,执行:
对请求报文组和响应报文组分别进行解析,从请求报文组中解析出请求状态行、请求头以及请求内容,从响应报文组中解析出响应状态行、响应头以及响应内容;
根据请求状态行、请求头以及请求内容匹配出请求报文对应的业务,根据响应状态行、响应头以及响应内容确定业务的执行结果。
本发明实施例提供一种TCP报文重组设备,包括:
确定单元,用于确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的序列号SEQ判断当前接收的TCP报文是否为正常顺序到达;若当前接收的TCP报文为正常顺序到达,则将当前TCP报文放入正常队列;否则,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文;
处理单元,用于根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列;
重组单元,用于在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。
可选地,确定单元,具体用于:预先配置待重组TCP会话对应的网络协议IP和端口;
若确定接收到的TCP报文的源IP和源端口为待重组TCP会话对应的IP和端口,或者确定接收到的TCP报文的目标IP和目标端口为待重组TCP会话对应的IP和端口,则确定接收到TCP报文为待重组TCP会话;
否则,则确定接收到TCP报文不是待重组TCP会话。
可选地,通过以下方式确定接收到的当前TCP报文为正常顺序到达:
接收到的当前TCP报文的SEQ等于正常队列的最后一个TCP报文的SEQ与正常队列的最后一个TCP报文的长度LEN之和。
可选地,处理单元,具体用于:
若当前TCP报文的SEQ等于上一个TCP报文的SEQ,且当前TCP报文的LEN不大于上一个TCP报文的LEN,则:
将当前TCP报文的所有内容确定为重复内容,并将当前TCP报文丢弃。
可选地,处理单元,具体用于:
若当前TCP报文的SEQ大于上一个TCP报文的SEQ,当前TCP报文的SEQ小于上一个TCP报文的SEQ与LEN之和,且当前TCP报文的SEQ与LEN之和大于上一个TCP报文的SEQ与LEN之和;则:
将当前TCP报文中的前M个字节作为重复内容,并从当前TCP报文中将重复内容删除;其中,M等于上一个TCP报文的SEQ与LEN之和减去当前TCP报文的SEQ所得的差值;
重置当前TCP报文的SEQ,重置之后的当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和;
若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
可选地,处理单元,具体用于:
若确定当前TCP报文的SEQ大于上一个TCP报文的SEQ与LEN之和时,确定当前TCP报文与上一个TCP报文没有重复内容,将当前TCP报文放入失序队列;和/或
若确定当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和时,则确定当前TCP报文与上一个TCP报文没有重复内容,若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
可选地,重组单元,具体用于:
在当前TCP报文的FIN位为1时,确定待重组TCP会话对应的所有TCP报文已经传输完毕。
可选地,还包括还原单元,用于:
在根据每个TCP会话的ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文之后,针对多组TCP报文中的一组TCP报文,若一组TCP报文的目标IP和目标端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为请求报文组;若一组TCP报文的源IP和源端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为响应报文组;
针对多组TCP报文,对多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组;其中匹配的一对请求报文组和响应报文组满足匹配条件,匹配条件为:请求报文组的ACK等于响应报文组的第一个TCP报文的SEQ,且请求报文组中的最后一个TCP报文的SEQ与LEN之和等于响应报文组的ACK。
可选地,还原单元,还用于:
针对至少一对匹配的请求报文组和响应报文组中的每对请求报文组和响应报文组,执行:
对请求报文组和响应报文组分别进行解析,从请求报文组中解析出请求状态行、请求头以及请求内容,从响应报文组中解析出响应状态行、响应头以及响应内容;
根据请求状态行、请求头以及请求内容匹配出请求报文对应的业务,根据响应状态行、响应头以及响应内容确定业务的执行结果。
本发明实施例中,确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的SEQ判断当前接收的TCP报文是否为正常顺序到达;若当前接收的TCP报文为正常顺序到达,则将当前TCP报文放入正常队列;否则,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文;根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列;在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。由于根据上一个TCP报文对当前TCP报文进行去重操作,因此可将当前TCP报文中与上一个TCP报文中重复的内容进行删除,避免了因报文重复所造成的报文重叠的问题;进一步,由于在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文,如此,可仅通过TCP报文的ACK和SEQ即可实现对报文的重组,方法简单高效。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例适用的一种***网络架构示意图;
图2为本发明实施例提供的一种报文重组的方法流程示意图;
图3为本发明实施例提供的一种报文重组的设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示例性示出了本发明实施例适用的一种***架构示意图,如图1所示,该***架构中包括终端101和终端102,终端101和终端102之间通过交换机103相互发送报文,该***架构中还包括数据采集设备104,数据采集设备104连接于交换机103上,用于采集终端101和终端102之间发送的报文。
图2示例性示出了本发明实施例提供的一种TCP报文重组方法的流程示意图。
基于图1所示的***架构,如图2所示,本发明实施例提供的一种TCP报文重组方法,包括:
步骤201,确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的序列号SEQ判断当前接收的TCP报文是否为正常顺序到达;
步骤202,若当前接收的TCP报文为正常顺序到达,则将当前TCP报文放入正常队列;否则,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文;
步骤203,根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列;
步骤204,在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。
由于根据上一个TCP报文对当前TCP报文进行去重操作,因此可将当前TCP报文中与上一个TCP报文中重复的内容进行删除,避免了因报文重复所造成的报文重组失败的问题;进一步,由于在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文,如此,可仅通过TCP报文的ACK和SEQ即可实现对报文的重组,方法简单高效。
可选地,上述步骤201中,确定当前接收的TCP报文是否为待重组的TCP会话,具体包括:
预先配置待重组TCP会话对应的IP和端口;
若确定接收到的TCP报文的源IP和源端口为待重组TCP会话对应的IP和端口,或者确定接收到的TCP报文的目标IP和目标端口为待重组TCP会话对应的IP和端口,则确定接收到TCP报文为待重组TCP会话;否则,则确定接收到TCP报文不是待重组TCP会话。
具体来说,接收到一个报文,先根据该报文的底层网络数据包包头的协议号判断该报文是否为TCP报文,若是,则进一步判断该报文是否为待重组TCP会话对应的报文;若该报文不是TCP报文,则丢弃接收到的报文。
进一步根据预设的待重组TCP会话对应的网络协议IP和端口,确定接收到的报文是否为待重组TCP会话对应的报文。举个例子,比如预设的待重组TCP会话对应的IP和端口为待重组TCP会话的目标终端的IP和端口,则:
如果接收到的TCP报文的源IP和源端口为待重组TCP会话对应的IP和端口,则该接收到的TCP报文为待重组TCP会话中的响应报文;如果确定接收到的TCP报文的目标IP和目标端口为待重组TCP会话对应的IP和端口,则该接收到的TCP报文为待重组TCP会话中的请求报文。待重组TCP会话中包括请求报文和响应报文。
可选地,上述步骤202中,通过以下方式确定接收到的当前TCP报文为正常顺序到达:接收到的当前TCP报文的SEQ等于正常队列的最后一个TCP报文的SEQ与正常队列的最后一个TCP报文的LEN之和。
上述步骤202中,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文,具体来说,先从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出SEQ不大于当前TCP报文的SEQ的所有TCP报文,之后从确定出的SEQ不大于当前TCP报文的SEQ的所有TCP报文中确定出SEQ最大的的一个TCP报文,即为上一个TCP报文。
举个例子,用于说明上述步骤202,首先接收到的TCP报文的SEQ为1,SEQ为1的TCP报文的LEN为2,此时,将SEQ为1的TCP报文放入正常队列;SEQ为1的TCP报文为正常队列的最后一个TCP报文;
接着接收到的TCP报文的SEQ为3,SEQ为3的TCP报文的LEN为2,此时,由于SEQ为3的TCP报文的SEQ等于SEQ为1的TCP报文的SEQ与LEN的和,因此将SEQ为3的TCP报文放入正常队列;SEQ为3的TCP报文为正常队列的最后一个TCP报文;
接着接收到的TCP报文的SEQ为8,SEQ为8的TCP报文的LEN为2,此时,失序队列中没有TCP报文,因此从正常队列的最后一个TCP报文和失序队列中的所有TCP报文中确定出SEQ不大于当前TCP报文的SEQ的所有TCP报文,之后从SEQ不大于当前TCP报文的SEQ的所有TCP报文中确定出SEQ最大的TCP报文,即为SEQ为3的TCP报文的SEQ,即确定出的上一个TCP报文为SEQ为3的TCP报文的SEQ,进一步,由于SEQ为8的TCP报文的SEQ大于SEQ为3的TCP报文的SEQ和LEN之和,所以,将SEQ为8的TCP报文放入失序队列;SEQ为8的TCP报文为失序队列中的所有TCP报文;
接着接收到的TCP报文的SEQ为10,SEQ为10的TCP报文的LEN为3,此时,失序队列中包括SEQ为8的TCP报文,且SEQ为3的TCP报文为正常队列的最后一个TCP报文,因此从正常队列的最后一个TCP报文和失序队列中的所有TCP报文中确定出不大于当前TCP报文的SEQ的所有TCP报文分别为:SEQ为8的TCP报文和SEQ为3的TCP报文;从SEQ为8的TCP报文和SEQ为3的TCP报文中确定出SEQ最大的TCP报文为:SEQ为8的TCP报文,即确定出的上一个TCP报文为SEQ为8的TCP报文的SEQ,进一步,由于SEQ为10的TCP报文的SEQ等于SEQ为8的TCP报文的SEQ和LEN之和,且SEQ为8的TCP报文位于失序队列,因此将SEQ为10的TCP报文放入失序队列;此时,失序队列包括SEQ为8的TCP报文和SEQ为10的TCP报文;
接着接收到的TCP报文的SEQ为13,SEQ为13的TCP报文的LEN为2,此时,失序队列中包括SEQ为8的TCP报文和SEQ为10的TCP报文,且SEQ为3的TCP报文为正常队列的最后一个TCP报文,因此从正常队列的最后一个TCP报文和失序队列中的所有TCP报文中确定出不大于当前TCP报文的SEQ的所有TCP报文分别为:SEQ为8的TCP报文、SEQ为10的TCP报文、SEQ为3的TCP报文;从SEQ为8的TCP报文、SEQ为10的TCP报文和SEQ为3的TCP报文中确定出SEQ最大的TCP报文为:SEQ为10的TCP报文,即确定出的上一个TCP报文为SEQ为10的TCP报文的SEQ,进一步,由于SEQ为13的TCP报文的SEQ等于SEQ为10的TCP报文的SEQ和LEN之和,且SEQ为10的TCP报文位于失序队列,因此将SEQ为13的TCP报文放入失序队列;此时,失序队列包括SEQ为8的TCP报文、SEQ为10的TCP报文、SEQ为13的TCP报文。
可选地,上述步骤203,根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列,具体包括多种实现方式,本发明实施例中提供以下几种可选地实施方式:
方式一,若当前TCP报文的SEQ等于上一个TCP报文的SEQ,且当前TCP报文的LEN不大于上一个TCP报文的LEN,则将当前TCP报文的所有内容确定为重复内容,并将当前TCP报文丢弃。
方式二,若当前TCP报文的SEQ大于上一个TCP报文的SEQ,当前TCP报文的SEQ小于上一个TCP报文的SEQ与LEN之和,且当前TCP报文的SEQ与LEN之和大于上一个TCP报文的SEQ与LEN之和;则:
将当前TCP报文中的前M个字节作为重复内容,并从当前TCP报文中将重复内容删除;其中,M等于上一个TCP报文的SEQ与LEN之和减去当前TCP报文的SEQ所得的差值;
重置当前TCP报文的SEQ,重置之后的当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和;
若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
方式三,若确定当前TCP报文的SEQ大于上一个TCP报文的SEQ与LEN之和时,确定当前TCP报文与上一个TCP报文没有重复内容,将当前TCP报文放入失序队列。
方式四,若确定当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和时,则确定当前TCP报文与上一个TCP报文没有重复内容,若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
为了更清楚的介绍上述方法,下面以SEQ1表示上一个TCP报文的SEQ,以LEN1表示上一个TCP报文的LEN,以SEQ2表示当前TCP报文的SEQ,以LEN2表示当前TCP报文的LEN。则:
上述方式一中,若SEQ2=SEQ1,且LEN2≤LEN1,则丢弃当前TCP报文;
上述方式二中,若SEQ2>SEQ1,且SEQ2<(SEQ1+LEN1),且(SEQ2+LEN2)>(SEQ1+LEN1),则将当前TCP报文中的前M个字节删除,M=[(SEQ1+LEN1)-SEQ2];并且更新当前TCP报文的SEQ,更新后的当前的TCP报文的SEQ为(SEQ1+LEN1);若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列;
上述方式三中,若SEQ2>(SEQ1+LEN1),则确定当前TCP报文与上一个TCP报文没有重复内容,且当前TCP报文为提前到达的报文,此时将该当前的TCP报文放入失序队列;
上述方式四中,若SEQ2=(SEQ1+LEN1),则确定当前TCP报文与上一个TCP报文没有重复内容,若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
可选地,上述步骤204中,确定待重组TCP会话对应的所有TCP报文已经传输完毕,具体包括:在当前TCP报文的FIN位为1时,确定待重组TCP会话对应的所有TCP报文已经传输完毕。
具体来说:一个大的数据包被拆分为许多个小的数据包等待传输(比如从终端A传给终端B),每个数据包里面都有FIN位和RST位,默认值均为0。FIN位用来表示正常关闭连接,与FIN位作用类似。RST位表示由于网络异常导致的关闭连接。
在实际数据传输过程中,当一个大的数据包被拆分所得到的多个小的数据包均传输完毕时,则A会给B发送一个标记包,该标记包中FIN位为1,表示数据传输完毕可以关掉连接,此时,针对接收到的TCP会话的所有报文进行重组。
如果在A传数据包给B的过程中遇到异常情况,比如网络中断,而此时一个大的数据包被拆分所得到的多个小的数据包还未传输完毕,此时A不必等所有的数据包都发出去,直接就丢弃缓存区中的由该一个大的数据包拆分得到的小的数据包,并且向B发送一个标记包,该标记包中RST位为1,B收到该RST位为1的数据包后,也不必发送ACK来确认。当报文重组设备分析出该TCP会话中存在RST位为1的标记包,则确定该TCP会话对应的业务执行失败。
上述步骤204中,可选地,根据每个TCP会话的ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文之后,还包括:
针对多组TCP报文中的一组TCP报文,若一组TCP报文的目标IP和目标端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为请求报文组;若一组TCP报文的源IP和源端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为响应报文组;
针对多组TCP报文,对多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组;其中匹配的一对请求报文组和响应报文组满足匹配条件,匹配条件为:
请求报文组的ACK等于响应报文组的第一个TCP报文的SEQ,且请求报文组中的最后一个TCP报文的SEQ与LEN之和等于响应报文组的ACK。
具体来说,TCP会话中的一个请求或一个响应拆成多个TCP报文时,该多个TCP报文的ACK均相同,因此,本发明实施例中将同一个ACK对应的所有TCP报文归为一组,并且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列,此时每组TCP报文即为一个拆分前的请求或者为一个拆分前的响应。
TCP会话中包括多组TCP报文,先确定每组TCP报文是请求报文组还是响应报文组,之后将请求报文组和响应报文组进行匹配。比如请求报文组中依据SEQ进行升序排列,则最后一个TCP报文即为该请求报文组中SEQ最大的一个TCP报文,该请求报文组中的最后一个TCP报文的SEQ为851912353,该请求报文组中的最后一个TCP报文的ACK为163461939,该请求报文组中的最后一个TCP报文的LEN为430;则与该请求报文组相匹配的响应报文组中的第一个TCP报文的SEQ为163461939,即与该请求报文组相匹配的响应报文组中的第一个TCP报文的SEQ等于该请求报文组中的最后一个TCP报文的ACK;响应报文组中的第一个TCP报文的ACK等于(851912353+430),即响应报文组中的第一个TCP报文的ACK等于该请求报文组中的最后一个TCP报文的SEQ与LEN之和。
通过上述方法将TCP报文组中相互匹配的请求报文组和响应报文组串在一起。可选地,上述步骤204中,针对多组TCP报文,对多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组之后,还包括:
针对至少一对匹配的请求报文组和响应报文组中的每对请求报文组和响应报文组,执行:
对请求报文组和响应报文组分别进行解析,从请求报文组中解析出请求状态行、请求头以及请求内容,从响应报文组中解析出响应状态行、响应头以及响应内容;
根据请求状态行、请求头以及请求内容匹配出请求报文对应的业务,根据响应状态行、响应头以及响应内容确定业务的执行结果。
举例来说,请求状态行可为:
POST/ncs/accept4gselfpackage/Accept4GSelfPackageAction/submitSoSzdAcceptBusi.menu HTTP/1.1
该请求报文组使用的http协议版本可为HTTP/1.1。
为了进一步介绍上述实施例,下面举一个具体示例。
对某个网络营业厅的核心交换机配置镜像端口,将数据采集设备与交换机的镜像端口进行连接。配置网络营业厅web服务的所有IP和端口信息。
通过数据采集设备采集网络营业厅来往的报文。把采集到的TCP数据包进行过滤,只处理与所配置的IP和端口匹配的TCP报文。根据TCP报文的SEQ、ACK以及LEN对TCP报文进行去重处理。
在确定TCP报文的FIN位为1时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;并确定出每组TCP报文是请求报文组还是响应报文组。
将请求报文组和响应报文组串在一起,并从请求报文组中解析出请求状态行、请求头以及请求内容,从响应报文组中解析出响应状态行、响应头以及响应内容。根据请求状态行、请求头以及请求内容匹配出请求报文对应的业务,根据响应状态行、响应头以及响应内容确定业务的执行结果,以实现对网络营业厅的业务进行监控的目的。
从上述内容可以看出:本发明实施例中,确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的SEQ判断当前接收的TCP报文是否为正常顺序到达;若当前接收的TCP报文为正常顺序到达,则将当前TCP报文放入正常队列;否则,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文;根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列;在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。由于根据上一个TCP报文对当前TCP报文进行去重操作,因此可将当前TCP报文中与上一个TCP报文中重复的内容进行删除,避免了因报文重复所造成的报文重叠的问题;进一步,由于在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文,如此,可仅通过TCP报文的ACK和SEQ即可实现对报文的重组,方法简单高效。
图3示例性示出了本发明实施例提供的一种TCP报文重组设备的结构示意图。
基于相同构思,如图3所示,本发明实施例提供一种TCP报文重组设备300,用于执行上述方法流程,包括确定单元301、处理单元302、重组单元303,可选地,还包括还原单元304:
确定单元,用于确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的序列号SEQ判断当前接收的TCP报文是否为正常顺序到达;若当前接收的TCP报文为正常顺序到达,则将当前TCP报文放入正常队列;否则,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文;
处理单元,用于根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列;
重组单元,用于在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。
可选地,确定单元,具体用于:预先配置待重组TCP会话对应的网络协议IP和端口;
若确定接收到的TCP报文的源IP和源端口为待重组TCP会话对应的IP和端口,或者确定接收到的TCP报文的目标IP和目标端口为待重组TCP会话对应的IP和端口,则确定接收到TCP报文为待重组TCP会话;
否则,则确定接收到TCP报文不是待重组TCP会话。
可选地,通过以下方式确定接收到的当前TCP报文为正常顺序到达:
接收到的当前TCP报文的SEQ等于正常队列的最后一个TCP报文的SEQ与正常队列的最后一个TCP报文的长度LEN之和。
可选地,处理单元,具体用于:
若当前TCP报文的SEQ等于上一个TCP报文的SEQ,且当前TCP报文的LEN不大于上一个TCP报文的LEN,则:
将当前TCP报文的所有内容确定为重复内容,并将当前TCP报文丢弃。
可选地,处理单元,具体用于:
若当前TCP报文的SEQ大于上一个TCP报文的SEQ,当前TCP报文的SEQ小于上一个TCP报文的SEQ与LEN之和,且当前TCP报文的SEQ与LEN之和大于上一个TCP报文的SEQ与LEN之和;则:
将当前TCP报文中的前M个字节作为重复内容,并从当前TCP报文中将重复内容删除;其中,M等于上一个TCP报文的SEQ与LEN之和减去当前TCP报文的SEQ所得的差值;
重置当前TCP报文的SEQ,重置之后的当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和;
若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
可选地,处理单元,具体用于:
若确定当前TCP报文的SEQ大于上一个TCP报文的SEQ与LEN之和时,确定当前TCP报文与上一个TCP报文没有重复内容,将当前TCP报文放入失序队列;和/或
若确定当前TCP报文的SEQ等于上一个TCP报文的SEQ与LEN之和时,则确定当前TCP报文与上一个TCP报文没有重复内容,若上一个TCP报文位于正常队列,则将当前TCP报文放入正常队列;若上一个TCP报文位于失序队列,则将当前TCP报文放入失序队列。
可选地,重组单元,具体用于:
在当前TCP报文的FIN位为1时,确定待重组TCP会话对应的所有TCP报文已经传输完毕。
可选地,还包括还原单元,用于:
在根据每个TCP会话的ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文之后,针对多组TCP报文中的一组TCP报文,若一组TCP报文的目标IP和目标端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为请求报文组;若一组TCP报文的源IP和源端口与预先配置的待重组TCP会话对应的IP和端口相同,则确定一组TCP报文为响应报文组;
针对多组TCP报文,对多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组;其中匹配的一对请求报文组和响应报文组满足匹配条件,匹配条件为:请求报文组的ACK等于响应报文组的第一个TCP报文的SEQ,且请求报文组中的最后一个TCP报文的SEQ与LEN之和等于响应报文组的ACK。
可选地,还原单元,还用于:
针对至少一对匹配的请求报文组和响应报文组中的每对请求报文组和响应报文组,执行:
对请求报文组和响应报文组分别进行解析,从请求报文组中解析出请求状态行、请求头以及请求内容,从响应报文组中解析出响应状态行、响应头以及响应内容;
根据请求状态行、请求头以及请求内容匹配出请求报文对应的业务,根据响应状态行、响应头以及响应内容确定业务的执行结果。
从上述内容可以看出:本发明实施例中,确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的SEQ判断当前接收的TCP报文是否为正常顺序到达;若当前接收的TCP报文为正常顺序到达,则将当前TCP报文放入正常队列;否则,从正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于当前TCP报文的SEQ的最大SEQ,将不大于当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为当前接收的TCP报文的上一个TCP报文;根据上一个TCP报文对当前TCP报文进行去重操作,并根据上一个TCP报文,确定当前TCP报文是否放入正常队列或失序队列;在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。由于根据上一个TCP报文对当前TCP报文进行去重操作,因此可将当前TCP报文中与上一个TCP报文中重复的内容进行删除,避免了因报文重复所造成的报文重叠的问题;进一步,由于在确定待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将正常队列和失序队列中的所有TCP报文进行重组,得到多组TCP报文,如此,可仅通过TCP报文的ACK和SEQ即可实现对报文的重组,方法简单高效。
本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的设备。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令设备的制造品,该指令设备实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (18)
1.一种TCP报文重组方法,其特征在于,包括:
确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的序列号SEQ判断所述当前接收的TCP报文是否为正常顺序到达;
若所述当前接收的TCP报文为正常顺序到达,则将所述当前TCP报文放入正常队列;否则,从所述正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于所述当前TCP报文的SEQ的最大SEQ,将所述不大于所述当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为所述当前接收的TCP报文的上一个TCP报文;
根据所述上一个TCP报文对所述当前TCP报文进行去重操作,并根据所述上一个TCP报文,确定所述当前TCP报文是否放入所述正常队列或所述失序队列;
在确定所述待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将所述正常队列和所述失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。
2.如权利要求1所述的方法,其特征在于,所述确定当前接收的TCP报文是否为待重组的TCP会话,具体包括:
预先配置所述待重组TCP会话对应的网络协议IP和端口;
若确定接收到的TCP报文的源IP和源端口为所述待重组TCP会话对应的IP和端口,或者确定接收到的TCP报文的目标IP和目标端口为所述待重组TCP会话对应的IP和端口,则确定接收到TCP报文为所述待重组TCP会话;
否则,则确定接收到TCP报文不是所述待重组TCP会话。
3.如权利要求1所述的方法,其特征在于,通过以下方式确定接收到的当前TCP报文为正常顺序到达:
接收到的所述当前TCP报文的SEQ等于所述正常队列的最后一个TCP报文的SEQ与所述正常队列的最后一个TCP报文的长度LEN之和。
4.如权利要求3所述的方法,其特征在于,所述根据所述上一个TCP报文对所述当前TCP报文进行去重操作,并根据所述上一个TCP报文,确定所述当前TCP报文是否放入所述正常队列或所述失序队列,具体包括:
若所述当前TCP报文的SEQ等于所述上一个TCP报文的SEQ,且所述当前TCP报文的LEN不大于所述上一个TCP报文的LEN,则:
将所述当前TCP报文的所有内容确定为重复内容,并将所述当前TCP报文丢弃。
5.如权利要求3所述的方法,其特征在于,所述根据所述上一个TCP报文对所述当前TCP报文进行去重操作,并根据所述上一个TCP报文,确定所述当前TCP报文是否放入所述正常队列或所述失序队列,具体包括:
若所述当前TCP报文的SEQ大于所述上一个TCP报文的SEQ,所述当前TCP报文的SEQ小于所述上一个TCP报文的SEQ与LEN之和,且所述当前TCP报文的SEQ与LEN之和大于所述上一个TCP报文的SEQ与LEN之和;则:
将所述当前TCP报文中的前M个字节作为重复内容,并从所述当前TCP报文中将所述重复内容删除;其中,所述M等于所述上一个TCP报文的SEQ与LEN之和减去所述当前TCP报文的SEQ所得的差值;
重置所述当前TCP报文的SEQ,重置之后的所述当前TCP报文的SEQ等于所述上一个TCP报文的SEQ与LEN之和;
若所述上一个TCP报文位于所述正常队列,则将所述当前TCP报文放入所述正常队列;若所述上一个TCP报文位于所述失序队列,则将所述当前TCP报文放入所述失序队列。
6.如权利要求3所述的方法,其特征在于,所述根据所述上一个TCP报文对所述当前TCP报文进行去重操作,并根据所述上一个TCP报文,确定所述当前TCP报文是否放入所述正常队列或所述失序队列,具体包括:
若确定所述当前TCP报文的SEQ大于所述上一个TCP报文的SEQ与LEN之和时,确定所述当前TCP报文与所述上一个TCP报文没有重复内容,将所述当前TCP报文放入所述失序队列;和/或
若确定所述当前TCP报文的SEQ等于所述上一个TCP报文的SEQ与LEN之和时,则确定所述当前TCP报文与所述上一个TCP报文没有重复内容,若所述上一个TCP报文位于所述正常队列,则将所述当前TCP报文放入所述正常队列;若所述上一个TCP报文位于所述失序队列,则将所述当前TCP报文放入所述失序队列。
7.如权利要求1所述的方法,其特征在于,所述确定所述待重组TCP会话对应的所有TCP报文已经传输完毕,具体包括:
在所述当前TCP报文的FIN位为1时,确定所述待重组TCP会话对应的所有TCP报文已经传输完毕。
8.如权利要求2所述的方法,其特征在于,所述根据每个TCP会话的ACK,将所述正常队列和所述失序队列中的所有TCP报文进行重组,得到多组TCP报文之后,还包括:
针对所述多组TCP报文中的一组TCP报文,若所述一组TCP报文的目标IP和目标端口与预先配置的所述待重组TCP会话对应的IP和端口相同,则确定所述一组TCP报文为请求报文组;若所述一组TCP报文的源IP和源端口与预先配置的所述待重组TCP会话对应的IP和端口相同,则确定所述一组TCP报文为响应报文组;
针对所述多组TCP报文,对所述多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组;其中所述匹配的一对请求报文组和响应报文组满足匹配条件,所述匹配条件为:请求报文组的ACK等于响应报文组的第一个TCP报文的SEQ,且请求报文组中的最后一个TCP报文的SEQ与LEN之和等于响应报文组的ACK。
9.如权利要求8所述的方法,其特征在于,所述针对所述多组TCP报文,对所述多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组之后,还包括:
针对所述至少一对匹配的请求报文组和响应报文组中的每对请求报文组和响应报文组,执行:
对所述请求报文组和所述响应报文组分别进行解析,从请求报文组中解析出请求状态行、请求头以及请求内容,从响应报文组中解析出响应状态行、响应头以及响应内容;
根据所述请求状态行、请求头以及请求内容匹配出所述请求报文对应的业务,根据所述响应状态行、响应头以及响应内容确定所述业务的执行结果。
10.一种TCP报文重组设备,其特征在于,包括:
确定单元,用于确定当前接收的传输控制协议TCP报文是否为待重组的TCP会话,若是,则根据当前接收的TCP报文的序列号SEQ判断所述当前接收的TCP报文是否为正常顺序到达;若所述当前接收的TCP报文为正常顺序到达,则将所述当前TCP报文放入正常队列;否则,从所述正常队列的最后一个TCP报文的SEQ和失序队列中的所有TCP报文的SEQ中确定出不大于所述当前TCP报文的SEQ的最大SEQ,将所述不大于所述当前TCP报文的SEQ的最大SEQ对应的TCP报文确定为所述当前接收的TCP报文的上一个TCP报文;
处理单元,用于根据所述上一个TCP报文对所述当前TCP报文进行去重操作,并根据所述上一个TCP报文,确定所述当前TCP报文是否放入所述正常队列或所述失序队列;
重组单元,用于在确定所述待重组TCP会话对应的所有TCP报文传输完毕时,根据每个TCP会话的确认号ACK,将所述正常队列和所述失序队列中的所有TCP报文进行重组,得到多组TCP报文;其中,每组TCP报文中的所有TCP报文的ACK相同;且每组TCP报文中的所有TCP报文按每个TCP报文的SEQ升序排列。
11.如权利要求10所述的设备,其特征在于,所述确定单元,具体用于:预先配置所述待重组TCP会话对应的网络协议IP和端口;
若确定接收到的TCP报文的源IP和源端口为所述待重组TCP会话对应的IP和端口,或者确定接收到的TCP报文的目标IP和目标端口为所述待重组TCP会话对应的IP和端口,则确定接收到TCP报文为所述待重组TCP会话;
否则,则确定接收到TCP报文不是所述待重组TCP会话。
12.如权利要求10所述的设备,其特征在于,通过以下方式确定接收到的当前TCP报文为正常顺序到达:
接收到的所述当前TCP报文的SEQ等于所述正常队列的最后一个TCP报文的SEQ与所述正常队列的最后一个TCP报文的长度LEN之和。
13.如权利要求12所述的设备,其特征在于,所述处理单元,具体用于:
若所述当前TCP报文的SEQ等于所述上一个TCP报文的SEQ,且所述当前TCP报文的LEN不大于所述上一个TCP报文的LEN,则:
将所述当前TCP报文的所有内容确定为重复内容,并将所述当前TCP报文丢弃。
14.如权利要求12所述的设备,其特征在于,所述处理单元,具体用于:
若所述当前TCP报文的SEQ大于所述上一个TCP报文的SEQ,所述当前TCP报文的SEQ小于所述上一个TCP报文的SEQ与LEN之和,且所述当前TCP报文的SEQ与LEN之和大于所述上一个TCP报文的SEQ与LEN之和;则:
将所述当前TCP报文中的前M个字节作为重复内容,并从所述当前TCP报文中将所述重复内容删除;其中,所述M等于所述上一个TCP报文的SEQ与LEN之和减去所述当前TCP报文的SEQ所得的差值;
重置所述当前TCP报文的SEQ,重置之后的所述当前TCP报文的SEQ等于所述上一个TCP报文的SEQ与LEN之和;
若所述上一个TCP报文位于所述正常队列,则将所述当前TCP报文放入所述正常队列;若所述上一个TCP报文位于所述失序队列,则将所述当前TCP报文放入所述失序队列。
15.如权利要求12所述的设备,其特征在于,所述处理单元,具体用于:
若确定所述当前TCP报文的SEQ大于所述上一个TCP报文的SEQ与LEN之和时,确定所述当前TCP报文与所述上一个TCP报文没有重复内容,将所述当前TCP报文放入所述失序队列;和/或
若确定所述当前TCP报文的SEQ等于所述上一个TCP报文的SEQ与LEN之和时,则确定所述当前TCP报文与所述上一个TCP报文没有重复内容,若所述上一个TCP报文位于所述正常队列,则将所述当前TCP报文放入所述正常队列;若所述上一个TCP报文位于所述失序队列,则将所述当前TCP报文放入所述失序队列。
16.如权利要求10所述的设备,其特征在于,所述重组单元,具体用于:
在所述当前TCP报文的FIN位为1时,确定所述待重组TCP会话对应的所有TCP报文已经传输完毕。
17.如权利要求11所述的设备,其特征在于,还包括还原单元,用于:
在所述根据每个TCP会话的ACK,将所述正常队列和所述失序队列中的所有TCP报文进行重组,得到多组TCP报文之后,针对所述多组TCP报文中的一组TCP报文,若所述一组TCP报文的目标IP和目标端口与预先配置的所述待重组TCP会话对应的IP和端口相同,则确定所述一组TCP报文为请求报文组;若所述一组TCP报文的源IP和源端口与预先配置的所述待重组TCP会话对应的IP和端口相同,则确定所述一组TCP报文为响应报文组;
针对所述多组TCP报文,对所述多组TCP报文中的请求报文组和响应报文组进行匹配,得到至少一对匹配的请求报文组和响应报文组;其中所述匹配的一对请求报文组和响应报文组满足匹配条件,所述匹配条件为:请求报文组的ACK等于响应报文组的第一个TCP报文的SEQ,且请求报文组中的最后一个TCP报文的SEQ与LEN之和等于响应报文组的ACK。
18.如权利要求17所述的设备,其特征在于,所述还原单元,还用于:
针对所述至少一对匹配的请求报文组和响应报文组中的每对请求报文组和响应报文组,执行:
对所述请求报文组和所述响应报文组分别进行解析,从请求报文组中解析出请求状态行、请求头以及请求内容,从响应报文组中解析出响应状态行、响应头以及响应内容;
根据所述请求状态行、请求头以及请求内容匹配出所述请求报文对应的业务,根据所述响应状态行、响应头以及响应内容确定所述业务的执行结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510980136.8A CN106911644A (zh) | 2015-12-23 | 2015-12-23 | 一种报文重组方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510980136.8A CN106911644A (zh) | 2015-12-23 | 2015-12-23 | 一种报文重组方法和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106911644A true CN106911644A (zh) | 2017-06-30 |
Family
ID=59200094
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510980136.8A Pending CN106911644A (zh) | 2015-12-23 | 2015-12-23 | 一种报文重组方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106911644A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107835138A (zh) * | 2017-09-15 | 2018-03-23 | 南京安讯科技有限责任公司 | 一种tcp通讯连接中报文排序方法 |
CN111371782A (zh) * | 2020-03-03 | 2020-07-03 | 深信服科技股份有限公司 | 一种报文传输方法及装置、存储介质 |
CN111741127A (zh) * | 2020-07-23 | 2020-10-02 | 杭州海康威视数字技术股份有限公司 | 通信连接阻断方法、装置、电子设备及存储介质 |
CN115190090A (zh) * | 2022-07-12 | 2022-10-14 | 国泰君安证券股份有限公司 | 基于哈希表和队列结构的tcp流重组行情监控处理方法、***、装置、处理器及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101841545A (zh) * | 2010-05-14 | 2010-09-22 | 中国科学院计算技术研究所 | 一种tcp流重组拼包方法和装置 |
CN102307151A (zh) * | 2011-10-10 | 2012-01-04 | 上海西默通信技术有限公司 | 基于http的网络数据包还原方法 |
WO2012162949A1 (zh) * | 2011-08-17 | 2012-12-06 | 华为技术有限公司 | 一种报文重组重排序方法、装置和*** |
CN103117948A (zh) * | 2013-02-22 | 2013-05-22 | 桂林电子科技大学 | 基于fpga的分级并行高速网络tcp流重组方法 |
CN105939297A (zh) * | 2015-10-26 | 2016-09-14 | 杭州迪普科技有限公司 | 一种tcp报文重组方法和装置 |
-
2015
- 2015-12-23 CN CN201510980136.8A patent/CN106911644A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101841545A (zh) * | 2010-05-14 | 2010-09-22 | 中国科学院计算技术研究所 | 一种tcp流重组拼包方法和装置 |
WO2012162949A1 (zh) * | 2011-08-17 | 2012-12-06 | 华为技术有限公司 | 一种报文重组重排序方法、装置和*** |
CN102307151A (zh) * | 2011-10-10 | 2012-01-04 | 上海西默通信技术有限公司 | 基于http的网络数据包还原方法 |
CN103117948A (zh) * | 2013-02-22 | 2013-05-22 | 桂林电子科技大学 | 基于fpga的分级并行高速网络tcp流重组方法 |
CN105939297A (zh) * | 2015-10-26 | 2016-09-14 | 杭州迪普科技有限公司 | 一种tcp报文重组方法和装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107835138A (zh) * | 2017-09-15 | 2018-03-23 | 南京安讯科技有限责任公司 | 一种tcp通讯连接中报文排序方法 |
CN107835138B (zh) * | 2017-09-15 | 2022-01-04 | 南京安讯科技有限责任公司 | 一种tcp通讯连接中报文排序方法 |
CN111371782A (zh) * | 2020-03-03 | 2020-07-03 | 深信服科技股份有限公司 | 一种报文传输方法及装置、存储介质 |
CN111741127A (zh) * | 2020-07-23 | 2020-10-02 | 杭州海康威视数字技术股份有限公司 | 通信连接阻断方法、装置、电子设备及存储介质 |
CN111741127B (zh) * | 2020-07-23 | 2020-11-13 | 杭州海康威视数字技术股份有限公司 | 通信连接阻断方法、装置、电子设备及存储介质 |
CN115190090A (zh) * | 2022-07-12 | 2022-10-14 | 国泰君安证券股份有限公司 | 基于哈希表和队列结构的tcp流重组行情监控处理方法、***、装置、处理器及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11057420B2 (en) | Detection of malware and malicious applications | |
EP3758412B1 (en) | Multichannel data transmission method, apparatus, system and computer-readable medium | |
JP5208945B2 (ja) | 無線通信ネットワークにおいてデータを伝送し、分析するための方法、およびその装置 | |
CN106911644A (zh) | 一种报文重组方法和设备 | |
CN107645398A (zh) | 一种诊断网络性能和故障的方法和装置 | |
US10063444B2 (en) | Network traffic capture analysis | |
CN106470116B (zh) | 一种网络故障检测与恢复方法及装置 | |
US20150036513A1 (en) | Multicore processing of bidirectional traffic flows | |
JP2001285400A (ja) | トラヒック統計情報収集方法 | |
CN101986648A (zh) | 一种tcp选项的协商方法、装置及网络设备 | |
CN1761244A (zh) | 设置边界网关协议路由选择通知功能的方法 | |
US20210250268A1 (en) | Method and Apparatus for Measuring End-to-End Packet Latency and Packet Delay Variation Via Deep Packet Inspection at an Intermediate Node of a Communication Network | |
CN108632931A (zh) | 一种基于5g网络的数据传输方法、装置、设备及介质 | |
CN107682434A (zh) | 一种水下传感器网络架构及其实现方法 | |
CN103117946A (zh) | 基于隔离装置与隔离网关结合应用的流量分担方法 | |
CN110838930B (zh) | 业务逻辑拓扑的生成方法及装置 | |
CN111478865A (zh) | 一种基于区间管理算法的tcp流重组技术 | |
CN103731376A (zh) | 堆叠设备上链路汇聚根端口选择的方法及*** | |
WO2016095379A1 (zh) | 丢包位置的辅助定位方法、装置及计算机存储介质 | |
CN104580171B (zh) | Tcp协议的传输方法、装置和*** | |
WO2022270767A1 (ko) | 지능형 네트워크 관리 시스템의 정보묶음 생성관리 장치 및 그 방법 | |
CN103348740B (zh) | 一种接入处理方法、设备和*** | |
CN107018518A (zh) | 一种获取链路检测信息的方法和*** | |
CN110166185A (zh) | 音频数据的处理方法、装置、存储介质和处理器 | |
CN105141476A (zh) | 一种tcp报文出错信息的获取方法和装置 |
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: 20170630 |