基于网络协议版本6的分片重组方法

文档序号:7684419阅读:332来源:国知局
专利名称:基于网络协议版本6的分片重组方法
技术领域
本发明是一种通过提高分片重组效率,来提高新一代因特网协议——IPV6传输性能的方 法,属于网路数据传输技术领域。
背景技术
Web技术推动因特网以惊人的速度发展。IO年前,关注未来因特网扩展性能的人们就开 始担心IPv4 (4版本网际协议Internet Protocol Version 4)网络本身的局限性将难以支撑 因特网的持续发展。为此IETF (因特网工程任务组Internet Engineering Task Force)推 出了新一代因特网协议——IPv6 (6版本网际协议Internet Protocol Version 6)。与IPv4 相比,IPv6提供了许多全新的特性,如地址空间扩展、安全性设置以及自动配置等。
IPv6的发展得到众多设备制造商的支持,甚至提高到国家层面来开展基于IPv6的研究和 部署。美国国防部的IPv6部署进度表显示2005-2007年,IPv6和IPv4协议共同运行;2008 年实现美国本土全面的IPv6计划。欧洲和日、韩在IPv6相关领域也展开了大量研究,各种 实验网和试验性商用IPv6网纷纷开通。2004年3月,我国第一个下一代因特网主干网 ——CERNET2正式开通并提供服务,成为目前世界上规模最大的IPv6国家主干网。
虽然IPV6在超大包传输方面有了很大的突破,但是鉴于小包网的规模相当大,在短时间 是不可能完全实现internet上的超大包传输。那么,对大包进行分片、重组还不可避免的。 研究省时高效的重组方法还是很有必要的。就目前来说,基于IPV4的分片重组方法已经有了 很大的突破,但是对于基于IPV6的分片重组的方法还处于起步阶段,进行的研究也不多。而 且两者在包头上有很大的差别,IPV4中的分片重组方法也不能直接的应用到IPV6中。下一章 我们将对两者之间的联系于差别进行说明。
以前制约接收数据速率的要是网络的传输速率,接收主机上的IP接收处理软件完全能够 对数据包进行及时的处理。但是,现在随着网速提高到1Gbps、 10Gbps,网络的传输能力已经 不是主要制约因素了。那么就要求更高效的IP数据的处理软件,更高效的分片重组方法,来 取代原来的像RFC791、 RFC815等分片重组方法。那么极大化的并行处理、信息的高效传输以 及包分片的快速分类和重组就是我们要解决的重中之重。 参考文献David D Clark. IP datagram reassembly algorithms[C]. RFC815, MIT Laboratory for
Computer, Science Computer Systems and Communications Group, 1982. [2]RFC2460, Internet Protocol, Version 6(IPv6) Specification, Networking Group,1998.Y. Xiang,and W. Zhou, "An Active Distributed Defense System to Protect Web Applications from DDoS Attacks〃, Proc. of the 6thlnternational Conference on Information Integration and Web BasedS. Savage, D. Wetherall, A. KarlinandT. Anderson, "NetworkSupportfor IP Traceback", ACM/IEEE Transactions on Networking, Vol.9, No. 3, 2001, pp. 226-237. [5]RFC791, Internet Protocol' DARPA, 1981.

发明内容
技术问题本发明的目的是提供一种基于网络协议版本6的分片重组方法,在该发明中 引入了分片树机制、分片分类的机制,并嵌入了朝前处理的机制。 技术方案本发明的基于网络协议版本6的分片重组方法为 对分片重组引入分片树机制、分片的分类机制、朝前处理的机制,具体方法为
1) .分片重组系统接收到一个网络传过来的数据分片;
2) .将步骤l)收到的数据分片交给分片检测模块,通过该模块来鉴定分片的合法性,保留 合法分片,丢弃非法分片;
3) .将步骤2)鉴别出来的不是当前处理的数据包的分片转交给分片树模块进行缓存;并且 在分支缓存的过程中,还要调用分片检测模块,来进行保证给分片树的分支上的分片合 法的;
4) .将经过步骤2)鉴定的合法的分片转交给分片分类模块,分片将被分为四种类型,并被 烙上类型标志;
5) .调用超前处理模块来判断是否可以进行超前处理,如果能进行超前处理那么就启动具 体重组模块来完成数据包的复原,否则就将其转交给分片树模块来进行缓存;
6) .等待下一个分片的到来并转到步骤1)。
所述分片树机制为从根节点往下,第一层,地址不同;第二层,地址相同,端口不同; 第三层-叶节点,地址、端口相同,标识不同;具体数据都存储在叶节点上,系统收到分段包, 在査找分段树时,根据该分段包的源、目的地址,源、目的端口和标识査找树中节点;若不 存在匹配的叶节点,就在树中创建节点,将待重组数据存入叶结点,并记录该叶结点创建的 时间;系统为整个分段树建立一个定时器,每个定时周期内,系统都计算一次当前时间与叶 结点创建时间的差值,并比较该差值与系统规定的超时阀值,若超时,则删除该叶结点并输 出告警;若没有超时,则继续保留;在叶节点上设一变量初始化为0,每收到一个分段包,就 将的其值加上包的数据字段包括报头和数据的大小,然后根据包中的偏移量将数据字段存入 节点缓冲区相应位置;若是最后一个包,则将其段偏移量加上数据字段大小赋给保存最终大 小的变量。
所述分片的分类机制为将分片分为4个类型①分片将一个洞完全填充;②分片填充 了洞的前半部分;③分片填充了洞的后半部分;④分片填充了洞的中间部分。所述朝前处理的机制为在接收到经过分类的前三个分片的时候,对其进行进一步分类, 判断是原来包的头一个分片、中间的分片还是最后的分片;①如果分片扩展头的M字段为1 且分片偏移量字段为0,那么该分片为头一个分片类型;②如果分片扩展头的M字段为1且分 片偏移量字段大于0,那么该分片为中间的分片类型;③如果分片扩展头的M字段为0且分片 偏移量字段大于O,那么该分片为最后的分片类型。
1. 分片方法的原理分片重组是IP层一个最重要的工作,其处理的主要思想是当数据 包从一个网络A进入另一个网络B时,若原网络A的数据包长度大于新网络B所允许的最大 数据包长度,必须进行分片。因而在IP数据包的分片扩展头有若干标识域注明分片包的共同标 识号、分片的偏移量和是否是最后一片(如图1)。源主机通过使用路径MTU发现机制,可 以确定源节点到目的节点之间的整个链路中能够传送的最大包长度,进而对要传送的IP数据 包进行合理的分片,并填写相应的标志字段,是每个分片必须包含IPV6基本头、分片扩展头 和部分数据。目的主机则根据收到的数据包的分片扩展头的标志信息,把收到的分片进行重 组以恢复数据。因此,分片包在经过网络监测设备、安全设备、系统管理设备时,为了获取 信息、处理数据,都必须完成数据包分片的重组。因此,有一个快速高效的分片重组方法, 在很大程度上可以提高网络传输的性能。
2. 基于IPV4的RFC815方法的实现现在大多数操作系统对IP分片的重组仍使用一般的 排序算法,就是对每一个IP分片根据它的偏移量和长度在分片序列中进行排序。这种算法不 仅效率低下,而且安全性不够。首先,它必须要记录所有的分片,这本身就是一个很麻烦的 工作;其次,当一个新的分片到来时,它必须将这个分片与已收到的分片合到一起。这是一 个非常复杂的工作,因为这样的话有很多种情况要考虑,如或许这个分片正好是某两个分片 之间缺的那一个,或者与现存的某个分片有重叠之处,甚至与某个现存的分片一样,或者位 于两个分片之间,但并没有完全填补这两个分片之间的内容。因此这种分片方法必须考虑相 当多的情况,非常容易出现漏洞而给黑客们以可乘之机。其实IETF对分片重组已有了推荐的 方法——RFC815 (IP DATA-GRAM REASSEMBLY ALGORITHMS)。 RFC815的描述的重组方法相当简 单,在RFC815方法中使记录分片的工作量减少到了最少。而且不论这些分片有多少、有什么 情况、以什么顺序到达,只需要一个大小等于分片前数据包大小的存储区,更值得一提的是 该方法适用于不同的操作系统。为了说明这种方法,有必要定义一些术语。我们把重组缓冲 区中空的数据区称之为"洞",每一个这样的"洞"包括两个元素洞头,洞的第l个字节的 序号;洞尾,洞的最后一个字节的序号。我们把这一对变量称为"洞描述符",我们把一个数 据报所有的"洞描述符"连接成的链表称为"洞描述符链表"。当一个新的分片到达时,它有 可能填充一个或多个这样的洞。我们将检查"洞描述符链表"的每一项看是否有洞被刚来的 分片所填充。如果是的话,就从链表中去除这一项,否则就将其丢弃。当最后一个分片到来 的时候,将消除链表中的所有项。这时,数据包就可以完全被重组,并交给上一层协议做进 一步的处理。RFC815方法分两段来描述第l部分指明当一个分片到来时,为了确定有没有 洞被这个分片填充所采用的步骤;第2部分将描述一个管理"洞描述符"的简单方法。
3. 分片处理方法 一个新到的分片可以有很多方式填充现存的洞最简单的是它把一个洞完全填充;或者,它在洞头或者洞尾留下新洞;或者,最后该分片处于洞的中间,在洞头 和洞尾都留下一新洞。该方法要将每一个洞与新到的分片的相关的信息进行4次比较测试。 我们以最早到达的分片作为方法的开始。创建一个空的数据缓冲区并在洞描述链表中建立一 项,这一项表明数据包完全没有开始重组。其中,洞头为零,洞尾为无穷大(这里的无穷大 是指一个非常大的整数,具体的数目可根据实现情况而定)。下面的8个步骤被用来将每一个 新到的分片插入到重组后的数据包所用的存储区内。新来的分片由片头(fragment.first)— 分片的第1个字节序号和片尾(fragmenUast)——分片的最后一个字节序号来描述。
1. 从洞描述链表中选择下一个洞,如果没有洞,即该分片有错误,有可能是DOS攻击将 其丢弃,并执行步骤8;
2. 如果片头大于洞尾,即fragment.first>hole.last,则说明该分片不属于该洞的一部分,不 能填充该洞,需要执行步骤1搜索下一个洞来进行测试;
3. 如果片尾小于洞头,即fragmenUast<hole.first,则执行步骤;(如果上面两步都为真的 话,那么这个新到的分片根本就不覆盖这个洞,我们对这个洞不予处理。选择下一个洞进行 检査作为方法的开始。)
4. 从洞描述符链表中删除当前项;(既然上述两个步骤都不为真,那么这个新来的分片肯 定与这个洞有着某种关联。因此,当前的描述符将不再有效,删掉它,
并在以下的两个步骤中决定是否有必要创建新的描述符。)
5. 如果片头大于洞头,即fragment.first>hole.first,那么创建一个新的洞描述符newhole, 它的洞头等于原来的洞头,它的洞尾等于片头减1,即newhole.first = hole.first且newhole.last -fragment.first-1;(如果步骤为真,那么这个洞的开始部分没有被这个分片覆盖,我们对这 个小洞创建了一个洞描述符。)
6. 如果片尾小于洞尾,即fragment.last < hole.last,而且IP首部的"morefragment"字段为 真的话,我们将创建一个新的洞描述符newhole,其中洞头等于片尾加上1,洞尾等于原来的 洞尾,即newhole.first = fragment.last + 1且newhole.last = hole.last;(这一步基本上是步骤的镜 像。最开始,我们不知道重组后的数据包有多大,因此我们创建了一个从零到无穷大(具体的 数目由实现者确定)的洞。最后,我们将收到的数据包的最后一个分片。这时,从缓冲区的最 后一个字节到无穷大的这个洞描述符可以被去掉。通过IP首部叫做"more fragment"这个标 志位来表明这种情况。对这一步的测试可以防止我们建立一个从数据包的最后一个字节到无 穷大的洞描述符。)
7. 返回步骤1;
8. 如果洞描述符链表为空的话,那么数据包的重组也完成了,将它传递给上一层协议做进 一步的处理,否则返回。
(1) 洞描述符链表的管理上述8个步骤中最复杂的不是进行方法测试,而是从洞描 述符链表中增加或删除链表中的元素。有一个很简单的方法来管理这些洞描述符,就是把洞 描述符放到每一个洞开始的字节里。注意通过重组方法的定义,每一个分片最小是8个字节。 存放洞头、洞尾各需要两个字节,另外两个字节被用来在洞描述符列表中连结其它的元素之用。这样还留有两个字节来处理实现特征。对于这种存储策略有一个明显的缺点,就是在从 分片中拷贝数据到重组缓冲区之前要进行上述8个步骤。如果先拷贝数据,那么就会破坏一 个或多个洞描述符。 一旦这种方法开始,所有以后要删掉的洞描述符就已经被全部地废弃了。 在整个重组缓冲区中分散的这些洞描述符必须排成某种链表使它们自己可以被査找到。这就 意味着必须有一个指针指向链表的首部。在许多情况下,这个指针可以被存储在与每一个重 组缓冲区相联系的描述符块区域中。如果这样的缓冲区也没有的话, 一个不好但有效的办法 是将链表头存在重组缓冲区中IP首部不再使用的字段,最典型的如校验和字段。
RFC815方法的缺点上述描述只是一个对815方法简单的描述。它已经假定在数据包重 组的过程中没有IP选项起作用,但是在IPV4中选项是可选的,长度也是不固定的,那么关 于选项的困难之处在于直到收到数据包的第1个分片(这里的第1个分片包是指包含原始数据 包零字节的分片,不一定是接收顺序中的第1个)才知道IP首部有多大。这是因为由于某些选 项被相同地复制到数据包的每一个分片,而其它的选项,如"记录路由",只是被放到第l个 分片。只有知道了首部有多大才能知道从分片中的哪里开始复制数据到缓冲区。如果最早到 达的分片正好是第1个分片,那么这一切都没有问题。否则,将会出现错误,甚至会被DOS 攻击很容易得手,在拷贝数据的时候有废掉将洞描述符连在一起的指针的危险。而且该方法 中对洞描述符的存放地方比较晦涩难懂。
有益效果使用分片树机制可以对不同包的分片加以区分,并能实现不同包的分片的 并行重组,相对现在普遍使用的顺序处理来说,重组的速率要提高很多;使用分片的分类机 制可以对同一个包的不同分片进行区别存储,对分片的重组提供了很大的方便、减少了査找 的时间,可以在一定程度上提高重组效率;嵌入的朝前处理的机制可以提前对前三个分片进 行处理,对于不多与三个分片的包的重组,速度可以得到数量级的提高。更何况现在的大包 网络得到了一定的发展,尤其是IPV6还支持巨包的传输,那么该机制就更显得的有必要了。


图1是IPV6分片扩展头格式的示意图2是IPV6包结构的示意图3是重组后的数据包的示意图4是分片的重组机制的示意图5是分片树结构的示意图6是分片合法性检测的示意图7是分片分类流程的示意图8是分片重组的预处理的示意图9是状态机的示意图。
图10是系统流程图。
具体实施例方式
本发明的方法主要包括分片包的重组原则、分片树、分片检测、分片的分类、超前处 理机制、具体的重组方法等六部分。
1. 分片包的重组原则
在目的节点主机,分片包被重组为原来未分片的形式,如图2所示(注意重组后的数 据包是不包含分片扩展头的)。
重组应遵循的原则原包只能由具有相同源地址,目的地址和分片标识的分片包重组, 重组后的包中的不可分片部分由第一个分片包(也就是分片偏移量为0的那个包)中分片首部 前面所有的首部(不含分片首部)组成,并作如下两处修改
从第一个分片的分片首部中的"下一个首部"字段得到不可分片部分最后一个首部中的 "下一个首部"字段值,由不可分片部分的长度及最后一个分片的长度和偏移量计算出重组 包的有效载荷长度。为了写出计算重组包的有效载荷长度的计算公式,我们先定义一些有关 的变量符号
PL.0rig-重组包的有效载荷长度字段;
PL.first^第一个分片包的有效载荷长度字段;
FL.first =第一个分片包中分片首部后面的分片长度;
FO.last最后一个分片包中分片首部的分片偏移量字段;
FL.last-最后一个分片包中分片首部后面的分片长度;
那么计算重组包的有效载荷长度的计算公式可写为
PL.orig = PL.first-FL.first-8+ (8*F0.1ast) +FL.last。
重组包的可分片部分由各分片包中分片首部后面的分片组成。各分片的长度可由分片包 的有效载荷长度减去此包中IPv6首部与分片之间所有首部的长度计算得到。各分片在可分片 部分中的相对位置由其分片偏移量值计算得到。具体的重组机制如图4所示。
2. 分片树
依据上述的分片重组机制,我们决定采用"分片树"技术来实现IPv6分片包的重组。那 么现在我们就来说明一下"分片树"的结构和存储规则。
"分片树"的结构所谓"分片树"是指,建立树结构来存储分片包组,如图5所示。
分段树的建立规则从根节点往下,第一层,地址不同;第二层,地址相同,端口不同; 第三层(叶节点),地址、端口相同,标识不同。具体数据都存储在叶节点上。系统收到分段 包,在査找分段树时,根据该分段包的源、目的地址,源、目的端口和标识查找树中节点。 若不存在匹配的叶节点,就在树中创建节点,将待重组数据存入叶结点,并记录该叶结点创 建的时间。系统为整个分段树建立一个定时器,每个定时周期内,系统都计算一次当前时间 与叶结点创建时间的差值,并比较该差值与系统规定的超时阀值,若超时,则删除该叶结点 并输出告警;若没有超时,则继续保留。在叶节点上设一变量datasize,每收到一个分段包, 就将的datasize值加上包的数据字段(包括报头和数据)的大小。然后根据包中的偏移量将数据 字段存入节点缓冲区相应位置。若是最后一个包(1VN0,段偏移量X)),则将其段偏移量加上数据字段大小赋给fiillsize。把fullsize和datasize比较
> 如果fullsize >datasize,则说明还有分片包,继续等待下一个分片包的到来;
> 如果fullsize-datasize,则说明一个包的分片包已经到齐,说明数据包已经被成功的 复原;(因为本专利的另一个新的核心思想就是实现动态的分片重组,也就是每个分 片的数据内容都存储在叶子节点BUFFER的最终位置上,那么在BUFFER中的 HOLE被填充完毕的时候,就自然的实现了包的复原了,这样就在很大程度上提高 的分片重组的效率,也必然会对"网速"有所提高。具体的实现机制,将在以后的 章节进行详细的说明)
> 如果fullsize < datasize,则说明出错了甚至遭到了 DOS攻击,进行告警,并删除掉 该叶子节点。
此后,每次收到新的分片包都要把fullsize和datasize进行比较。组包时,新的数据包格 式为包头为最新收到的分段包前所有报头(以太网头+IPv6头+不可分段的扩展报头)的信 息;数据部分为该节点缓冲区中的数据。 3.分片检测
现在大多数操作系统对IP分片的重组仍使用一般的排序算法,就是对每一个IP分片根据 它的偏移量和长度在分片序列中进行排序。这种算法不仅效率低下,而且安全性不够。首先, 它必须要记录所有的分片,这本身就是一个很麻烦的工作;其次,当一个新的分片到来时, 它必须将这个分片与已收到的分片合到一起。这是一个非常复杂的工作,因为这样的话有很 多种情况要考虑,如或许这个分片正好是某两个分片之间缺的那一个,或者与现存的某个分 片有重叠之处,甚至与某个现存的分片一样,或者位于两个分片之间,但并没有完全填补这 两个分片之间的内容。因此这种分片方法必须考虑相当多的情况,非常容易出现漏洞而给黑 客们以可乘之机。下面我给出相当简单的重组方法,使记录分片的工作量减少到了最少。而 且不论这些分片有多少、有什么情况、以什么顺序到达,只需要一个大小等于分片前数据包 大小的存储区,更值得一提的是该方法适用于不同的操作系统。为了说明这种方法,有必要 定义一些术语。我们把重组缓冲区中空的数据区称之为"洞",每一个这样的"洞"包括两个 元素洞头,洞的第1个字节的序号;洞尾,洞的最后一个字节的序号。我们把这一对变量 称为"洞描述符",我们把一个数据报所有的"洞描述符"连接成的链表称为"洞描述符链表"。 当一个新的分片到达时,它有可能填充一个或多个这样的洞。我们将检查"洞描述符链表" 的每一项看是否有洞被刚来的分片所填充。如果是的话,就从链表中去除这一项,否则就将 其丢弃。当最后一个分片到来的时候,将消除链表中的所有项。这时,数据包就可以完全被 重组,并交给上一层协议做进一步的处理。
我们以最早到达的分片作为方法的开始,先对初始化好的分片树进行遍历,査找相应的 叶子节点,如果査找失败,则新建一个叶子节点空的缓冲区和到根的路径,并在洞描述链表 中建立一项,这一项表明数据包完全没有开始重组。其中,洞头为零,洞尾为无穷大。当收 到一个新的分片的时候,首先计算出该分片的片头和片尾值fragment.first、 fragment.last。然 后,将计算出来的片头、片尾值与每个洞描述符依次进行比较(若是描述链表为空,那么从叶子节点缓冲区中读出第一个洞的信息),如果存在一个洞包含这个分片,即&吗11^111^^1>= hole.first and fragment.last <= hole.last ,那么说明该分片是合法的,并进行下面的操作;否贝U, 就说明该分片不合法,进行报错警告并将该分片丢弃。分片合法性的检测流程如图6所示。
4. 分片的分类
当分片经过分片检测并鉴定为合法分片以后,下面将对其进行分类。我们将分片分为4 个类型(D分片将一个洞完全填充,即fragment.first = hole.first &&fragment.last = hole.last -1; ②分片填充了洞的前半部分,即fragment.first = hole.first && fragment.last < hole.last;③分片 填充了洞的后半部分,即fragment.first > hole.first && fragment.last = hole.last — 1;④分 片填充了洞的中间部分,即fragment.first > hole.first && fragment.last < hole.last - 1 。分片分类 的流程图如图7所示。
5. 超前处理机制
为了进一步的提高重组速率,本专利提供了对前三个分片提前进行处理的朝前处理机制。 在接收到经过分类的前三个分片的时候,对其进行进一步分类,判断是原来包的头一个分片 (First_part)、中间的分片(Middle_part)还是最后的分片(Last_part)。那么分类机制如下
> Firstjart:分片扩展头的M字段为1且分片偏移量字段为0;
> Middle_part:分片扩展头的M字段为1且分片偏移量字段大于0;
> Lastjart:分片扩展头的M字段为O且分片偏移量字段大于O。 该嵌入的超前处理机制的实现思想如下面的流程8所示。为了是读者更进一步的理
解本超前机制的思想,那么我们现在将状态机给出来,如图9所示。状态机的说明
> FIRST (i):第i次接收到的分片是包的头一个分片;
> MIDDLE (i):第i次接收到的分片是包的中间分片;
> LAST (i):第i次接收到的分片是包的最后一个分片;
> NOT FIRST (3):第3次接收到的分片不是包的头一个分片;
> NOT MIDDLE (3):第3次接收到的分片不是包的中间分片;
> NOT LAST (3):第3次接收到的分片不是包的最后一个分片。
6. 重组方法
下面的8个步骤被用来将每一个新到的分片插入到重组后的数据包所用的存储区内。新 来的分片由片头(fragment.first)——分片的第1个字节序号和片尾(fragment.last)——分片 的最后一个字节序号来描述。
> 从洞描述链表中选择下一个洞,如果没有洞,即该分片有错误,有可能是DOS攻击 将其丢弃,并执行步骤8;
> 如果片头大于洞尾,即fragment.firsPhole.last,则说明该分片不属于该洞的一部分, 不能填充该洞,需要执行步骤1搜索下一个洞来进行测试;
> 如果片尾小于洞头,即fragment.last<hole.first,则执行步骤1;(如果上面两步都为真 的话,那么这个新到的分片根本就不覆盖这个洞,我们对这个洞不予处理。选择下 一个洞进行检査作为方法的开始。)> 从洞描述符链表中删除当前项(既然上述两个步骤都不为真,那么这个新来的分片 肯定与这个洞有着某种关联。因此,当前的描述符将不再有效,删掉它,并在以下 的两个步骤中决定是否有必要创建新的描述符。)
> 如果片头大于洞头,即fragment.first>hole.first,那么创建一个新的洞描述符newhole, 它的洞头等于原来的洞头,它的洞尾等于片头减l,即newhole.first-
hole.first且newhole.last = fragment.first - 1;(如果步骤为真,那么这个洞的开始部分没有 被这个分片覆盖,我们对这个小洞创建了一个洞描述符。)
> 如果片尾小于洞尾,即fragment.last < hole.last,而且分片扩展头部的"M"字段为
"1"的话,我们将创建一个新的洞描述符newhole,其中洞头等于片尾加上1,洞 尾等于原来的洞尾,即newhole.first = fragment.last + 1且newhole.last = hole.last;(这
一步基本上是步骤的镜像。最开始,我们不知道重组后的数据包有多大,因此我们 创建了一个从零到无穷大(具体的数目由实现者确定)的洞。最后,我们将收到的数据 包的最后一个分片。这时,从缓冲区的最后一个字节到无穷大的这个洞描述符可以 被去掉。通过IP首部叫做"more fragment"这个标志位来表明这种情况。对这一步 的测试可以防止我们建立一个从数据包的最后一个字节到无穷大的洞描述符。)
> 返回步骤l;
> 如果洞描述符链表为空的话,那么数据包的重组也完成了,将它传递给上一层协议 做进一步的处理,否则返回。
权利要求
1.一种基于网络协议版本6的分片重组方法,其特征在于对分片重组引入分片树机制、分片的分类机制、朝前处理的机制,具体方法为1).分片重组系统接收到一个网络传过来的数据分片;2).将步骤1)收到的数据分片交给分片检测模块,通过该模块来鉴定分片的合法性,保留合法分片,丢弃非法分片;3).将步骤2)鉴别出来的不是当前处理的数据包的分片转交给分片树模块进行缓存;并且在分支缓存的过程中,还要调用分片检测模块,来进行保证给分片树的分支上的分片合法的;4).将经过步骤2)鉴定的合法的分片转交给分片分类模块,分片将被分为四种类型,并被烙上类型标志;5).调用超前处理模块来判断是否可以进行超前处理,如果能进行超前处理那么就启动具体重组模块来完成数据包的复原,否则就将其转交给分片树模块来进行缓存;6).等待下一个分片的到来并转到步骤1)。
2. 根据权利要求1所述的基于网络协议版本6的分片重组方法,其特征在于所述分片树 机制为从根节点往下,第一层,地址不同;第二层,地址相同,端口不同;第三层-叶节点, 地址、端口相同,标识不同;具体数据都存储在叶节点上,系统收到分段包,在査找分段树 时,根据该分段包的源、目的地址,源、目的端口和标识查找树中节点;若不存在匹配的叶 节点,就在树中创建节点,将待重组数据存入叶结点,并记录该叶结点创建的时间;系统为 整个分段树建立一个定时器,每个定时周期内,系统都计算一次当前时间与叶结点创建时间 的差值,并比较该差值与系统规定的超时阀值,若超时,则删除该叶结点并输出告警若没 有超时,则继续保留;在叶节点上设一变量初始化为0,每收到一个分段包,就将的其值加上 包的数据字段包括报头和数据的大小,然后根据包中的偏移量将数据字段存入节点缓冲区相 应位置;若是最后一个包,则将其段偏移量加上数据字段大小赋给保存最终大小的变量。
3. 根据权利要求1所述的基于网络协议版本6的分片重组方法,其特征在于所述分片的 分类机制为将分片分为4个类型①分片将一个洞完全填充;②分片填充了洞的前半部分; ③分片填充了洞的后半部分;④分片填充了洞的中间部分。
4. 根据权利要求1所述的基于网络协议版本6的分片重组方法,其特征在于所述朝前处 理的机制为在接收到经过分类的前三个分片的时候,对其进行进一步分类,判断是原来包 的头一个分片、中间的分片还是最后的分片;①如果分片扩展头的M字段为1且分片偏移量 字段为0,那么该分片为头一个分片类型;②如果分片扩展头的M字段为1且分片偏移量字段 大于0,那么该分片为中间的分片类型;③如果分片扩展头的M字段为0且分片偏移量字段大 于0,那么该分片为最后的分片类型。
全文摘要
基于网络协议版本6的分片重组方法是一种通过提高分片重组效率,来提高新一代因特网协议——IPV6传输性能的方法,具体方法为1)分片重组系统接收到一个网络传过来的数据分片;2)将步骤1)收到的数据分片交给分片检测模块;3)将步骤2)鉴别出来的不是当前处理的数据包的分片转交给分片树模块进行缓存;并且在分支缓存的过程中,还要调用分片检测模块,来进行保证给分片树的分支上的分片合法的;4)将经过步骤2)鉴定的合法的分片转交给分片分类模块,分片将被分为四种类型,并被烙上类型标志;5)调用超前处理模块来判断是否可以进行超前处理,如果能进行超前处理那么就启动具体重组模块来完成数据包的复原,否则就将其转交给分片树模块来进行缓存;6)等待下一个分片的到来并转到步骤1)。
文档编号H04L12/56GK101316232SQ20081002232
公开日2008年12月3日 申请日期2008年7月9日 优先权日2008年7月9日
发明者孙知信, 王魁英 申请人:南京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1