[发明专利]一种Tcp重组方法及装置有效
申请号: | 201110425695.4 | 申请日: | 2011-12-16 |
公开(公告)号: | CN102404340A | 公开(公告)日: | 2012-04-04 |
发明(设计)人: | 张标依;张晓民 | 申请(专利权)人: | 山东中创软件商用中间件股份有限公司 |
主分类号: | H04L29/06 | 分类号: | H04L29/06 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 逯长明 |
地址: | 250014 山*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 tcp 重组 方法 装置 | ||
技术领域
本发明涉及通信领域,尤其涉及一种Tcp重组方法及装置。
背景技术
传输控制协议(Tcp)是一种面向连接的,基于字节流的运输层通信协议。Tcp连接具有请求和返回两个对应的方向,每个Tcp包具有流水号(Seq)、确认号(Ack)及数据包长度(Len)等参数。单个Tcp包的数据长度有限,当应用层的数据较大时,会将其拆分为几个Tcp数据包发送,所以应用层在解析收到的Tcp包数据时,必须先将拆分的Tcp包进行重组。
目前,Tcp的重组方法大多使用Snort和Libnids的重组方法,但是,Snort方法只有在满足连接结束或内存用尽或重组的数据包达到一定量的条件时才会进行Tcp重组,并交由应用层解析,重组的数据包括了整个连接过程中的全部数据,会影响应用层的分析;而Libnids方法则是每接收一个Tcp数据就会进行一次重组,并交由应用层解析,而这时应用层的实际数据可能并未传送到,所以会导致解析失败。
总之,Snort或Libnids的重组方法,重组的粒度不是太大就是太小,而导致重组后的数据不适用于应用层解析。
发明内容
有鉴于此,本发明提供了一种Tcp重组方法,目的在于解决现有的Tcp重组方法重组后的数据不适用于应用层解析的问题。
一种Tcp重组方法,包括:
在第一链表的存储所述Tcp包的第一节点中,设置上边界标志和下边界标志,并初始化为0;
在与所述第一链表对应方向的第二链表中,查找确认号等于所述第一节点的流水号的第二节点,如果找到,则设置所述第一节点的上边界标志为1;
在与所述第一链表对应方向的第二链表中,查找确认号等于所述第一节点的流水号与数据包长度的和的第三节点,如果找到,则设置所述第一节点的下边界标志为1;
如果所述第一节点的上边界标志和下边界标志都为1,则完成所述Tcp的重组。
优选地,在设置第一链表中存储所述Tcp包的第一节点的上边界标志和下边界标志为0之前,还包括:
将接收到的Tcp包存储到第一链表中对应的第一节点中。
优选地,所述将接收到的Tcp包存储到第一链表中对应的第一节点中,包括:
依据所述接收到的Tcp包的流水号,将所述Tcp包存储到第一节点,使得所述第一节点与其它节点按照流水号由大到小或者由小到大的顺序排列。
优选地,在设置第一链表中存储所述Tcp包的第一节点的上边界标志和下边界标志为0之后,在与所述第一链表对应方向的第二链表中,查找确认号等于所述第一节点的流水号的第二节点之前,还包括:
查找所述第一链表中确认号与所述第一节点的确认号相同的节点;
如果所述节点的流水号与数据包长度的和等于所述第一节点的流水号的节点,则将所述节点中的数据合并到所述第一节点中对应的数据中,并删除所述节点;
如果所述节点的流水号等于所述第一节点的流水号与数据包长度的和,则将所述第一节点中的数据合并到所述节点中对应的数据中,并删除所述第一节点,将合并后的节点作为第一节点。
优选地,在所述完成所述Tcp的重组之后,还包括:
将所述第一节点的负载信息交由应用层处理,并在所述第一链表中删除所述第一节点。
一种Tcp重组装置,包括:
边界设置单元,用于在第一链表存储所述Tcp包的第一节点中,设置上边界标志和下边界标志,并初始化为0;并在与所述第一链表对应方向的第二链表中,查找确认号等于所述第一节点的流水号的第二节点,如果找到,则设置所述第一节点的上边界标志为1;在与所述第一链表对应方向的第二链表中,查找确认号等于所述第一节点的流水号与数据包长度的和的第三节点,如果找到,则设置所述第一节点的下边界标志为1;
Tcp重组单元,用于判断所述第一节点的上边界标志和下边界标志,如果都为1,则完成所述Tcp的重组。
优选地,所述装置还包括:
存储单元,用于将接收到的Tcp包存储到第一链表中对应的第一节点中。
优选地,所述存储单元包括:
排序存储单元,用于依据所述接收到的Tcp包的流水号,将所述Tcp包存储到第一节点,使得所述第一节点与其它节点按照所述流水号由大到小或者由小到大的顺序排列。
优选地,所述装置还包括:
节点查询单元,用于查找所述第一链表中确认号与所述第一节点的确认号相同的节点;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于山东中创软件商用中间件股份有限公司,未经山东中创软件商用中间件股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110425695.4/2.html,转载请声明来源钻瓜专利网。