分享

Internet 协议第六版 (IPv6) 规范

 King.Roger 2011-09-28
Internet 协议第六版 (IPv6) 规范

 

1、绪论

IP 第 6 版 (IPv6) 是继 IP 第 4 版 (IPv4) [RFC-791] 以后,Internet 协议的一个新版本。由 IPv4 到IPv6的改变主要集中在以下几个方面:

1>、地址容量的扩展:
IPv6把 IP 地址的大小从 32 位增至 128 位,可以支持更多的地址层次,更大数量的节点,以及更简单的地址自动配置。组播路由的可缩放性改进为给组播地址增加一个"范围"字段。又定义了一个叫做"anycast"的新的地址类型,用于把包发送给一组节点中的任意一个。

2>、首部格式的简化:
一些 IPv4 首部字段被删除或者成为可选字段,减少了一般情况下包的处理开销以及IPv6首部占用的带宽。 支持扩展和选项的改进
IP 首部选项编码方式的修改导致更加高效的传输,在选项长度方面更少的限制,以及将来引入新的选项时更强的适应性。

3>、数据流标签的能力:
加入一个新的能力,使得那些发送者要求特殊处理的属于特别的传输"流"的包能够贴上"标签",比如非缺省质量的服务或者"实时"服务。

4>、认证和保密的能力:

为支持认证,数据完整性以及(可选的)数据保密的扩展都在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)

目的地址选项首部 (注 3)

上层协议首部

注 1: 由IPv6目的地址字段及路由首部列出的后续地址中第一个出现的目的地址处理的选项。
注 2: 关于认证首部和封装安全有效数据首部的相关顺序的附加建议参见其它文献。
注 3: 只由包的最终目的地址处理的选项。

除了目的地址选项首部最多出现两次 (一次在路由首部前,一次在上层协议首部前)以外,每个扩展首部应当只出现一次。如果上层协议首部是另一个IPv6首部 (在使用通道技术或封装在IPv6中的情况下),它后面可以有自己的扩展首部. 这些扩展首部以同样的建议顺序独立排列。如果定义了其他的扩展首部,与上面列出的扩展首部相关的次序限制必须加以说明。除了 Hop-by-Hop 选项首部必须紧跟在IPv6首部后面以外,IPv6节点必须接受并且尽量处理任意顺序的,以及在同一个包内出现任意多次的扩展首部。尽管如此,建议IPv6包的源节点遵守上面的建议顺序,除非后续的协议规范修改这一顺序。

4.2 选项

当前已定义的扩展首部中的两个:Hop-by-Hop 选项首部和目的地址选项首部,携带不定数量的,以类型-长度-值(TLV)格式进行编码的选项,其格式如下:

选项类型

8 位标识符,标识选项的类型。

选项数据长度

8 位无符号整数。以八位组为单位的选项数据字段的长度。

选项数据

可变长度字段。依选项类型而不同的数据。

 

00

跳过这一选项,继续处理首部。

01

抛弃这个包

10

抛弃这个包,并且不管包的目的地址是不是组播地址,都给包的源地址发送一个 ICMP "参数存在问题",编码 2 的报文,指针指向无法识别的选项类型。

11

抛弃这个包,并且只有当包的目的地址不是组播地址时,才给包的源地址发送一个 ICMP "参数存在问题",编码 2 的报文,指针指向无法识别的选项类型。

选项类型标识符的第三位指明了选项数据是否可以改变到最终目的地址的选路。若存在认证首部,在包计算或校验认证值时,可改变选路的选项的整个数据字段都必须当作全零的八位组来处理。

0 - 选项数据不会改变选路
1 - 选项数据可能改变选路

上述的前三位应作为选项类型的一部分,而不能独立于选项类型之外。这就是说,某一特定的选项是由全部 8 位的选项类型标识符标识的,而并不只是选项类型中的后面 5 位。Hop-by-Hop 选项首部和目的地址选项首部使用相同的选项类型编码空间。尽管如此,某一特定类型的选项的规范可以限制其只用于两者之一。有些选项可能具有明确的对齐要求,以保证选项数据字段中的多八位组值能够落在其自然边界上。选项的对齐要求用符号 xn+y 来说明,表示选项类型必须出现在从首部开始位置处 x 个八位组的整数倍加上 y 个八位组的位置上。例如: 2n表示从首部开始处 2 个八位组的整数倍的偏移量。8n+2 表示从首部开始处 8 个八位组的整数倍加上 2 个八位组的偏移量。有两种填充选项,用来在需要时对齐后续的选项,以及把整个首部填充成 8 个八位组的整数倍长。所有的IPv6实现都必须能够识别这些填充选项。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多