Aller au contenu principal

2. IPv6 Addressing (IPv6地址)

IPv6地址是用于接口和接口集的128位标识符(其中"接口"的定义见[IPV6]第2节)。有三种类型的地址:

Unicast (单播):
单个接口的标识符。发送到单播地址的数据包被传送到该地址标识的接口。

Anycast (任播):
一组接口的标识符(通常属于不同的节点)。发送到任播地址的数据包被传送到该地址标识的接口中的一个(根据路由协议的距离度量,传送到"最近"的一个)。

Multicast (组播):
一组接口的标识符(通常属于不同的节点)。发送到组播地址的数据包被传送到该地址标识的所有接口。

IPv6中没有广播地址 (Broadcast Addresses),其功能被组播地址取代。

在本文档中,地址中的字段被赋予特定的名称,例如"subnet"。当此名称与术语"ID"(标识符)一起使用时(例如"subnet ID"),它指的是命名字段的内容。当它与术语"prefix"(前缀)一起使用时(例如"subnet prefix"),它指的是从左侧到包括该字段的所有地址部分。

在IPv6中,除非特别排除,否则全零和全一都是任何字段的合法值。具体来说,前缀可以包含或以零值字段结束。


2.1. Addressing Model (地址模型)

所有类型的IPv6地址都分配给接口,而不是节点。IPv6单播地址指的是单个接口。由于每个接口属于单个节点,因此该节点的任何接口的单播地址都可以用作该节点的标识符。

所有接口都必须至少有一个链路本地单播地址 (Link-Local Unicast Address)(有关其他必需地址,请参见第2.8节)。单个接口也可以有多个任何类型(单播、任播和组播)或范围的IPv6地址。对于不用作任何IPv6数据包的源或目的地(往返于非邻居)的接口,不需要范围大于链路范围 (Link-Scope) 的单播地址。这对于点对点接口有时很方便。此地址模型有一个例外:

如果实现在将多个物理接口呈现给互联网层时将其视为一个接口,则可以将单播地址或一组单播地址分配给多个物理接口。这对于在多个物理接口上进行负载共享很有用。

目前,IPv6延续了IPv4的模型,即一个子网前缀与一个链路相关联。可以将多个子网前缀分配给同一链路。


2.2. Text Representation of Addresses (地址的文本表示)

有三种常规形式用于将IPv6地址表示为文本字符串:

形式1:首选形式

首选形式是 x:x:x:x:x:x:x:x,其中'x'是地址的八个16位部分的一到四个十六进制数字。

示例:

ABCD:EF01:2345:6789:ABCD:EF01:2345:6789

2001:DB8:0:0:8:800:200C:417A

注意,不必在单个字段中写入前导零,但每个字段中必须至少有一个数字(除了下面第2种情况)。

形式2:零压缩形式

由于某些IPv6地址分配方法,地址中包含长串零位的情况很常见。为了使包含零位的地址更容易书写,可以使用特殊语法来压缩零。使用 :: 表示一个或多个16位零组。:: 在一个地址中只能出现一次。:: 也可以用于压缩地址中的前导零或尾随零。

示例:

以下地址:

2001:DB8:0:0:8:800:200C:417A   单播地址
FF01:0:0:0:0:0:0:101 组播地址
0:0:0:0:0:0:0:1 环回地址
0:0:0:0:0:0:0:0 未指定地址

可以表示为:

2001:DB8::8:800:200C:417A      单播地址
FF01::101 组播地址
::1 环回地址
:: 未指定地址

形式3:混合IPv4-IPv6表示

在处理IPv4和IPv6节点的混合环境时,有时更方便的替代形式是 x:x:x:x:x:x:d.d.d.d,其中'x'是地址的六个高阶16位部分的十六进制值,'d'是地址的四个低阶8位部分的十进制值(标准IPv4表示)。

示例:

0:0:0:0:0:0:13.1.68.3

0:0:0:0:0:FFFF:129.144.52.38

或压缩形式:

::13.1.68.3

::FFFF:129.144.52.38

2.3. Text Representation of Address Prefixes (地址前缀的文本表示)

IPv6地址前缀的文本表示类似于无类别域间路由 (CIDR, Classless Inter-Domain Routing) [CIDR] 中IPv4地址前缀的书写方式。IPv6地址前缀由以下表示法表示:

ipv6-address/prefix-length

其中:

  • ipv6-address: 是第2.2节中列出的任何表示法中的IPv6地址。
  • prefix-length: 是一个十进制值,指定地址的最左侧连续位中有多少位组成前缀。

示例:

以下是60位前缀 20010DB80000CD3(十六进制)的合法表示:

2001:0DB8:0000:CD30:0000:0000:0000:0000/60
2001:0DB8::CD30:0:0:0:0/60
2001:0DB8:0:CD30::/60

以下不是上述前缀的合法表示:

2001:0DB8:0:CD3/60    可以删除前导零,但不能删除地址任何16位块内的尾随零

2001:0DB8::CD30/60 "/"左侧的地址扩展为
2001:0DB8:0000:0000:0000:0000:0000:CD30

2001:0DB8::CD3/60 "/"左侧的地址扩展为
2001:0DB8:0000:0000:0000:0000:0000:0CD3

当同时写入节点地址和该节点地址的前缀(例如,节点的子网前缀)时,两者可以组合如下:

节点地址:      2001:0DB8:0:CD30:123:4567:89AB:CDEF
其子网编号: 2001:0DB8:0:CD30::/60

可以缩写为: 2001:0DB8:0:CD30:123:4567:89AB:CDEF/60

2.4. Address Type Identification (地址类型识别)

IPv6地址的类型由地址的高阶位标识,如下所示:

地址类型二进制前缀IPv6表示法章节
Unspecified (未指定)00...0 (128位)::/1282.5.2
Loopback (环回)00...1 (128位)::1/1282.5.3
Multicast (组播)11111111FF00::/82.7
Link-Local unicast (链路本地单播)1111111010FE80::/102.5.6
Global Unicast (全局单播)(其他所有)-2.5.4

任播地址取自单播地址空间(任何范围),并且在语法上与单播地址无法区分。

全局单播地址的一般格式在第2.5.4节中描述。包含嵌入式IPv4地址的全局单播地址的一些特殊用途子类型(用于IPv4-IPv6互操作)在第2.5.5节中描述。

未来的规范可能会为其他目的重新定义全局单播空间的一个或多个子范围,但除非并且直到发生这种情况,否则实现必须将所有不以上述任何前缀开头的地址视为全局单播地址。


2.5. Unicast Addresses (单播地址)

IPv6单播地址可以使用任意位长度的前缀进行聚合,类似于无类别域间路由下的IPv4地址。

IPv6中有几种类型的单播地址,特别是全局单播、站点本地单播和链路本地单播。还有一些特殊用途的子类型全局单播地址,例如包含嵌入式IPv4地址的IPv6地址。其他类型的单播地址可能会在未来定义。

除非另有说明,否则本文档中定义的单播地址格式适用于全局单播和其他类型的单播地址。


2.5.1. Interface Identifiers (接口标识符)

接口标识符用于标识链路上的接口。它们在每个链路上必须是唯一的。对于所有单播地址,除了以二进制值000开头的地址外,接口ID的长度都是64位,并且是根据修改的EUI-64格式构造的[EUI64]。

接口标识符可以通过多种机制构建,包括:

  1. 从EUI-64标识符派生 - 详见附录A
  2. 从IEEE 802 MAC地址派生 - 详见附录A
  3. 手动配置
  4. 自动生成 - 例如使用伪随机数生成器
  5. 通过其他方法分配 - 例如通过DHCPv6

接口标识符的构造方式应确保在同一链路上具有高度的唯一性。在可能的情况下,应使用基于全球唯一的IEEE标识符的接口标识符。

对于所有单播地址(除了以二进制000开头的地址),接口ID必须是64位长,并且可以根据修改的EUI-64格式从链路层地址构造。有关如何从IEEE EUI-64标识符或IEEE 802 MAC地址创建修改的EUI-64格式接口标识符的详细信息,请参见附录A。

接口标识符的通用性 (Universal/Local Bit):

修改的EUI-64格式中的第7位是通用/本地 (Universal/Local, U/L) 位。当设置为1时,表示接口标识符是全球唯一的。当设置为0时,表示接口标识符是本地管理的。

组/个体位 (Group/Individual Bit):

修改的EUI-64格式中的第8位是组/个体 (Group/Individual, G/I) 位。对于单播地址,此位必须设置为0。


2.5.2. The Unspecified Address (未指定地址)

地址 0:0:0:0:0:0:0:0 称为未指定地址。它不能分配给任何节点。它表示没有地址。未指定地址的一个示例用途是在IPv6数据包的源地址字段中,该数据包由正在初始化的主机发送,该主机在发送数据包之前尚未学习到其自己的地址。

未指定地址不能用作IPv6数据包的目的地址或IPv6路由头。


2.5.3. The Loopback Address (环回地址)

单播地址 0:0:0:0:0:0:0:1 称为环回地址。节点可以使用它向自己发送IPv6数据包。它不能分配给任何物理接口。它类似于IPv4中的环回地址 (127.0.0.1)。

环回地址不能用作IPv6数据包的源地址,该数据包被发送到接口外部。具有目的地址为环回地址的IPv6数据包不能在链路外部发送,也不能被IPv6路由器转发。


2.5.4. Global Unicast Addresses (全局单播地址)

全局单播地址的格式定义如下:

| n位 |   m位   |  128-n-m位  |
+-----+---------+-------------+
|全局路由|子网ID | 接口ID |
| 前缀 | | |
+-----+---------+-------------+

其中全局路由前缀是一个(层次化)值,分配给站点(一组子网/链路),子网ID是该站点内子网的标识符,接口ID如第2.5.1节所定义。

除了以二进制值000开头的地址外,所有全局单播地址都有64位接口ID字段(即,在全局路由前缀中,n + m必须等于64)。

全局路由前缀的结构和分配超出了本文档的范围。

示例:

2001:0DB8:1234:5678:9ABC:DEF0:1234:5678

其中:

  • 全局路由前缀: 2001:0DB8:1234::/48
  • 子网ID: 5678
  • 接口ID: 9ABC:DEF0:1234:5678

2.5.5. IPv6 Addresses with Embedded IPv4 Addresses (嵌入IPv4地址的IPv6地址)

IPv6过渡机制包括一些在IPv6地址中嵌入IPv4地址的技术。这些地址有两种类型:IPv4兼容的IPv6地址和IPv4映射的IPv6地址。

2.5.5.1. IPv4-Compatible IPv6 Address (IPv4兼容的IPv6地址)

注意: IPv4兼容的IPv6地址类型已被废弃。

IPv4兼容的IPv6地址的格式如下:

|        80位         | 16位 |     32位      |
+--------------------+------+---------------+
| 0000......0000 | 0000 | IPv4地址 |
+--------------------+------+---------------+

表示为: ::d.d.d.d(其中d.d.d.d是IPv4地址的十进制表示)

示例: ::192.0.2.1

2.5.5.2. IPv4-Mapped IPv6 Address (IPv4映射的IPv6地址)

IPv4映射的IPv6地址的格式如下:

|        80位         | 16位 |     32位      |
+--------------------+------+---------------+
| 0000......0000 | FFFF | IPv4地址 |
+--------------------+------+---------------+

表示为: ::FFFF:d.d.d.d(其中d.d.d.d是IPv4地址的十进制表示)

示例: ::FFFF:192.0.2.1

这些地址用于表示仅支持IPv4的节点作为IPv6地址。它们仅在IPv6节点内部使用,用于表示IPv4节点的地址。IPv4映射的IPv6地址永远不会用作IPv6数据包的源或目的地址。


链路本地地址用于单个链路上的地址自动配置、邻居发现或没有路由器时的通信。

链路本地地址的格式如下:

|   10位   |    54位    |        64位         |
+----------+------------+---------------------+
|1111111010| 0 | 接口ID |
+----------+------------+---------------------+

前缀: FE80::/10

链路本地地址设计用于在单个链路上寻址,用于自动地址配置、邻居发现或没有路由器时的通信。路由器不能转发具有链路本地源或目的地址的数据包到其他链路。


2.5.7. Site-Local IPv6 Unicast Addresses (站点本地IPv6单播地址)

注意: 站点本地地址已被废弃,不应在新的实现或部署中使用。请参见[RFC3879]。

站点本地地址的格式如下:

|   10位   |    54位    |        64位         |
+----------+------------+---------------------+
|1111111011| 子网ID | 接口ID |
+----------+------------+---------------------+

前缀: FEC0::/10

站点本地地址设计用于在站点内部寻址,而无需全局前缀。但是,由于站点边界的定义不明确和其他问题,站点本地地址已被废弃,并被唯一本地地址 (Unique Local Addresses, ULA) [RFC4193] 取代。