1.一种TCP流重组拼包方法,其特征在于,所述方法,包括下列步骤:步骤100.报文处理模块接收当前处理报文,然后从TCP流记录表中找到该报文相关TCP流记录,将所述报文分成包头信息和负载数据两部分,并将所述负载数据写入报文负载数据先入先出队列;步骤200.报文处理模块根据所述包头信息更新所述TCP流记录,并根据更新后的TCP流记录判断缓存当前处理报文是否需要申请新的单元缓冲块,若是,则执行步骤300;否则,执行步骤400;步骤300.报文处理模块向缓冲区分配模块发送分配缓冲区请求,同时传递给缓冲区分配模块所述当前处理报文的四元组,缓冲区分配模块采用哈希函数和位图文件的方式为当前处理报文的负载数据分配负载数据缓冲区中空闲的单元缓冲块,返回空闲的单元缓冲块的地址索引;报文处理模块根据所述单元缓冲块的地址索引,更新所述TCP流记录得到新的TCP流记录;步骤400.缓冲区数据管理模块获得所述新的TCP流记录,并从报文负载数据先入先出队列中读取所述负载数据,根据所述新的TCP流记录中指定的位置将所述负载数据写入负载数据缓冲区,完成重组和/或拼包,并将经过重组和/或拼包的TCP流数据上传给主机。
2.根据权利要求1所述的TCP流重组拼包方法,其特征在于,所述TCP流记录,记录了对一条TCP流进行重组拼包所需的信息,包括:客户端IP、服务器端IP、客户端端口、服务器端端口、TCP流状态,并为客户端至服务器端和服务器端至客户端两个方向各设置一个报文缓冲区管理字段,其中,每一个方向的报文缓冲区管理字段可分成以下几个部分:期待序列号,单元缓冲块有效位字段,单元缓冲块地址索引字段,期待序列号偏移字段,缓存数据段描述符,其中:单元缓冲块有效位字段和单元缓冲块地址索引字段分别描述分配给这条TCP流负载数据缓冲区的各个单元缓冲块的状态信息;期待序列号偏移字段,记录这条TCP连接在一个方向上期待的下一个顺序报文要存储在负载数据缓冲区中的偏移;若干个缓存数据段描述符,每个缓存数据段描述符用于描述一段存放在负载数据缓冲区中的连续报文负载数据,由两个指针组成,两个指针分别指向该段负载数据在负载数据缓冲区的起始地址和结尾地址。
3.根据权利要求1所述的TCP流重组拼包方法,其特征在于,所述缓冲区分配模块将缓存空间划分成n个区域,每个区域中包括多个单元缓冲块,每个区域用一个位图文件记录该区域的使用情况,每一比特记录所述区域中的一个单元缓冲块是否已经分配;每一条TCP流在一个方向上的负载数据缓冲区由n个单元缓冲块构成,且一条TCP流在每个区域中只允许分配到一个单元缓冲块。
4.根据权利要求3所述的TCP流重组拼包方法,其特征在于,所述单元缓冲块的物理地址是由单元缓冲块地址索引字段Index和报文的四元组Tuples配合运算得到的,具体的过程为:预先设定好n个hash函数H(H[0],H[1]……H[n-1]),每个hash函数对应缓存空间的一个区域,Index[i]代表了负载数据缓冲区中的第i个单元缓冲块属于n个区域中的哪一个,H[Index[i]]代表了负载数据缓冲区中的第i个单元缓冲块是根据哪个hash函数得到的,则{Index[i],H[Index[i]](Tuples)}就是负载数据缓冲区中第i个单元缓冲块的物理地址基址。
5.根据权利要求2所述的TCP流重组拼包方法,其特征在于,所述步骤200,包括下列步骤:步骤210.判断当前处理报文的序列号是否等于当前所述TCP流记录中的期待序列号;若是,则执行步骤220;否则,执行步骤240;步骤220.判断负载数据缓冲区中是否存在乱序数据,若是,则执行步骤230;否则,所述期待序列号的值=当前期待序列号的值+报文长度的值;期待序列号偏移的值=当前期待序列号偏移的值+报文长度的值,执行步骤240;步骤230.判断当前处理报文与所述乱序数据是否相邻,若是,则所述期待序列号的值=当前期待序列号的值+报文长度的值+拼好的乱序数据长度的值;期待序列号偏移的值=当前期待序列号偏移的值+报文长度的值+拼好的乱序数据长度的值,并更新缓存数据段描述符,执行步骤260;否则,所述期待序列号的值=当前期待序列号的值+报文长度的值;期待序列号偏移的值=当前期待序列号偏移的值+报文长度的值,更新缓存数据段描述符,执行步骤260;步骤240.判断当前处理报文的序列号是否小于当前TCP流记录中的期待序列号,若是,则执行步骤250;否则按照当前报文的负载数据在其所属TCP流的负载数据缓冲区的存放位置更新缓存数据段描述符,执行步骤260;步骤250.判断所述负载数据的序列号是否均小于当前所述TCP流记录中的期待序列号,若是,则当前待处理报文被视为老数据包,不修改所述TCP流记录;否则,所述期待序列号的值=当前期待序列号的值+当前待处理报文中新数据的长度的值;期待序列号偏移的值=期待序列号偏移的值+当前待处理报文中新数据的长度的值,更新缓存数据段描述符,执行步骤260;步骤260.判断更新后的缓存数据段描述符是否要求分配新的单元缓冲块,若是,表示需要申请新的单元缓冲块;否则,表示不需要申请新的单元缓冲块。
6.根据权利要求4所述的TCP流重组拼包方法,其特征在于,所述步骤300,包括下列步骤:步骤310.缓冲区分配模块接收当前处理报文的四元组,同时使用预设的所有哈希函数对所述四元组进行计算,得到多个哈希运算结果;步骤320.缓冲区分配模块以所述哈希运算结果为索引访问所述哈希运算结果对应的位图文件,读到多个1比特的数据;步骤330.判断读到的多个1比特的数据中是否有“0”,若是,则表示对应所述区域中这个哈希运算结果索引的位置上的单元缓冲区块空闲;否则执行步骤350;步骤340.从多个1比特的数据中任意选择一个“0”,将“0”在多个1比特的数据中的位置作为分配的单元缓冲块的地址索引,返还给报文处理模块,并修改所述位图文件;步骤350.不缓存当前处理报文,通知缓冲区数据管理模块将这条TCP流的缓存的所有数据和当前处理报文一并传给主机。
7.根据权利要求6所述的TCP流重组拼包方法,其特征在于,所述步骤400,包括下列步骤:步骤410.缓冲区数据管理模块根据报文处理模块的结果,从所述先入先出队列中读出报文负载数据写入负载数据缓冲区;步骤420.判断是否存在一条TCP流在缓冲区中存储的顺序数据长度超过一个预设值,若是,则执行步骤430;否则,执行步骤440;步骤430.缓冲区数据管理模块将拼好的顺序数据取出,根据当前处理报文的包头信息为这一段数据添加一个伪造包头,生成一个拼好的大包上传给主机;步骤440.判断是否存在一条TCP流在缓冲区中存储的乱序数据长度超过一个预设值,或是乱序数据超出了负载数据缓冲区的范围,若是,则执行步骤450;否则,返回步骤410;步骤450.缓冲区数据管理模块根据流记录中的缓存数据段描述符取出缓冲区中存储的乱序数据,生成拼好的大包上传给主机。
8.一种TCP流重组拼包装置,其特征在于,所述装置,包括:报文处理模块,用于接收当前处理报文,将所述报文分成包头信息和负载数据两部分,将所述负载数据写入报文负载数据先入先出队列,根据所述包头信息以及缓冲分配模块的地址索引更新TCP流记录;如果缓存当前处理报文需要申请新的单元缓冲块,向缓冲区分配模块发送分配缓冲区请求;缓冲区数据管理模块,用于根据所述包头信息从报文负载数据先入先出队列中读取负载数据,根据更新后的TCP流记录中指定的位置将所述负载数据写入负载数据缓冲区,完成重组和/或拼包,并将经过重组和/或拼包的TCP流数据上传给主机;报文负载数据FIFO,用于缓存报文的负载数据;缓冲区分配模块,采用哈希函数和位图文件的方式为当前处理报文的负载数据分配负载数据缓冲区中空闲的单元缓冲块,返回空闲的单元缓冲块的地址索引;缓存空间,用于按照相应TCP流的报文顺序缓存乱序报文的报文负载数据。
9.根据权利要求8所述的TCP流重组拼包装置,其特征在于,所述TCP流记录,记录了对一条TCP流进行重组拼包所需的信息,包括:客户端IP、服务器端IP、客户端端口、服务器端端口、TCP流状态,并为客户端至服务器端和服务器端至客户端两个方向各设置一个报文缓冲区管理字段,其中,每一个方向的报文缓冲区管理字段可分成以下几个部分:期待序列号,单元缓冲块有效位字段,单元缓冲块地址索引字段,期待序列号偏移字段,缓存数据段描述符,其中:单元缓冲块有效位字段和单元缓冲块地址索引字段分别描述分配给这条TCP流的负载数据缓冲区的各个单元缓冲块的状态信息;期待序列号偏移字段,记录这条TCP连接在一个方向上期待的下一个顺序报文要存储在负载数据缓冲区中的偏移;若干个缓存数据段描述符,每个缓存数据段描述符用于描述一段存放在负载数据缓冲区中的连续报文负载数据,由两个指针组成,两个指针分别指向该段负载数据在负载数据缓冲区的起始地址和结尾地址。
10.根据权利要求8所述的TCP流重组拼包装置,其特征在于,所述缓存空间被划分成n个区域,每个区域中包括多个单元缓冲块,每个区域用一个位图文件记录该区域的使用情况,每一比特记录所述区域中的一个单元缓冲块是否已经分配;每一条TCP流在一个方向上的负载数据缓冲区由n个单元缓冲块构成,且一条TCP流在每个区域中只允许分配到一个单元缓冲块。
11.根据权利要求10所述的TCP流重组拼包装置,其特征在于,所述单元缓冲块的物理地址是由单元缓冲块地址索引字段Index和报文的四元组Tuples配合运算得到的,具体的过程为:预先设定好n个hash函数H(H[0],H[1]……H[n-1]),每个hash函数对应缓存空间的一个区域,Index[i]代表了负载数据缓冲区中的第i个单元缓冲块属于n个区域中的哪一个,H[Index[i]]代表了负载数据缓冲区中的第i个单元缓冲块是根据哪个hash函数得到的,则{Index[i],H[Index[i]](Tuples)}就是负载数据缓冲区中第i个单元缓冲块的物理地址基址。
12.根据权利要求8所述的TCP流重组拼包装置,其特征在于,所述报文处理模块,包括:判断模块和TCP流记录修改模块,其中:所述判断模块,包括:序列号判断子模块,用于比较当前处理报文的序列号与当前所述TCP流记录中的期待序列号的关系;若等于,则触发乱数判断子模块;若大于,则触发所述TCP流记录修改模块;若当所述负载数据的序列号均小于当前所述TCP流记录中的期待序列号时,则将当前待处理报文被视为老数据包,不修改所述TCP流记录直接上传给主机;否则,触发所述TCP流记录修改模块;乱数判断子模块,用于判断负载数据缓冲区中是否存在乱序数据,若是,则触发相邻判断子模块;否则,触发所述TCP流记录修改模块;相邻判断子模块,用于判断当前处理报文与所述乱序数据是否相邻,若是,则触发所述TCP流记录修改模块;否则,触发所述TCP流记录修改模块;所述TCP流记录修改模块,用于根据所述判断模块的判断结果修改所述TCP流记录,更新缓存数据段描述符。
13.根据权利要求8所述的TCP流重组拼包装置,其特征在于,所述缓冲区分配模块,包括:接收模块,用于接收当前处理报文的四元组;计算模块,用于使用与所述数据缓冲区中多个区域对应的多个哈希函数对接收到的四元组进行计算,得到多个哈希运算结果;访问模块,用于以所述哈希运算结果为索引访问所述哈希运算结果对应的位图文件,读到多个1比特的数据;0判断模块,用于判断读到的多个1比特的数据中是否有“0”,若是,则表示对应所述区域中这个哈希运算结果索引的位置上的单元缓冲区块空闲,触发分配模块;否则触发上传模块;上传模块,不缓存当前处理报文,通知缓冲区数据管理模块将这条TCP流的负载数据缓冲区缓存的所有数据和当前处理报文一并传给主机;分配模块,用于从读到的多个1比特的数据中任意选择一个“0”,将“0”在多个1比特的数据中的位置作为分配的单元缓冲块的地址索引,返还给报文处理模块,并修改所述位图文件。
14.根据权利要求8所述的TCP流重组拼包装置,其特征在于,所述缓冲区数据管理模块,包括:负载数据读取模块,用于从所述先入先出队列中读出报文负载数据写入所述负载数据缓冲区;阈值判断模块,用于判断是否存在一条TCP流在负载数据缓冲区中存储的顺序数据长度超过一个预设值,若是,则触发顺序拼包模块;否则,触发乱数阈值判断模块;顺序拼包模块,用于将拼好的顺序数据取出,根据当前处理报文的包头信息为这一段数据添加一个伪造包头,生成一个拼好的大包上传给主机;乱数阈值判断模块,用于判断是否存在一条TCP流在缓冲区中存储的乱序数据长度超过一个预设值,或是乱序数据超出了负载数据缓冲区的范围,若是,则触发乱序拼包模块;否则,触发负载数据读取模块;乱序拼包模块,根据流记录中的缓存数据段描述符取出缓冲区中存储的乱序数据,生成拼好的大包上传给主机。
展开