o;;上层协议不应假定所收到的包中传输类别数据位的值与源节点发送此包时的
值相同.
8. 上层协议的问题
8.1 上层协议校验和
在计算校验和时包含 IP 首部中地址的传输层或其他上层协议必须为通过 IPv6 进
行传输加以相应的改进, 将 32 位的 IPv4 地址改为 128 位的 IPv6 地址.;;非凡
地, 下面的例子展示了 TCP 和 UDP 的 IPv6 "伪首部":
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;;;
源地址;;
;;;;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;;;
目;;的;;地;;址
;;;;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
零下一个首部
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
o;;假如 IPv6 包包含路由首部, 伪首部使用的目的地址就是最终的目的地址.
在初始节点, 这一地址就是路由首部的最后一个元素; 在接收者一方, 这一
地址在 IPv6 首部的目的地址字段.
o;;伪首部中"下一个首部"字段值标识了上层协议的类型 (比如 6 为 TCP, 17
为 UDP).;;假如 IPv6 首部和上层协议首部之间还存在扩展首部, 那么伪首
部中"下一个首部"字段的值可能与 IPv6 首部中的值有所不同.
o;;伪首部中上层协议包的长度是指上层协议的首部和数据 (比如, TCP 首部加
上 TCP 数据).;;一些上层协议携带了自己的长度信息 (比如, UDP 首部中
的长度字段); 对于这样的协议, 这些信息就是伪首部使用的长度信息.;;其
他协议 (比如 TCP) 不携带自己的长度信息, 在这种情况下, 伪首部使用的
长度就是 IPv6 首部中的有效载荷长度字段值减去 IPv6 首部与上层协议首
部之间扩展首部的长度.
o;;与 IPv4 不同的是, 当 IPv6 节点生成 UDP 包时, UDP 校验和不是可选的.
也就是说, 只要生成 UDP 包, IPv6 节点必须计算数据包和伪首部的 UDP 校
验和.;;而且, 假如计算结果为 0, 必须将其改为十六进制的 FFFF, 放入 UDP
首部.;;IPv6 接收节点必须抛弃包含零校验和的 UDP 包, 并记录这一错误.
IPv6 版本的 ICMP [ICMPv6] 在计算校验和时包含上述的伪首部; 这是一个与 IPv4
的版本不同的地方 -- IPv4 的版本在校验和中不包含伪首部.;;改变的原因是防止
ICMP 发生不正确的传送, 以及 IPv6 首部中的这些字段发生讹误 -- 它们没有受
到网络层校验和的保护.;;ICMP 的伪首部中"下一个首部"字段的值为 58, 标识
IPv6 版本的 ICMP.
8.2 包的最大生存期
与 IPv4 不同的是, IPv6 节点不必强制规定一个包的最大生存期.;;这就是 IPv4 中
的"生存期"字段在 IPv6 中改名为"跳数限制"的原因.;;在实际中, IPv4 实现很
少强制要求限制包的生存期, 所以这一点实际上并没有改变.;;任何依靠网络层协
议 (IPv4 或 IPv6) 来限制包的生存期的上层协议必须进行升级, 自己提供检测和
抛弃过期的数据包的机制.
8.3 上层协议的最大有效载荷尺寸
当计算可提供给上层协议数据的最大有效载荷尺寸的时候, 上层协议必须考虑到
IPv6 首部比 IPv4 首部大.;;例如, 在 IPv4 里, TCP 的 MSS 选项是包的最大尺
寸 (缺省值或者由路径 MTU 发现技术提供的值) 减去 40 个八位组 (IPv4 首部的
最小长度 20 和 TCP 首部的最小长度 20).;;当通过 IPv6 使用 TCP 时, MSS 必
须改为包的最大尺寸减去 60 个八位组, 这是因为 IPv6 首部的最小长度 (也就是
没有任何扩展首部的 IPv6 首部) 比 IPv4 首部的最小长度长 20 个八位组.
8.4 对携带路由首部的包的响应
推荐阅读
- IPv6/IPv4协议转换的试验
- 一种新IPv6任播地址解析协议及应用
- 改进的移动IPv6协议分析
- 毕业三方协议必须签吗
- ADSL网络协议PPPOE
- 二 第三章广域网协议配置命令
- 在WIN XP和WIN 2K中安装IPv6协议
- 一 第三章广域网协议配置命令
- 四 第三章广域网协议配置命令
- 一 第四章网络协议配置命令
