CN103888449A - 一种报文重组方法和装置 - Google Patents

一种报文重组方法和装置 Download PDF

Info

Publication number
CN103888449A
CN103888449A CN201410079548.XA CN201410079548A CN103888449A CN 103888449 A CN103888449 A CN 103888449A CN 201410079548 A CN201410079548 A CN 201410079548A CN 103888449 A CN103888449 A CN 103888449A
Authority
CN
China
Prior art keywords
tcp
message
fragment message
chain table
tcp session
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
Application number
CN201410079548.XA
Other languages
English (en)
Inventor
罗峰
黄苏支
李娜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
IZP (BEIJING) TECHNOLOGIES Co Ltd
Original Assignee
IZP (BEIJING) TECHNOLOGIES Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by IZP (BEIJING) TECHNOLOGIES Co Ltd filed Critical IZP (BEIJING) TECHNOLOGIES Co Ltd
Priority to CN201410079548.XA priority Critical patent/CN103888449A/zh
Publication of CN103888449A publication Critical patent/CN103888449A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本申请提供了一种报文重组方法和装置,其中,所述的方法包括:接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话;根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中;当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。因此,本申请能够解决现有技术中TCP分片报文重组效率低的问题。

Description

一种报文重组方法和装置
技术领域
本申请涉及网络技术领域,特别是涉及一种报文重组方法和装置。
背景技术
HTTP GET报文用于获取服务器上的数据信息,因此,目前大数据处理时,大部分是通过过滤TCP80(TCP协议+目的端口80)端口的HTTP GET报文,进而对过滤的HTTP GET报文进行分析来了解用户的需求。然而,HTTP GET报文中TCP分片报文量占到15%-23%,想要获取完整的HTTPGET报文,就需要对接收到的HTTP GET报文中的TCP分片报文进行重组。
目前,TCP重组方法通常是监测TCP传输过程中整个连接过程的全部数据,即三次握手建立连接,四次握手断开连接。中间传输数据时由于各个报文的TCP序列号满足一定的顺序关系,根据各个报文的TCP序列号进行TCP的重组。相当于一个布袋,在收到TCP三次握手时打开布袋,然后将各个报文放入布袋中,收到四次握手断开连接时,扎住布袋,在此基础上,在对TCP分片报文进行重组时,一方面,需要查找TCP分片报文的源IP和与TCP分片报文的源IP相对应的目的IP,以确定相应的TCP会话;另一方面,每次中间传输的TCP分片报文都需要多次比对同一TCP会话的源IP和与TCP分片报文的源IP相对应的目的IP,如果传输的TCP分片报文属于该TCP会话则将收到的TCP分片报文保存;直至TCP分片报文全部传输完毕,然后再根据各个TCP分片报文的TCP序列号进行排序,最终输出重组后的TCP报文。
可见,现有的TCP重组方法在TCP重组过程中,通过遍历多个TCP会话,查找TCP分片报文的源IP和与TCP分片报文的源IP相对应的目的IP,并且,在重组过程中,需要频繁比对同一TCP会话的多个TCP分片报文,因此造成TCP重组效率低。
发明内容
本申请提供一种报文重组方法和装置,以解决现有技术中TCP分片报文重组效率低的问题。
为了解决上述问题,本申请公开了一种报文重组方法,包括:
接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话;
根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中;
当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
优选地,所述根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中,包括:
根据哈希函数计算出所述TCP会话的哈希关键字;
判断所述哈希链表中是否已存在所述TCP会话的哈希关键字;
若存在,则将接收到的TCP分片报文按照报文序号顺序***到所述TCP会话的哈希链表中;
若不存在,则在所述哈希链表中***所述TCP会话的哈希关键字,并将接收到的所述TCP分片报文链接到***的所述哈希关键字对应的所述TCP会话的哈希链表中。
优选地,在所述接收HTTP报文的TCP分片报文的步骤之后,还包括:
利用循环数组存储接收到所述TCP会话的TCP分片报文。
优选地,利用循环数组存储接收到所述TCP会话的TCP分片报文的步骤包括:
判断所述循环数组存储空间是否已满;
若是,则根据接收到所述TCP分片报文反查所述TCP会话的哈希链表,若根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中,则将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文;若根据反查结果确定当前数组指针指示的TCP分片报文在所述哈希链表中,则将当前数组指针移到下一个循环数组中的TCP分片报文,直至根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中;
若否,则直接将所述TCP会话的TCP分片报文存储至所述循环数组。
优选地,所述根据所述TCP会话对应的哈希链表进行HTTP报文重组的步骤包括:
顺序读取所述TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合所述TCP分片报文,生成所述HTTP报文。
为了解决上述问题,本申请还公开了一种报文重组装置,包括:
确定模块,用于接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话;
建立模块,用于根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中;
重组模块,用于当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
优选地,所述建立模块包括:
计算模块,用于根据哈希函数计算出所述TCP会话的哈希关键字;
第一判断模块,用于判断所述哈希链表中是否已存在所述TCP会话的哈希关键字;
第一执行模块,用于若所述第一判断模块的判断结果为存在,则将接收到的TCP分片报文按照报文序号顺序***到所述TCP会话的哈希链表中;
第二执行模块,用于若所述第一判断模块的判断结果为不存在,则在所述哈希链表中***所述TCP会话的哈希关键字,并将接收到的所述TCP分片报文链接到***的所述哈希关键字对应的所述TCP会话的哈希链表中。
优选地,所述确定模块,还用于在接收HTTP报文的TCP分片报文之后,利用循环数组存储接收到所述TCP会话的TCP分片报文。
优选地,所述确定模块在利用循环数组存储接收到所述TCP会话的TCP分片报文时:
判断所述循环数组存储空间是否已满;
若是,则根据接收到所述TCP分片报文反查所述TCP会话的哈希链表,若根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中,则将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文;若根据反查结果确定当前数组指针指示的TCP分片报文在所述哈希链表中,则将当前数组指针移到下一个循环数组中的TCP分片报文,直至根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中;
若否,则直接将所述TCP会话的TCP分片报文存储至所述循环数组。
优选地,重组模块还用于在根据所述TCP会话对应的哈希链表进行HTTP报文重组之后,顺序读取所述TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合所述TCP分片报文,生成所述HTTP报文。
与现有技术相比,本申请包括以下优点:
首先,本申请中根据哈希函数计算出TCP会话的哈希关键字,将接收的TCP分片报文按照报文序号顺序链接至已建立的TCP会话的哈希链表中,顺序读取TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合TCP分片报文,生成HTTP报文。因接收到的TCP分片报文所对应的TCP会话在一个哈希表中具有固定的哈希关键字,通过该关键字可以直接查找到该TCP分片报文对应的TCP会话的哈希链表的位置,从而无需多次查找TCP分片报文的源IP和目的IP;并且,在确定了TCP分片报文对应的TCP会话后,即可按照该TCP分片报文的序号顺序链接至TCP会话的哈希链表中,一方面无需反复多次比对TCP分片报文,另一方面,在后续TCP分片报文输出时也无需再进行排序,由此,大大提高了TCP重组的效率。
附图说明
图1是本申请实施例一中的一种报文重组方法的流程图;
图2是本申请实施例二中的一种报文重组方法的流程图;
图3是本申请实施例三中的一种报文重组装置的结构框图;
图4是本申请实施例四中的一种报文重组装置的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
实施例一
参照图1,示出了本申请实施例一中的一种报文重组方法的流程图,包括:
步骤101:接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话。
在TCP传输过程中,接收到的HTTP报文的TCP分片报文主要包含源IP、目的IP、目的MAC地址和源端口,可以根据接收到TCP分片报文中的源IP、目的IP和源端口确定一个TCP分片报文所属的TCP会话。例如:如果TCP分片报文的源IP=11、TCP分片报文目的IP=22、TCP分片报文源端口=88,进一步,对上述源IP、目的IP和源端口顺序进行拼接,得到字符数组112288,可以以该字符数组标识该TCP会话。
步骤102:根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中。
其中,接收到的每个TCP分片报文都有报文序号,可以按照报文序号从小到大的顺序或者从大到小的顺序链接至已建立的所述TCP会话的哈希链表中。一个哈希关键字对应有一个TCP会话的链表,该TCP会话的多个TCP分片报文链接于该链表中。
步骤103:当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
HTTP报文头部以“GET”开始,尾部以“\r\n\r\n”结束,当TCP会话的TCP分片报文存在上述标志,且“GET”对应的TCP分片报文和“\r\n\r\n”对应的TCP分片报文之间的所有TCP分片报文的报文序号连续,就形成了完整的TCP会话报文,可以确定该TCP会话的全部TCP分片报文接收完毕。进而,顺序读取该链表上的各个节点组合成完整的HTTP报文。
需要说明的是,在本实施例一中的一种报文重组方法可以应用于服务器端。在实际应用中,也可以应用于客户端。
通过本实施例,根据哈希函数计算出TCP会话的哈希关键字,将接收的TCP分片报文按照报文序号顺序链接至已建立的TCP会话的哈希链表中,顺序读取TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合TCP分片报文,生成HTTP报文。因接收到的TCP分片报文所对应的TCP会话在一个哈希表中具有固定的哈希关键字,通过该关键字可以直接查找到该TCP分片报文对应的TCP会话的哈希链表的位置,从而无需多次查找TCP分片报文的源IP和目的IP;并且,在确定了TCP分片报文对应的TCP会话后,即可按照该TCP分片报文的序号顺序链接至TCP会话的哈希链表中,一方面无需反复多次比对TCP分片报文,另一方面,在后续TCP分片报文输出时也无需再进行排序,由此,大大提高了TCP重组的效率。
实施例二
参照图2,示出了本申请实施例二中的一种报文重组方法的流程图。
本实施例中的一种报文重组方法包括:
步骤201,接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话。
在接收HTTP报文的TCP分片报文的步骤之后,还包括:利用循环数组存储接收到TCP会话的TCP分片报文。
进一步地,本申请为了提高存放速度,采用申请静态内存空间的方式存储接收到TCP会话的TCP分片报文,即先申请一块大内存,将其分隔成数组,然后将接收到的TCP会话的TCP分片报文保存在分隔后的循环数组中。该循环数组至少保存2s内进入***的TCP分片报文。
优选地,利用循环数组存储接收到所述TCP会话的TCP分片报文的步骤包括:判断所述循环数组存储空间是否已满;若是,则根据接收到所述TCP分片报文反查所述TCP会话的哈希链表,若根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中,则将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文;若根据反查结果确定当前数组指针指示的TCP分片报文在所述哈希链表中,则将当前数组指针移到下一个循环数组中的TCP分片报文,直至根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中;
若否,则直接将所述TCP会话的TCP分片报文存储至所述循环数组。
步骤202,根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中。
优选地,本步骤包括:
步骤2021,根据哈希函数计算出所述TCP会话的哈希关键字。
其中,在计算TCP会话的哈希关键字时,一种优选的哈希函数为:hash={hash*seed}+{p_key[i]}。其中,seed代表TCP会话的散列值种子,*代表乘号,p_key代表由目的IP、源IP和源端口组成的TCP会话的字符数组,p_key[i]代表TCP会话字符数组的指针,{hash*seed}中的hash初始值定义等于0,循环开始后,{hash*seed}中的hash值为上一次hash计算的结果。
步骤2022,判断所述哈希链表中是否已存在所述TCP会话的哈希关键字;若存在,则执行步骤2023,若不存在,则执行步骤2024。
步骤2023,将接收到的TCP分片报文按照报文序号顺序***到所述TCP会话的哈希链表中。
若哈希链表中已存在TCP会话的哈希关键字,说明之前已接收过该TCP会话的TCP分片报文,将新接收的TCP分片报文按报文序号链接入该TCP会话的链表中即可。
步骤2024,在所述哈希链表中***所述TCP会话的哈希关键字,并将接收到的所述TCP分片报文链接到***的所述哈希关键字对应的所述TCP会话的哈希链表中。
若哈希链表中不存在TCP会话的哈希关键字,说明之前未接收过该TCP会话的TCP分片报文,需要新建该TCP会话对应的链表,进而将新接收的TCP分片报文***到该链表中。
步骤203:当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
进一步地,优选地,根据所述TCP会话对应的哈希链表进行HTTP报文重组的步骤包括:顺序读取所述TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合所述TCP分片报文,生成所述HTTP报文。
进一步地,以下为本申请所述方法的代码,用于辅助说明本申请所述方法的实现,具体如下:
Figure BDA0000473121440000081
Figure BDA0000473121440000091
对于以上的哈希函数算法,实验结果表明,大大提高了TCP重组的效率。
综上所述,本申请实施例一种报文重组方法主要包括以下优点:
首先,根据哈希函数计算出TCP会话的哈希关键字,将接收的TCP分片报文按照报文序号顺序链接至已建立的TCP会话的哈希链表中,顺序读取TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合TCP分片报文,生成HTTP报文。因接收到的TCP分片报文所对应的TCP会话在一个哈希表中具有固定的哈希关键字,通过该关键字可以直接查找到该TCP分片报文对应的TCP会话的哈希链表的位置,从而无需多次查找TCP分片报文的源IP和目的IP;并且,在确定了TCP分片报文对应的TCP会话后,即可按照该TCP分片报文的序号顺序链接至TCP会话的哈希链表中,一方面无需反复多次比对TCP分片报文,另一方面,在后续TCP分片报文输出时也无需再进行排序,由此,大大提高了TCP重组的效率。
其次,利用循环数组的方式,来删除接收到的不完整的TCP分片报文,即利用循环数组存储接收到TCP会话的TCP分片报文,根据接收到TCP分片报文反查所述TCP会话的哈希链表,根据反查结果确定当前数组指针指示的TCP分片报文是否在哈希链表中;如果在,将当前数组指针移到下一个循环数组中的TCP分片报文,如果不在,将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文,从而解决了TCP重组占用内存大的问题。
需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例。
基于上述方法实施例的说明,本申请还提供了相应的一种报文重组装置的实施例,来实现上述方法实施例所述的内容。
实施例三
参照图3,示出了本申请实施例三中的一种报文重组装置的结构框图,具体可以包括:
确定模块301,用于接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话。
建立模块302,用于根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中。
重组模块303,用于当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
需要说明的是,在本实施例三中的一种报文重组装置可以应用于服务器端。在实际应用中,也可以应用于客户端。
通过本实施例,根据哈希函数计算出TCP会话的哈希关键字,将接收的TCP分片报文按照报文序号顺序链接至已建立的TCP会话的哈希链表中,顺序读取TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合TCP分片报文,生成HTTP报文。因接收到的TCP分片报文所对应的TCP会话在一个哈希表中具有固定的哈希关键字,通过该关键字可以直接查找到该TCP分片报文对应的TCP会话的哈希链表的位置,从而无需多次查找TCP分片报文的源IP和目的IP;并且,在确定了TCP分片报文对应的TCP会话后,即可按照该TCP分片报文的序号顺序链接至TCP会话的哈希链表中,一方面无需反复多次比对TCP分片报文,另一方面,在后续TCP分片报文输出时也无需再进行排序,由此,大大提高了TCP重组的效率。
实施例四
参照图4,示出了本申请实施例四中的一种报文重组装置的结构框图。在本实施例中的一种报文重组装置包括:
确定模块401,用于接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话。
进一步地,确定模块,还用于在接收HTTP报文的TCP分片报文之后,利用循环数组存储接收到所述TCP会话的TCP分片报文。
进一步地,本申请为了提高存放速度,采用申请静态内存空间的方式存储接收到TCP会话的TCP分片报文,即先申请一块大内存,将其分隔成数组,然后将接收到的TCP会话的TCP分片报文保存在分隔后的循环数组中,该循环数组至少保存2s内进入***的TCP分片报文。
优选地,所述确定模块在利用循环数组存储接收到所述TCP会话的TCP分片报文时,判断所述循环数组存储空间是否已满;若是,则根据接收到所述TCP分片报文反查所述TCP会话的哈希链表,若根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中,则将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文;若根据反查结果确定当前数组指针指示的TCP分片报文在所述哈希链表中,则将当前数组指针移到下一个循环数组中的TCP分片报文,直至根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中;若否,则直接将所述TCP会话的TCP分片报文存储至所述循环数组。
建立模块402,用于根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中。
优选地,所述建立模块包括:
计算模块4021,用于根据哈希函数计算出所述TCP会话的哈希关键字。其中,在计算TCP会话的哈希关键字时,一种优选的哈希函数为:hash={hash*seed}+{p_key[i]}。其中,seed代表TCP会话的散列值种子,*代表乘号,p_key代表由目的IP、源IP和源端口组成的TCP会话的字符数组,p_key[i]代表TCP会话字符数组的指针,{hash*seed}中的hash初始值定义等于0,循环开始后,{hash*seed}中的hash值为上一次hash计算的结果。
第一判断模块4022,用于判断所述哈希链表中是否已存在所述TCP会话的哈希关键字;若存在,则执行第一执行模块4023,若不存在,则执行第二执行模块4024。
第一执行模块4023,用于若所述第一判断模块的判断结果为存在,则将接收到的TCP分片报文按照报文序号顺序***到所述TCP会话的哈希链表中。
若哈希链表中已存在TCP会话的哈希关键字,说明之前已接收过该TCP会话的TCP分片报文,将新接收的TCP分片报文按报文序号链接入该TCP会话的链表中即可。
第二执行模块4024,用于若所述第一判断模块的判断结果为不存在,则在所述哈希链表中***所述TCP会话的哈希关键字,并将接收到的所述TCP分片报文链接到***的所述哈希关键字对应的所述TCP会话的哈希链表中。
若哈希链表中不存在TCP会话的哈希关键字,说明之前未接收过该TCP会话的TCP分片报文,需要新建该TCP会话对应的链表,进而将新接收的TCP分片报文***到该链表中。
重组模块403,用于当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
进一步地,优选地,重组模块还用于根据TCP会话对应的哈希链表进行HTTP报文重组的之后顺序读取所述TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合所述TCP分片报文,生成所述HTTP报文。
综上所述,本申请实施例一种报文重组装置主要包括以下优点:
首先,根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中,顺序读取所述TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合所述TCP分片报文,生成所述HTTP报文。因接收到的TCP分片报文所对应的TCP会话在一个哈希表中具有固定的哈希关键字,通过该关键字可以直接查找到该TCP分片报文对应的TCP会话的哈希链表的位置,从而无需多次查找TCP分片报文的源IP和目的IP;并且,在确定了TCP分片报文对应的TCP会话后,即可按照该TCP分片报文的序号顺序链接至TCP会话的哈希链表中,一方面无需反复多次比对TCP分片报文,另一方面,在后续TCP分片报文输出时也无需再进行排序,由此,大大提高了TCP重组的效率。
其次,利用循环数组的方式,来删除接收到的不完整的TCP分片报文,即利用循环数组存储接收到TCP会话的TCP分片报文,根据接收到TCP分片报文反查所述TCP会话的哈希链表,根据反查结果确定当前数组指针指示的TCP分片报文是否在哈希链表中;如果在,将当前数组指针移到下一个循环数组中的TCP分片报文,如果不在,将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文,从而解决了TCP重组占用内存大的问题。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请所提供的一种报文重组方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (10)

1.一种报文重组方法,其特征在于,包括:
接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话;
根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中;
当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
2.根据权利要求1所述的方法,其特征在于,所述根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中,包括:
根据哈希函数计算出所述TCP会话的哈希关键字;
判断所述哈希链表中是否已存在所述TCP会话的哈希关键字;
若存在,则将接收到的TCP分片报文按照报文序号顺序***到所述TCP会话的哈希链表中;
若不存在,则在所述哈希链表中***所述TCP会话的哈希关键字,并将接收到的所述TCP分片报文链接到***的所述哈希关键字对应的所述TCP会话的哈希链表中。
3.根据权利要求1所述的方法,其特征在于,在所述接收HTTP报文的TCP分片报文的步骤之后,还包括:
利用循环数组存储接收到所述TCP会话的TCP分片报文。
4.根据权利要求3所述的方法,其特征在于,利用循环数组存储接收到所述TCP会话的TCP分片报文的步骤包括:
判断所述循环数组存储空间是否已满;
若是,则根据接收到所述TCP分片报文反查所述TCP会话的哈希链表,若根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中,则将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文;若根据反查结果确定当前数组指针指示的TCP分片报文在所述哈希链表中,则将当前数组指针移到下一个循环数组中的TCP分片报文,直至根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中;
若否,则直接将所述TCP会话的TCP分片报文存储至所述循环数组。
5.根据权利要求1所述的方法,其特征在于,所述根据所述TCP会话对应的哈希链表进行HTTP报文重组的步骤包括:
顺序读取所述TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合所述TCP分片报文,生成所述HTTP报文。
6.一种报文重组装置,其特征在于,包括:
确定模块,用于接收HTTP报文的TCP分片报文,根据TCP分片报文的源IP、目的IP和源端口确定所述HTTP报文所属的TCP会话;
建立模块,用于根据哈希函数计算出所述TCP会话的哈希关键字,将接收的所述TCP分片报文按照报文序号顺序链接至已建立的所述TCP会话的哈希链表中;
重组模块,用于当接收到所述TCP会话的全部TCP分片报文后,根据所述TCP会话对应的哈希链表进行HTTP报文重组。
7.根据权利要求6所述的装置,其特征在于,所述建立模块包括:
计算模块,用于根据哈希函数计算出所述TCP会话的哈希关键字;
第一判断模块,用于判断所述哈希链表中是否已存在所述TCP会话的哈希关键字;
第一执行模块,用于若所述第一判断模块的判断结果为存在,则将接收到的TCP分片报文按照报文序号顺序***到所述TCP会话的哈希链表中;
第二执行模块,用于若所述第一判断模块的判断结果为不存在,则在所述哈希链表中***所述TCP会话的哈希关键字,并将接收到的所述TCP分片报文链接到***的所述哈希关键字对应的所述TCP会话的哈希链表中。
8.根据权利要求6所述的装置,其特征在于,所述确定模块,还用于在接收HTTP报文的TCP分片报文之后,利用循环数组存储接收到所述TCP会话的TCP分片报文。
9.根据权利要求8所述的装置,其特征在于,所述确定模块在利用循环数组存储接收到所述TCP会话的TCP分片报文时:
判断所述循环数组存储空间是否已满;
若是,则根据接收到所述TCP分片报文反查所述TCP会话的哈希链表,若根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中,则将当前数组指针指示的TCP分片报文替换为所述接收到的TCP分片报文;若根据反查结果确定当前数组指针指示的TCP分片报文在所述哈希链表中,则将当前数组指针移到下一个循环数组中的TCP分片报文,直至根据反查结果确定当前数组指针指示的TCP分片报文未在所述哈希链表中;
若否,则直接将所述TCP会话的TCP分片报文存储至所述循环数组。
10.根据权利要求6所述的装置,其特征在于,重组模块还用于在根据所述TCP会话对应的哈希链表进行HTTP报文重组之后,顺序读取所述TCP会话对应的哈希链表中的各个节点的TCP分片报文,按照读取的顺序组合所述TCP分片报文,生成所述HTTP报文。
CN201410079548.XA 2014-03-05 2014-03-05 一种报文重组方法和装置 Pending CN103888449A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410079548.XA CN103888449A (zh) 2014-03-05 2014-03-05 一种报文重组方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410079548.XA CN103888449A (zh) 2014-03-05 2014-03-05 一种报文重组方法和装置

Publications (1)

Publication Number Publication Date
CN103888449A true CN103888449A (zh) 2014-06-25

Family

ID=50957169

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410079548.XA Pending CN103888449A (zh) 2014-03-05 2014-03-05 一种报文重组方法和装置

Country Status (1)

Country Link
CN (1) CN103888449A (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104253863A (zh) * 2014-09-15 2014-12-31 重庆邮电大学 一种基于Hadoop平台和分布式处理编程模型的TCP流重组方法
CN105743728A (zh) * 2014-12-11 2016-07-06 杭州迪普科技有限公司 一种保证数据块顺序的方法及装置
CN105939297A (zh) * 2015-10-26 2016-09-14 杭州迪普科技有限公司 一种tcp报文重组方法和装置
CN108011850A (zh) * 2017-12-18 2018-05-08 北京百度网讯科技有限公司 数据包的重组方法及装置、计算机设备及可读介质
CN111083075A (zh) * 2019-12-20 2020-04-28 盛科网络(苏州)有限公司 多核SoC处理报文的方法及应用其的SoC
CN112583936A (zh) * 2020-12-29 2021-03-30 上海阅维科技股份有限公司 重组传输会话流的方法
CN112600809A (zh) * 2020-12-08 2021-04-02 阿米华晟数据科技(江苏)有限公司 会话资源的管理方法、装置、设备及存储介质
CN113114472A (zh) * 2021-03-01 2021-07-13 北京信息科技大学 一种基于报文哈希链的认证方法及***
CN115022069A (zh) * 2022-06-20 2022-09-06 武汉思普崚技术有限公司 用于网络攻击检测的ip分片报文重组方法及装置
CN115190090A (zh) * 2022-07-12 2022-10-14 国泰君安证券股份有限公司 基于哈希表和队列结构的tcp流重组行情监控处理方法、***、装置、处理器及存储介质

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104253863B (zh) * 2014-09-15 2017-07-28 重庆邮电大学 一种基于Hadoop平台和分布式处理编程模型的TCP流重组方法
CN104253863A (zh) * 2014-09-15 2014-12-31 重庆邮电大学 一种基于Hadoop平台和分布式处理编程模型的TCP流重组方法
CN105743728A (zh) * 2014-12-11 2016-07-06 杭州迪普科技有限公司 一种保证数据块顺序的方法及装置
CN105939297A (zh) * 2015-10-26 2016-09-14 杭州迪普科技有限公司 一种tcp报文重组方法和装置
CN105939297B (zh) * 2015-10-26 2019-03-15 杭州迪普科技股份有限公司 一种tcp报文重组方法和装置
CN108011850B (zh) * 2017-12-18 2021-08-17 北京百度网讯科技有限公司 数据包的重组方法及装置、计算机设备及可读介质
CN108011850A (zh) * 2017-12-18 2018-05-08 北京百度网讯科技有限公司 数据包的重组方法及装置、计算机设备及可读介质
CN111083075A (zh) * 2019-12-20 2020-04-28 盛科网络(苏州)有限公司 多核SoC处理报文的方法及应用其的SoC
CN111083075B (zh) * 2019-12-20 2022-01-11 苏州盛科通信股份有限公司 多核SoC处理报文的方法及应用其的SoC
CN112600809A (zh) * 2020-12-08 2021-04-02 阿米华晟数据科技(江苏)有限公司 会话资源的管理方法、装置、设备及存储介质
CN112583936A (zh) * 2020-12-29 2021-03-30 上海阅维科技股份有限公司 重组传输会话流的方法
CN113114472A (zh) * 2021-03-01 2021-07-13 北京信息科技大学 一种基于报文哈希链的认证方法及***
CN115022069A (zh) * 2022-06-20 2022-09-06 武汉思普崚技术有限公司 用于网络攻击检测的ip分片报文重组方法及装置
CN115022069B (zh) * 2022-06-20 2024-04-26 武汉思普崚技术有限公司 用于网络攻击检测的ip分片报文重组方法及装置
CN115190090A (zh) * 2022-07-12 2022-10-14 国泰君安证券股份有限公司 基于哈希表和队列结构的tcp流重组行情监控处理方法、***、装置、处理器及存储介质

Similar Documents

Publication Publication Date Title
CN103888449A (zh) 一种报文重组方法和装置
Emek et al. Stone age distributed computing
JP6716727B2 (ja) ストリーミングデータ分散処理方法及び装置
CN1842764B (zh) 用于计算图的计算机辅助并行化的方法及其***
CN108959370B (zh) 一种基于知识图谱中实体相似度的社区发现方法及装置
CN104283723B (zh) 网络访问日志处理方法及装置
CN102722585B (zh) 浏览器类型识别方法、装置及***
CN110083606A (zh) 跨链存储方法、终端及存储介质
US10050881B2 (en) Method and apparatus for transmitting and receiving data in communication system
CN104917680B (zh) 用于执行分组流的并行散列的计算机***
CN110235162B (zh) 区块链***数据处理方法和区块的生成方法
CN113489583B (zh) 一种多方隐私求交中的数据处理方法、装置及电子设备
CN110659905B (zh) 交易验证方法、装置、终端设备以及存储介质
EP2930903A2 (en) Secure collection synchronization using matched network names
CN110597922A (zh) 数据处理方法、装置、终端及存储介质
CN109739433A (zh) 数据处理的方法及终端设备
US10567399B2 (en) Fragmented malware hash lookup in cloud repository
CN110990897A (zh) 一种文件指纹的生成方法及装置
CN110417787A (zh) 一种数据处理方法、装置、客户端及存储介质
CN114003775A (zh) 图数据处理、查询方法及其***
CN103457976A (zh) 数据下载方法和***
CN116432190B (zh) 接口未授权访问检测方法、装置、计算机设备及存储介质
CN111367916B (zh) 一种数据存储方法及装置
CN108076149A (zh) 会话保持方法和装置
CN116668135A (zh) 一种移动边缘设备参与的区块链共识方法、***与装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination