Internet 协议第六版 (IPv6) 规范
1。绪论
IP 第 6 版 (IPv6) 是继 IP 第 4 版 (IPv4) [RFC-791] 以后,Internet 协议的一个新版本。由 IPv4 到IPv6的改变主要集中在以下几个方面:
-
- 地址容量的扩展
IPv6把 IP 地址的大小从 32 位增至 128 位,可以支持更多的地址层次,更大数量的节点,以及更简单的地址自动配置。组播路由的可缩放性改进为给组播地址增加一个"范围"字段。又定义了一个叫做"anycast"的新的地址类型,用于把包发送给一组节点中的任意一个。 - 首部格式的简化
一些 IPv4 首部字段被删除或者成为可选字段,减少了一般情况下包的处理开销以及IPv6首部占用的带宽。 - 支持扩展和选项的改进
IP 首部选项编码方式的修改导致更加高效的传输,在选项长度方面更少的限制,以及将来引入新的选项时更强的适应性。 - 数据流标签的能力
加入一个新的能力,使得那些发送者要求特殊处理的属于特别的传输"流"的包能够贴上"标签",比如非缺省质量的服务或者"实时"服务。 - 认证和保密的能力
- 地址容量的扩展
为支持认证,数据完整性以及(可选的)数据保密的扩展都在IPv6中说明。本文描述IPv6基本首部以及最初定义的IPv6 扩展首部和选项。还将讨论包的大小问题,数据流标签和传输类别的语法,以及IPv6对上层协议的影响。IPv6 地址的格式和语法在其它文章中单独说明。IPv6版的 ICMP 是所有IPv6应用都需要包含的。
2。术语
节点 - 应用IPv6的一个设备。
路由器 - 传送不是发给自己的IPv6包的节点. [参见下面的说明]
主机 - 任何非路由器节点. [参见下面的说明]
上层 - 直接在IPv6上层的协议层。典型的例子是传输协议如 TCP 和 UDP,控制协议如 ICMP,路由协议如 OSPF,以及网络层或在IPv6里被开凿了通道 (也就是封装在IPv6里) 的低层协议,比如 IPX,AppleTalk或IPv6自身。
链路 - 一个通讯设备或者媒体。通过它节点可以与链路层,也就是直接在IPv6下面的那一层进行通讯。典型的例子是以太网(简单的或者网桥的),PPP 连接,X.25,帧中继,或者ATM网络以及网络层(或更高层)的"通道"。比如说通过 IPv4 或者IPv6本身的通道。
邻居 - 连在同一个链路上的节点。
接口 - 节点与链路的连接。
地址 -IPv6层中一个接口或者一组接口的标识符。
包 -IPv6首部加上有效数据。
链路 MTU - 最大传输单元。也就是以八位组为单位的能在链路中传输的包的最大大小。
路径 MTU - 源节点到目的节点之间的路径中所有链路的最小链路 MTU。
注意: 尽管不常见,但这是可能的: 就是一个设备具有多个接口,用来传输从它的某些(不是全部)接口传来的,不以自身为目的节点的包,并且抛弃那些从其他接口传来的,不以自身为目的节点的包。当这样的设备通过前一种接口接收包或者与其邻居联系时,它必须遵循协议中有关路由器的要求。当它通过后一种接口接收包或者与其邻居联系时,它必须遵循协议中有关宿主机的要求。
3.IPv6首部格式
|
|
|
|
|
|
|
|
下一个首部 |
|
跳数限制 |
|
源地址 |
|
目的地址 |
|
4.IPv6扩展首部
在IPv6里,可选的网络层信息在一个独立的首部编码,放在包中IPv6首部与上层协议首部之间。有这样几个为数不多的扩展首部,每个首部由不同的"下一个首部"的值来标识。一个IPv6首部可以携带零个,一个或者更多的扩展首部,每个扩展首部由前一个首部中的"下一个首部"字段标识。如下例所示:
除了一个特例,扩展首部不在包的传送路径中的任何节点检测和处理,直到这个包到达目的地址字段标识的那个节点(或者在组播的情况下,一组节点中的每一个)。在这里,对IPv6 首部的"下一个首部"字段的常规处理将是调用处理模块来处理第一个扩展首部,或者,如果不存在扩展首部,就处理上层首部。每个扩展首部的内容和语义决定是否处理下一个首部。因此,扩展首部必须严格按照它们在包中出现的次序来处理;这样,接收者就不能搜索整个包来寻找某个特定类型的首部,并且在处理所有前面的首部之前处理它。
上文所述的特例是指 Hop-by-Hop 选项首部。它携带了包的传送路径中的每个节点都必须检测和处理的信息,包括源节点和目的节点。Hop-by-Hop 选项首部如果存在,就必须紧跟在IPv6首部后面. IPv6首部中"下一个首部"字段的值为零表示存在这个首部。如果一个首部的处理结果要求节点处理下一个首部,但是节点无法识别这个首部的"下一个首部"字段值,那么节点就应该抛弃这个包,并且给包的源节点发送一个ICMP "参数存在问题"的报文,ICMP 编码值为 1 ("遇到无法识别的'下一个首部'类型")。ICMP 指针字段包含那个无法识别的值在原包中的偏移量。如果节点遇到IPv6首部以外的其他首部中的"下一个首部"字段的值为零的情况,应做相同的处理。
为了后面的首部保持8个八位组对齐,每个扩展首部都是8个八位组的整数倍长。每个扩展首部的多八位组字段都以它们的自然边界对齐。也就是说,宽度为 n 个八位组的字段放在距首部开始位置处 n 个八位组的整数倍的位置上,其中 n = 1,2, 4,或者 8。一个完整的IPv6实现应包含以下扩展首部的处理程序:
- Hop-by-Hop 选项首部
- 路由首部 (类型 0)
- 分片首部
- 目的地址首部
- 认证首部
- 封装安全有效数据首部 (ESP 首部)
4.1 扩展首部的顺序
当在同一个包中使用多于一个扩展首部时,建议以如下顺序排列这些首部:
IPv6首部 |
Hop-by-Hop 选项首部 |
目的地址选项首部 (注 1) |
路由首部 |
分片首部 |
认证首部 (注 2) |
封装安全有效数据首部 (注 2) |
目的地址选项首部 (注 |