IPv6 Internet 协议第六版 规范( 六 )


(3) 分片自身
分片的长度应使分片包的大小适于去往目的节点的路径 MTU 。在目的节点,分片包重组为原来未分片的形式,如下例所示:
重组的原包:
重组应遵循如下原则:
原包只能由具有相同源地址,目的地址和分片标识的分片包重组 。重组后的包中的不可分片部分由第一个分片包(也就是分片偏移量为 0 的那个包)中分片首部前面所有的首部(不含分片首部)组成,并作如下两处修改:从第一个分片的分片首部中的"下一个首部"字段得到不可分片部分最后一个首部中的"下一个首部"字段值 。由不可分片部分的长度及最后一个分片的长度和偏移量计算出重组包的有效数据长度 。计算重组包的有效数据长度的公式为:
PL.orig = PL.first - FL.first - 8(8 * FO.last)FL.last
PL.orig = 重组包的有效数据长度字段 。
PL.first = 第一个分片包的有效数据长度字段 。
FL.first = 第一个分片包中分片首部后面的分片长度 。
FO.last = 最后一个分片包中分片首部的分片偏移量字段 。
FL.last = 最后一个分片包中分片首部后面的分片长度 。
重组包的可分片部分由各分片包中分片首部后面的分片组成 。各分片的长度可由分片包的有效数据长度减去此包中IPv6首部与分片之间所有首部的长度计算得到 。各分片在可分片部分中的相对位置由其分片偏移量值计算得到 。最终重组后的包不含分片首部 。包的重组过程可能出现下列错误情形:
假如收到包的第一个(到达的)分片之后 60 秒内没有收到全部分片以完成重组,那么必须终止这次重组,抛弃所有已收到的包 。假如收到了第一个分片 (也就是分片偏移量为零的那个分片),应给分片的源节点发送一个 ICMP "超时 -- 分片重组超时"报文 。假如由分片包的有效数据长度字段得到的分片长度不是 8 个八位组的整数倍,而且分片的 M 标志位被置为 1,那么必须抛弃这个分片,并且给分片的源节点发送一个 ICMP "参数存在问题",编码 0 的报文,指针指向分片包的有效数据长度字段 。假如分片的长度和偏移量使得重组后的包的有效数据长度超过了 65,535 个八位组,那么必须抛弃这个分片,并且向分片的源节点发送一个 ICMP "参数存在问题",编码 0 的报文,指针指向分片包的分片偏移量字段 。不希望出现下述情形,但不将它们视为错误:
同一个原包的不同分片中,分片首部前面的首部在数量和内容上都可能不同 。当每个分片包到达时,无论分片首部前面的首部是什么,都应在进入分片重组队列之前进行处理 。只有分片偏移量为零的那个包中的首部才保留在重组后的包中 。同一个原包的不同分片中,分片首部中"下一个首部"值可能不同 。只有分片偏移量为零的那个包中的值才可用于重组 。4.6 目的地址选项首部
目的地址选项首部用于携带只需由包的目的节点检测的可选信息 。前面的首部中"下一个首部"字段中的值为 60 表示下一个首部为目的地址选项首部 。目的地址选项首部具有如下格式:
下一个首部
8 位选择器 。标识紧跟在目的地址选项首部后面的首部的类型 。使用与 IPv4 协议字段相同的数值 。
首部扩展长度
8 位无符号整数 。以 8 个八位组为单位的目的地址选项首部的长度,不包括开始的 8 个八位组 。
选项
可变长度字段,其长度须使整个目的地址选项首部的长度为 8 个八位组的整数倍 。包含一个或多个 TLV 编码的选项,如第 4.2 章中所述 。
在本文中定义的仅有的目的地址选项是填充1 及填充N 选项,如第 4.2 章中所述 。需要注重的是,有两种途径来编码目的地址的可选信息: 或者作为目的地址选项首部中的一个选项,或者作为一个独立的扩展首部 。分片首部和认证首部就是后者的典型例子 。使用哪种方法取决于目的节点无法识别这一可选信息时,希望采取的措施:

推荐阅读