系统管理指南:IP 服务

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 中继路由器隧道的注意事项