下面是传输类别字段所应满足的总的要求:
o 节点中IPv6服务的服务接口必须为上层协议规定一种给初始包提供传输类别数据位的值的方法 。
o 支持部分或全部传输类别数据位的某一特定 (实验性的或最终标准) 用法的节点可以根据其用法修改它们所生成的,传输的或者收到的包中的这些位的值 。假如节点不支持这一用法,应忽略这些位,并保持其值不变 。
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在计算校验和时包含上述的伪首部;这是一个与 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 对携带路由首部的包的响应
当上层协议发送一个或多个包,作为包含路由首部的包的响应时,响应包中不能包含由所收到的路由首部"反向"而自动得到的路由首部 。除非收到的源地址和路由首部的完整性和可靠性已得到验证 (比如通过使用收到的包中的认证首部) 。换句话说,只有下面几类包可以响应由路由首部定向的包:
推荐阅读
- POP3 邮局协议-版本3
- Internet Protocol Internet协议
- ICMP Internet控制信息协议
- 动态主机配置协议
- 网络通信协议
- CIP 传输协议
- Daytime协议
- OSPF协议
- PPP协议
- MPLS 多协议标志交换基本原理