Network 版 (精华区)
发信人: PaulD (但屈指西风几时来,又不道流年暗中偷换), 信区: Network
标 题: Internet 协议第六版 (IPv6) 规范(五)
发信站: 哈工大紫丁香 (2003年07月31日11:40:23 星期四), 站内信件
5. 包的大小问题
IPv6要求互联网上的每条链路具有 1280 或更多个八位组的 MTU。无法在一片之内传送 1
280 个八位组的链路必须根据链路的情况在IPv6下层的协议中提供分片和重组机制。具有
可配置 MTU 的链路 (比如 PPP 链路 [RFC-1661]) 必须配置为具有至少 1280个八位组的
MTU;建议配置成具有 1500 或更多个八位组的 MTU,这样可以容纳可能的封装 (也就是
"通道") 而不至于在IPv6协议层分片。与链路直接连接的节点必须能够接收链路 MTU 大小
的包。建议IPv6节点使用 "路径 MTU 发现" 技术 [RFC-1981],以发现比 1280 个八位组
更大的路径 MTU,并发挥其优点。但是,一个最小的IPv6实现 (比如,在启动 ROM 里) 可
以简单的限制自己只发送小于 1280 个八位组的包,从而忽略 "路径 MTU 发现" 技术。要
发送大于路径 MTU 的包,节点可以使用IPv6分片首部,在源节点将包分片,并在目的节点
将包重组。但是,如果应用程序能够调整包的大小来适合标准的路径MTU,那么最好不要使
用分片。节点必须能够接收重组后大小为 1500 个八位组的分片包。同时,允许节点接收
重组后大于 1500 个八位组的分片包。基于IPv6分片来发送大于路径 MTU 的包的上层协议
或应用程序不应发送大于 1500 个八位组的包,除非它确信目的节点能够重组这样大的包
。
作为发往 IPv4 目的节点的IPv6包 (也就是从IPv6转换成 IPv4 的包) 的响应, IPv6的初
始节点可能收到 ICMP "包太大"报文,报告下一跳 MTU 小于 1280。在这种情况下,IPv6节
点不必将后续的包的大小减小到 1280 以下,但必须在这些包中包含一个分片首部,使得
负责从IPv6到 IPv4 之间转换的路由器能够得到一个适当的标识值,用来生成 IPv4 分片
。需要注意的是,这就意味着有效数据将减小到 1232 个八位组 ( 1280 减去IPv6首部的
40 和分片首部的 8),如果还有其他的扩展首部,有效数据将变得更小。
6。数据流标签
IPv6首部中 20 位的数据流标签字段用于源节点标识那些需要IPv6路由器特殊处理的包的
序列,比如非缺省质量的服务或者"实时"服务。本文产生之时,IPv6在这方面尚处于实验
阶段,并且随着因特网上支持数据流的要求变得越来越清楚,它还可能有所改变。不支持
数据流标签字段功能的主机和路由器应在初始化数据包的时候将此字段设为零,传输包的
时候保持不变,接收包的时候忽略。
7。传输类别
IPv6首部中 8 位的传输类别字段可用于初始节点和/或转寄路由器标识和区分不同IPv6包
的类别或优先级。撰写本规范的时候,已经总结了在使用 IPv4 服务类型和/或优先级位
(用来为 IP 包提供不同形式的"区别服务",不同于显式的建立数据流) 的过程中的若干经
验. IPv6首部中的传输类别字段在IPv6中提供了相似的功能。希望这些经验能够使得人们
在哪种传输分类对 IP 包最为有用的问题上达成一致意见。对IPv6传输类别中全部或部分
数据位的结构和语义的详细定义,或者是实验性的,或者是最终的标准,都将在另外的文
章中提供。
下面是传输类别字段所应满足的总的要求:
o 节点中IPv6服务的服务接口必须为上层协议规定一种给初始包提供传输类别数据位的值
的方法。
o 支持部分或全部传输类别数据位的某一特定 (实验性的或最终标准) 用法的节点可以根
据其用法修改它们所生成的,传输的或者收到的包中的这些位的值。如果节点不支持这一
用法,应忽略这些位,并保持其值不变。
o 上层协议不应假定所收到的包中传输类别数据位的值与源节点发送此包时的值相同。
8. 上层协议的问题
8.1 上层协议校验和
在计算校验和时包含 IP 首部中地址的传输层或其他上层协议必须为通过IPv6进
行传输加以相应的改进,将 32 位的 IPv4 地址改为 128 位的IPv6地址。特别
地,下面的例子展示了 TCP 和 UDP 的IPv6"伪首部":
http://www.longen.org/E-K/detaile~k/IPv6-16.gif
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 对携带路由首部的包的响应
当上层协议发送一个或多个包,作为包含路由首部的包的响应时,响应包中不能包含由所
收到的路由首部"反向"而自动得到的路由首部。除非收到的源地址和路由首部的完整性和
可靠性已得到验证 (比如通过使用收到的包中的认证首部)。换句话说,只有下面几类包可
以响应由路由首部定向的包:
o 不携带路由首部的响应包。
o 携带路由首部的响应包,但其携带的路由首部不是由所收到的包中的路由首部反向得到
的 (例如,由本地配置信息提供的路由首部)
o 携带路由首部的响应包,其路由首部是由所收到的包中的路由首部反向而得到的。但所
收到的包中的源地址和路由首部的完整性和可靠性必须经过响应者验证。
--
The secret of happy living is not to do what you like,
but to like what you do.
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.230.170]
※ 修改:·PaulD 於 07月31日11:42:14 修改本文·[FROM: 202.118.230.170]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.283毫秒