系统管理指南:IP 服务

第 3 章 IPv6 介绍(概述)

本章概述了 Oracle Solaris : Internet 协议版本 6 (Internet Protocol version 6, IPv6) 的实现。此实现包括支持 IPv6 地址空间的相关守护进程和实用程序。

IPv6 和 IPv4 地址可以在 Oracle Solaris : 联网环境中共存。配置了 IPv6 地址的系统将保留其原有的 IPv4 地址。涉及 IPv6 地址的操作不会对 IPv4 操作造成不良影响,反之亦然。

本章主要讨论以下主题:

有关 IPv6 的更多详细信息,请查阅以下各章:

IPv6 的主要特征

与 IPv4 相比,IPv6 的显著特征是具有更大的地址空间。IPv6 还在许多方面改进了 Internet 功能,本节将概述这些方面。

对寻址进行了扩展

IP 地址大小从 IPv4 中的 32 位增加到 IPv6 中的 128 位,从而可以支持更多层的寻址分层结构。另外,IPv6 提供了更多的可寻址 IPv6 系统。有关更多信息,请参见IPv6 寻址概述

地址自动配置和相邻节点搜索

IPv6 相邻节点搜索 (Neighbor Discovery, ND) 协议简化了 IPv6 地址的自动配置。自动配置是 IPv6 主机的一个功能,可用来自动生成其自身的 IPv6 地址,从而简化地址管理并缩短管理时间。有关更多信息,请参见IPv6 地址自动配置

相邻节点搜索协议对应于以下 IPv4 协议的组合: 地址解析协议 (Address Resolution Protocol, ARP)、Internet 控制消息协议 (Internet Control Message Protocol, ICMP)、路由器搜索 (Router Discovery, RDISC) 和 ICMP 重定向。IPv6 路由器使用相邻节点搜索来通告 IPv6 站点前缀。IPv6 主机使用相邻节点搜索来实现各种目的,包括从 IPv6 路由器请求前缀。有关更多信息,请参见IPv6 相邻节点搜索协议概述

简化了包头的格式

IPv6 包头格式要么删除某些 IPv4 包头字段,要么将这些字段设为可选。尽管地址大小增加了,但这种更改却最大程度地减少了 IPv6 包头所占用的带宽。虽然 IPv6 地址长度是 IPv4 地址长度的四倍,但是 IPv6 包头的大小只是 IPv4 包头大小的两倍。

改进了对 IP 数据包头选项的支持

更改了 IP 数据包头选项的编码方式,从而提高了转发效率。而且,对 IPv6 选项长度的限制也不那么严格。这种更改为以后引入新选项提供了更大的灵活性。

对 IPv6 寻址提供了应用程序支持

许多关键的 Oracle Solaris : 网络服务都能够识别和支持 IPv6 地址,例如:

其他 IPv6 资源

除本部分外,您还可以从以下两节列出的资源中获取有关 IPv6 的信息。

IPv6 互联网信息文档和标准与 Internet 草案

有许多与 IPv6 有关的 RFC。下表列出了本书截稿时已有的主要 IPv6 文章及其 Internet 工程任务组 (Internet Engineering Task Force, IETF) Web 的位置。

表 3–1 与 IPv6 相关的 RFC 和 Internet 草案

RFC 或 Internet 草案 

主题 

位置 

RFC 2461,Neighbor Discovery for IP Version 6 (IPv6)

描述 IPv6 相邻节点搜索协议的特征和功能 

http://www.ietf.org/rfc/rfc2461.txt$number=2461

RFC 3306,Unicast—Prefix—Based IPv6 Multicast Addresses

描述 IPv6 多点传送地址的格式和类型 

ftp://ftp.rfc-editor.org/in-notes/rfc3306.txt

RFC 3484, Default Address Selection for Internet Protocol version 6 (IPv6)

描述用于选择 IPv6 缺省地址的算法 

http://www.ietf.org/rfc/rfc3484?number=3484

RFC 3513,Internet Protocol version 6 (IPv6) Addressing Architecture

包含有关 IPv6 地址类型的完整详细信息,并提供了很多示例 

http://www.ietf.org/rfc/rfc3513.txt?number=3513

RFC 3587,IPv6 Global Unicast Address Format

定义 IPv6 单点传送地址的标准格式 

http://www.ietf.org/rfc/rfc3587.txt?number=3587

Web 站点

下面的 Web 站点提供有关 IPv6 的有用信息。

表 3–2 与 IPv6 相关的 Web 站点

Web 站点 

说明 

位置 

IPv6 论坛 

该社区的 Web 站点提供世界各地与 IPv6 相关的演示文稿、活动、课程和实现的链接 

http://www.ipv6forum.com

Internet 工程任务组 IPv6 工作组 

此 IETF 工作组的主页提供所有相关 IPv6 RFC 和 Internet 草案的链接 

http://www.ietf.org/html.charters/ipv6-charter.html

IPv6 网络概述

本节介绍 IPv6 网络拓扑的基本术语。下图显示了 IPv6 网络的基本部分。

图 3–1 IPv6 网络的基本组件

下文将对该图进行说明。

该图描述 IPv6 网络以及它与 ISP 的连接。内部网络由链路 1、链路 2、链路 3 和链路 4 组成。每个链路上安装若干台主机,末端连接一台路由器。链路 4 是网络的 DMZ,它的一端连接边界路由器。边界路由器使用 IPv6 隧道与 ISP 相连,从而为网络提供 Internet 连通性。链路 2 和 3 作为子网 8a 进行管理。子网 8b 仅包含链路 1 上的系统。子网 8c 与链路 4 上的 DMZ 相接。

图 3–1 中所示,IPv6 网络与 IPv4 网络具有几乎完全相同的组件。但是,IPv6 术语与 IPv4 术语稍有不同。下面是用在 IPv6 上下文中的网络组件的常见术语。

节点

具有 IPv6 地址且接口配置为支持 IPv6 的任何系统。该专业术语适用于主机和路由器。

IPv6 路由器

用来转发 IPv6 包的节点。路由器必须至少有一个接口配置为支持 IPv6。IPv6 路由器还可以通过内部网络通告企业的已注册 IPv6 站点前缀。

IPv6 主机

具有 IPv6 地址的节点。IPv6 主机可以有多个配置为支持 IPv6 的接口。与 IPv4 主机一样,IPv6 主机也不转发包。

链路

单一且连续的网络介质,其两端均连接有路由器。

相邻节点

与本地节点在同一个链路上的 IPv6 节点。

IPv6 子网

IPv6 网络的管理段。与 IPv4 子网的组件一样,IPv6 子网的组件也可以直接对应于链路上的所有节点。必要时,可以在单独的子网中对链路上的节点进行管理。另外,IPv6 还支持多链路子网,在多链路子网上,多个链路上的节点可以是同一个子网的组件。图 3–1 中的链路 2 和链路 3 是多链路子网 8a 的组件。

IPv6 隧道

在一个 IPv6 节点和另一个 IPv6 节点端点之间提供虚拟的点对点路径的隧道。IPv6 支持可手动配置的隧道和 6to4 自动隧道。

边界路由器

位于网络边界的路由器,是通往本地网络外部端点的 IPv6 隧道的一个端点。此路由器必须至少有一个连接到内部网络的 IPv6 接口。对于外部网络,此路由器可以有一个 IPv6 接口或一个 IPv4 接口。

IPv6 寻址概述

因为一个节点可以有多个接口,所以应将 IPv6 地址指定给接口,而非节点。此外,可以为一个接口指定多个 IPv6 地址。


注 –

有关 IPv6 地址格式的完整技术信息,请参阅 RFC 2374,IPv6 Global Unicast Address Format


IPv6 定义了以下三种地址类型:

单点传送

标识单个节点的接口。

多点传送

标识一组通常位于不同节点上的接口。发送到多点传送地址的包将传递到多点传送组的所有成员。

任意点传送

标识一组通常位于不同节点上的接口。发送到任意点传送地址的包将传递到任意点传送组中物理位置最接近发送者的成员节点。

IPv6 地址的各个部分

IPv6 地址的长度为 128 位,由八个 16 位字段组成,相邻字段用冒号分隔。IPv6 地址中的每个字段都必须包含一个十六进制数字,而 IPv4 地址则以点分十进制表示法表示。在下图中,x 表示十六进制数字。

图 3–2 IPv6 地址的基本格式

该图显示 IPv6 地址的三个部分,下文将对此进行说明。

最左侧的三个字段(48 位)包含站点前缀。站点前缀描述通常由 ISP 或区域 Internet 注册机构 (Regional Internet Registry, RIR) 分配给您的站点的公共拓扑

下一个字段是您(或其他管理员)为您的站点分配的 16 位子网 ID。子网 ID 描述专用拓扑(也称为站点拓扑),因为它是您的站点的内部 ID。

最右侧的四个字段(64 位)包含接口 ID,也称为标记。接口 ID 可以从接口的 MAC 地址自动配置,也可以采用 EUI-64 格式手动配置。

请再看一下图 3–2 中的地址:

2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b

此示例显示了 IPv6 地址的全部 128 位。前 48 位 2001:0db8:3c4d 包含表示公共拓扑的站点前缀。随后的 16 位 0015 包含代表站点专用拓扑的子网 ID。低阶(最右边的 64 位 0000:0000:1a2f:1a2b)包含接口 ID。

缩短 IPv6 地址

大多数 IPv6 地址都不会占用全部 128 位,这可能会导致一些字段会被零填充或仅包含零。

IPv6 寻址体系结构允许您使用两个冒号 (: : ) 表示法来表示连续的 16 位零字段。例如,可以通过将接口 ID 中两个连续的零字段替换为两个冒号来缩短图 3–2 中的 IPv6 地址。替换后的地址为 2001:0db8:3c4d:0015::1a2f:1a2b。其他零字段可以表示为单个 0。还可以省略字段中的前导零,如将 0db8 更改为 db8

因此,地址 2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b 可以缩短为 2001:db8:3c4d:15::1a2f:1a2b

可以使用两个冒号替代 IPv6 地址中任意连续的全零字段。例如,IPv6 地址 2001:0db8:3c4d:0015:0000:d234::3eee:0000 可以缩短为 2001:db8:3c4d:15:0:d234:3eee::

IPv6 中的前缀

IPv6 地址最左边的字段包含用来路由 IPv6 包的前缀。IPv6 前缀具有以下格式:

prefix/length in bits

前缀长度以无类域间路由 (classless inter-domain routing, CIDR) 表示法声明。CIDR 表示法在地址末尾有一个斜杠,斜杠后跟前缀长度(以位为单位)。有关 CIDR 格式的 IP 地址的信息,请参阅设计 CIDR IPv4 寻址方案

IPv6 地址的站点前缀最多占用 IPv6 地址最左侧的 48 位。例如,IPv6 地址 2001:db8:3c4d:0015:0000:0000:1a2f:1a2b/48 的站点前缀包含在最左边的 48 位 2001:db8:3c4d 中。此前缀可使用如下形式(将零省略掉)来表示:

2001:db8:3c4d::/48


注 –

前缀 2001:db8::/32 是专用于文档示例的特殊 IPv6 前缀。


您还可以指定子网前缀,该前缀用来定义连接到路由器的网络的内部拓扑。示例 IPv6 地址具有以下子网前缀:

2001:db8:3c4d:15::/64

子网前缀总是包含 64 位。这些位中有 48 位用于站点前缀,还有 16 位用于子网 ID。

下列前缀已留作特殊用途:

2002::/16

指示后跟 6to4 路由前缀。

fe80::/10

指示后跟链路本地地址。

ff00::/8

指示后跟多点传送地址。

单点传送地址

IPv6 包括两种不同的单点传送地址指定方式:

单点传送地址的类型由地址中最左边(高阶)的连续位(其中包含前缀)来确定。

单点传送地址的格式按以下分层结构进行组织:

全局单点传送地址

全局单点传送地址在 Internet 中保持全局唯一。IPv6 中的前缀中的示例 IPv6 地址是全局单点传送地址。下图显示全局单点传送地址的范围,它们对应于 IPv6 地址的相应部分。

图 3–3 全局单点传送地址的各个部分

该图将单点传送地址分为公共拓扑、站点前缀、站点拓扑、子网 ID 和接口 ID。

公共拓扑

站点前缀定义从网络到路由器的公共拓扑。企业的站点前缀可以从 ISP 或区域 Internet 注册机构 (Regional Internet Registry, RIR) 获取。

站点拓扑和 IPv6 子网

在 IPv6 中,子网 ID 定义网络的管理子网,它的最大长度为 16 位。可以在配置 IPv6 网络的过程中指定子网 ID。子网前缀通过指定已分配了子网的特定链路来定义路由器的站点拓扑。

IPv6 子网在概念上与 IPv4 子网相同,因为每个子网通常都与一个硬件链路相关联。但是,IPv6 子网 ID 用十六进制表示法表示,而不是用点分十进制表示法表示。

接口 ID

接口 ID 用来标识特定节点的接口。接口 ID 必须在子网内唯一。IPv6 主机可以使用相邻节点搜索协议自动生成其自身的接口 ID。相邻节点搜索协议基于主机接口的 MAC 地址或 EUI-64 地址自动生成接口 ID。也可以手动指定接口 ID,建议对 IPv6 路由器和启用了 IPv6 的服务器采用这种方式。有关如何创建手动 EUI-3513 地址的说明,请参阅 RFC 3513,Internet Protocol Version 6 (IPv6) Addressing Architecture

过渡型全局单点传送地址

为了进行过渡,IPv6 协议提供在 IPv6 地址中嵌入 IPv4 地址这一功能。这种类型的 IPv4 地址便于借助现有的 IPv4 网络隧道传送 IPv6 包。6to4 地址就是一种过渡型全局单点传送地址。有关 6to4 寻址的更多信息,请参阅6to4 自动隧道

链路本地单点传送地址

链路本地单点传送地址只能用在本地网络链路上。在企业外部,链路本地地址不但无效,而且无法识别。以下示例显示了链路本地地址的格式。


示例 3–1 链路本地单点传送地址的各个部分

该图说明 IPv6 链路本地地址的格式,下文将对此进行说明。

链路本地前缀具有以下格式:

fe80::interface-ID/10

下面是链路本地地址的示例:

fe80::23a1:b152


fe80

10 位二进制前缀 1111111010 的十六进制表示形式。此前缀用来将 IPv6 地址的类型标识为链路本地地址。

interface-ID

接口的十六进制地址,通常从 48 位 MAC 地址派生而来。

如果在安装 Oracle Solaris : 的过程中启用了 IPv6,则会使用链路本地地址配置本地计算机上编号最小的接口。每个接口都至少需要一个链路本地地址,以便将该节点与本地链路上的其他节点区分开。因此,您需要为节点的其他接口手动配置链路本地地址。完成配置后,该节点会使用其链路本地地址进行自动地址配置和相邻节点搜索。

多点传送地址

IPv6 支持使用多点传送地址。多点传送地址用来标识多点传送组,多点传送组是一组通常位于不同节点上的接口。一个接口可以属于任意数量的多点传送组。如果 IPv6 地址的前 16 位是 ff00 n,则说明该地址是多点传送地址。

多点传送地址用来向定义为多点传送组成员的所有接口发送信息或服务。例如,使用多点传送地址与本地链路上的所有 IPv6 节点进行通信。

在创建某个接口的 IPv6 单点传送地址时,内核会自动使该接口成为某些多点传送组的成员。例如,内核会使每个节点都成为“请求节点”多点传送组的成员,相邻节点搜索协议使用该组来检测可访问性。内核还自动使节点成为“所有节点”或“所有路由器”多点传送组的成员。

有关多点传送地址的详细信息,请参阅IPv6 多点传送地址详解。有关技术信息,请参见 RFC 3306, Unicast-Prefix-based IPv6 Multicast Addresses,其中介绍了多点传送地址的格式。有关正确使用多点传送地址和组的更多信息,请参见 RFC 3307, Allocation Guidelines for IPv6 Multicast Addresses

任意点传送地址和组

IPv6 任意点传送地址用来标识一组位于不同 IPv6 节点上的接口。每组接口都称作一个任意点传送组。当包发送到任意点传送地址时,任意点传送组中物理位置最接近发送者的成员将收到包。


注 –

Oracle Solaris : 实现的 IPv6 不支持创建任意点传送地址和任意点传送组。但是,Oracle Solaris : IPv6 节点可以将包发送到任意点传送地址。有关更多信息,请参见6to4 中继路由器隧道的注意事项


IPv6 相邻节点搜索协议概述

IPv6 引入了相邻节点搜索协议,该协议使用消息传递作为处理相邻节点间的交互的方式。相邻节点是指在同一链路上的 IPv6 节点。例如,通过发出与相邻节点搜索相关的消息,节点可以获知相邻节点的链路本地地址。相邻节点搜索控制 IPv6 本地链路上的以下主要活动:

相邻节点搜索使用下列类型的 ICMP 消息在链路上的节点之间进行通信:

有关相邻节点搜索消息和其他相邻节点搜索协议主题的详细信息,请参阅IPv6 相邻节点搜索协议。有关相邻节点搜索的技术信息,请参见 RFC 2461, Neighbor Discovery for IP Version 6 (IPv6)

IPv6 地址自动配置

IPv6 的一个主要特征就是允许主机自动配置接口。通过相邻节点搜索,主机可以在本地链路上查找 IPv6 路由器并请求站点前缀。在自动配置过程中,主机将执行以下操作:

无状态自动配置概述

无状态自动配置不需要手动配置主机,只需对路由器进行很少的配置(如果需要的话),而且不需要其他服务器。无状态机制允许主机生成其本身的地址。无状态机制使用本地信息以及由路由器通告的非本地信息来生成地址。

可以为接口实现临时地址,临时地址也是自动配置的。可以为主机上的一个或多个接口启用临时地址标记。但是,与自动配置的标准 IPv6 地址不同,临时地址由站点前缀和一个随机生成的 64 位数字组成。这个随机数将成为 IPv6 地址的接口 ID 部分。临时地址作为接口 ID 时,不会生成链路本地地址。

路由器将通告链路上已指定的所有前缀。IPv6 主机使用相邻节点搜索从本地路由器获取子网前缀。主机通过合并子网前缀和从接口的 MAC 地址生成的接口 ID 来自动生成 IPv6 地址。如果没有路由器,主机可以只生成链路本地地址。链路本地地址只能用于和同一链路上的节点进行通信。


注 –

请不要使用无状态自动配置功能来创建服务器的 IPv6 地址。主机会在自动配置过程中基于特定于硬件的信息来自动生成接口 ID。如果用新接口替换现有的接口,当前的接口 ID 可能会变得无效。


IPv6 隧道概述

对于大多数企业,必须以循序渐进的方式在现有的 IPv4 网络中分步引入 IPv6。Oracle Solaris : 双栈网络环境既支持 IPv4 功能又支持 IPv6 功能。因为大多数网络都使用 IPv4 协议,所以 IPv6 网络目前需要一种在其边界外部进行通信的方法。IPv6 网络可以使用隧道来实现这一目的。

在大多数 IPv6 隧道传送方案中,外发 IPv6 包封装在 IPv4 包内部。IPv6 网络的边界路由器可以设置经由各种 IPv4 网络到达目标 IPv6 网络的边界路由器的点对点隧道。包通过隧道到达目标网络的边界路由器,该边界路由器将对包取消封装,然后将单独的 IPv6 包转发到目标节点。

Oracle Solaris : IPv6 实现支持下列隧道传送方案:

有关 IPv6 隧道的详细信息,请参阅IPv6 隧道。有关 IPv4 到 IPv4 隧道和 VPN 的信息,请参阅虚拟专用网络和 IPsec