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


Internet 协议第六版 (IPv6) 规范
关于本文的说明
本文详细说明了 Internet 团体的一个标准协议, 并且请求进一步改进的讨论和建
议.  请参考"Internet 正式协议标准" (标准 1) 的当前版本来得到本协议的标准
化陈述.  本文的分发不受限制.
版权声明
版权所有  (C)  Internet 协会 (1998).  保留所有权利.
摘要
本文详细说明了 Internet 协议第 6 版 (IPv6).  它有时叫做下一代 IP 或者
IPng.
目录
1. 绪论..........................................................2
2. 术语..........................................................3
3. IPv6 首部格式.................................................4
4. IPv6 扩展首部.................................................6
4.1 扩展首部的顺序...........................................7
4.2 选项.....................................................9
4.3 Hop-by-Hop 选项首部.....................................11
4.4 路由首部................................................12
4.5 分片首部................................................18
4.6 目的地址选项首部........................................23
4.7 "无下一个首部"..........................................24
5. 包的尺寸问题.................................................24
6. 数据流标签. .................................................25
7. 传输类别.....................................................25
8. 上层协议问题.................................................27
8.1 上层协议校验和..........................................27
8.2 包的最大生存期..........................................28
8.3 上层协议的最大有效载荷尺寸..............................28
8.4 对携带路由首部的包的响应................................29
RFC 2460                   IPv6 Specification              December 1998
附录 A. 数据流标签字段的语义和用法..............................30
附录 B. 选项字段格式的几点指导方针..............................32
安全性的考虑................................................... 35
致谢............................................................35
作者的地址......................................................35
参考文献........................................................35
自 RFC-1883 以来的变化..........................................36
完整的版权声明..................................................39
1.  绪论
IP 第 6 版 (IPv6) 是继 IP 第 4 版 (IPv4) [RFC-791] 以后, Internet 协议
一个新版本.  由 IPv4 到 IPv6 的改变主要集中在以下几个方面:
o  地址容量的扩展
IPv6 把 IP 地址的大小从 32 位增至 128 位, 可以支持更多的地址层次, 更
大数量的节点, 以及更简单的地址自动配置.  组播路由的可缩放性改进为
给组播地址增加一个"范围"字段.  又定义了一个叫做"anycast"的新的地址
类型, 用于把包发送给一组节点中的任意一个.
o  首部格式的简化
一些 IPv4 首部字段被删除或者成为可选字段, 减少了一般情况下包的处理
开销以及 IPv6 首部占用的带宽.
o  支持扩展和选项的改进
IP 首部选项编码方式的修改导致更加高效的传输, 在选项长度方面更少的
限制, 以及将来引入新的选项时更强的适应性.
o  数据流标签的能力
加入一个新的能力, 使得那些发送者要求特殊处理的属于特别的传输"流"的
包能够贴上"标签", 比如非缺省质量的服务或者"实时"服务.
RFC 2460                   IPv6 Specification              December 1998
o  认证和保密的能力
为支持认证, 数据完整性以及(可选的)数据保密的扩展都在 IPv6 中说明.
本文描述 IPv6 基本首部以及最初定义的 IPv6 扩展首部和选项.  还将讨论包的
尺寸问题, 数据流标签和传输类别的语法, 以及 IPv6 对上层协议的影响.  IPv6 地
址的格式和语法在 [ADDRARCH] 中单独说明.  IPv6 版的 ICMP 是所有 IPv6 应用
都需要包含的, 它在 [ICMPv6] 中说明.
2.  术语
节点        - 应用 IPv6 的一个设备.
路由器      - 传送不是发给自己的 IPv6 包的节点. [参见下面的说明]
主机        - 任何非路由器节点. [参见下面的说明]
上层        - 直接在 IPv6 上层的协议层.  典型的例子是传输协议如 TCP 和 UDP,
控制协议如 ICMP, 路由协议如 OSPF, 以及网络层或在 IPv6 里被
开凿了隧道 (也就是封装在 IPv6 里) 的低层协议, 比如 IPX,
AppleTalk, 或者 IPv6 自身.
链路        - 一个通讯设备或者媒体.  通过它节点可以与链路层, 也就是直接
在 IPv6 下面的那一层进行通讯.  典型的例子是以太网 (简单的
或者网桥的); PPP 连接; X.25帧中继, 或者 ATM 网络; 以及网络
层(或更高层)的"隧道".  比如说通过 IPv4 或者 IPv6 本身的隧
道.
邻居        - 连在同一个链路上的节点.
接口        - 节点与链路的连接.
地址        - IPv6 层中一个接口或者一组接口的标识符.
包          - IPv6 首部加上有效载荷.
链路 MTU    - 最大传输单元.  也就是以八位组为单位的能在链路中传输的包的
最大尺寸.
RFC 2460                   IPv6 Specification              December 1998
路径 MTU    - 源节点到目的节点之间的路径中所有链路的最小链路 MTU.
注意: 尽管不常见, 但这是可能的: 就是一个设备具有多个接口, 用来传输从它的
某些(不是全部)接口传来的, 不以自身为目的节点的包, 并且抛弃那些从其他接口
传来的, 不以自身为目的节点的包.  当这样的设备通过前一种接口接收包或者与
其邻居联系时, 它必须遵循协议中有关路由器的要求.  当它通过后一种接口接收
包或者与其邻居联系时, 它必须遵循协议中有关宿主机的要求.
3. IPv6 首部格式
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 版本  |   传输类别    |              数据流标签               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          有效载荷长度         |  下一个首部   |   跳数限制    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                          源  地  址                           +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                        目  的  地  址                         +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
版本                 4 比特 Internet 协议版本号 = 6.
传输类别             8 比特传输类别字段.  参见第 7 章.
数据流标签           20 比特数据流标签.  参见第 6 章.
有效载荷长度         16 比特无符号整数.  IPv6 有效载荷长度.  也就是以八
位组为单位, 在这个包中 IPv6 首部后面的其余部分的长
度.  (注意, 扩展首部 [第 4 章] 将被认为是有效载荷的
一部分, 计算在长度里.)
RFC 2460                   IPv6 Specification              December 1998
下一个首部           8 比特选择器.  标识紧接在 IPv6 首部后面的下一个首部
的类型.  使用与 IPv4 协议字段 [RFC-1700 及后续协议]
相同的数值.
跳数限制             8 比特无符号整数.  在每个传输此包的节点处递减1.  如
果跳数限制减为零, 就抛弃此包.
源地址               128 比特包的制作者的地址.  参见 [ADDRARCH]
目的地址             128 比特包的预期接收者的地址 (如果存在路由首部的话,
可能不是最终的接收者).  参见 [ADDRARCH] 和第 4.4 章.
4. IPv6 扩展首部
在 IPv6 里, 可选的网络层信息在一个独立的首部编码, 放在包中 IPv6 首部与上
层协议首部之间.  有这样几个为数不多的扩展首部, 每个首部由不同的"下一个首
部"的值来标识.  一个 IPv6 首部可以携带零个, 一个或者更多的扩展首部, 每个
扩展首部由前一个首部中的"下一个首部"字段标识.  如下例所示:
+---------------+------------------------
|   IPv6 首部   | TCP 首部 + 数据
|               |
|  下一个首部 = |
|      TCP      |
+---------------+------------------------
|   IPv6 首部   |    路由首部    | TCP 首部 + 数据
|               |                |
|  下一个首部 = |   下一个首部 = |
|    路由首部   |      TCP       |
+---------------+----------------+------------------------
+---------------+----------------+-----------------+-----------------
|   IPv6 首部   |    路由首部    |     分片首部    |  TCP 首部 + 数据
|               |                |                 |      的分片
|  下一个首部 = |  下一个首部 =  |  下一个首部 =   |
|    路由首部   |    分片首部    |       TCP       |
+---------------+----------------+-----------------+-----------------
除了一个特例, 扩展首部不在包的传送路径中的任何节点检测和处理, 直到这个包
到达目的地址字段标识的那个节点 (或者在组播的情况下, 一组节点中的每一个).
在这里, 对IPv6 首部的"下一个首部"字段的常规处理将是调用处理模块来处理第
一个扩展首部, 或者, 如果不存在扩展首部, 就处理上层首部.  每个扩展首部的
内容和语义决定是否处理下一个首部.  因此, 扩展首部必须严格按照它们在包中
出现的次序来处理; 这样, 接收者就不能搜索整个包来寻找某个特定类型的首部, 并
且在处理所有前面的首部之前处理它.
上文所述的特例是指 Hop-by-Hop 选项首部.  它携带了包的传送路径中的每个节
点都必须检测和处理的信息, 包括源节点和目的节点.  Hop-by-Hop 选项首部如果
存在, 就必须紧跟在 IPv6 首部后面.  IPv6 首部中"下一个首部"字段的值为零表
示存在这个首部.
如果一个首部的处理结果要求节点处理下一个首部, 但是节点无法识别这个首部的"
下一个首部"字段值, 那么节点就应该抛弃这个包, 并且给包的源节点发送一个
ICMP "参数存在问题"的报文, ICMP 编码值为 1 ("遇到无法识别的'下一个首部'
类型").  ICMP 指针字段包含那个无法识别的值在原包中的偏移量.  如果节点遇
到 IPv6 首部以外的其他首部中的"下一个首部"字段的值为零的情况, 应做相同的
处理.
为了后 娴氖撞勘3?8 个八位组对齐, 每个扩展首部都是 8 个八位组的整数倍长.
每个扩展首部的多八位组字段都以它们的自然边界对齐.  也就是说, 宽度为 n 个
八位组的字段放在距首部开始位置处 n 个八位组的整数倍的位置上, 其中 n = 1, 2,
4, 或者 8.
一个完整的 IPv6 实现应包含以下扩展首部的处理程序:
Hop-by-Hop 选项首部
路由首部 (类型 0)
分片首部
目的地址首部
认证首部
封装安全有效载荷首部 (ESP 首部)
前四个将在本文中加以说明, 后两个在 [RFC-2402] 和 [RFC-2406] 中分别进行说明。
4.1  扩展首部的顺序
当在同一个包中使用多于一个扩展首部时, 建议以如下顺序排列这些首部:
IPv6 首部
Hop-by-Hop 选项首部
目的地址选项首部 (注 1)
路由首部
分片首部
认证首部 (注 2)
封装安全有效载荷首部 (注 2)
目的地址选项首部 (注 3)
上层协议首部
注 1:   由 IPv6 目的地址字段及路由首部列出的后续地址中第一个出现
的目的地址处理的选项.
注 2:   关于认证首部和封装安全有效载荷首部的相关顺序的附加建议参
见 [RFC-2406].
注 3:   只由包的最终目的地址处理的选项.
除了目的地址选项首部最多出现两次 (一次在路由首部前, 一次在上层协议首部前)
以外, 每个扩展首部应当只出现一次.
如果上层协议首部是另一个 IPv6 首部 (在使用隧道技术或封装在 IPv6 中的情况
下), 它后面可以有自己的扩展首部. 这些扩展首部以同样的建议顺序独立排列.
如果定义了其他的扩展首部, 与上面列出的扩展首部相关的次序限制必须加以说明.
除了 Hop-by-Hop 选项首部必须紧跟在 IPv6 首部后面以外, IPv6 节点必须接受
并且尽量处理任意顺序的, 以及在同一个包内出现任意多次的扩展首部.  尽管如
此, 强烈建议 IPv6 包的源节点遵守上面的建议顺序, 除非后续的协议规范修改这
一顺序.


相关内容