IPv6 子网中的第一个地址是否可分配?

网络工程 ip 子网 ipv6 协议理论 IP地址
2021-07-06 16:23:40

我在实验室工作,并在路由器之间配置了一系列 /125 子网。让我们忽略讨论使用 /64 的最佳实践。

当我将 fd00:f9a8:ffff::257 分配给一个接口时,配置没有问题,但是当我分配 fd00:f9a8:ffff::254 时,操作系统报告 DAD 失败并且没有永久分配接口。

我已经看到许多消息来源表明全零地址 fd00:f9a8:feed:beef::/64 与主机地址一样有效,如 fd00:f9a8:feed:beef::1/64。这是否不准确?如果是这样,什么会导致 DAD 使用此 /125 子网中的第一个地址失败?

2个回答

网络中的第一个 IPv6 地址是可分配的,但它是路由器任播地址,是几个必需的任播地址之一。(任播地址是分配给多个主机的单播地址。)这是由RFC 4291,IP 版本 6 寻址架构定义的

2.6.1 . 所需任播地址

子网路由器任播地址是预定义的。其格式如下:

|                         n bits                 |   128-n bits   |
+------------------------------------------------+----------------+
|                   subnet prefix                | 00000000000000 |
+------------------------------------------------+----------------+

任播地址中的“子网前缀”是标识特定链接的前缀。该任播地址在语法上与接口标识符设置为零的链路上的接口的单播地址相同。

发送到子网路由器任播地址的数据包将被传送到子网上的一台路由器。所有路由器都需要支持它们具有接口的子网的子网路由器任播地址。

子网路由器任播地址旨在用于节点需要与一组路由器中的任何一个进行通信的应用程序。

某些设备,例如 Cisco 路由器,需要对路由器任播地址进行特殊处理。Cisco 要求在anycast地址上放置关键字,但您还需要为接口分配另一个地址,因为任播地址在路由器之间共享。


还有一些保留的子网任播地址:

它们不得用于分配给任何接口的单播地址。

请参阅RFC 2526,保留的 IPv6 子网任播地址

2 . 保留子网任播地址的格式

在每个子网中,最高的 128 个接口标识符值被保留用于分配为子网任播地址。

保留子网任播地址的构造取决于子网中使用的 IPv6 地址的类型,如地址中的格式前缀所示。特别是,对于要求具有 EUI-64 格式的 64 位接口标识符的 IPv6 地址类型,必须在所有保留的子网任播地址中将通用/本地位设置为 0(本地),以指示地址中的接口标识符不是全球唯一的。这种类型的 IPv6 地址目前被指定为格式前缀为 001 到 111 的地址,组播地址 (1111 1111) [3] 除外。

具体来说,对于需要具有 EUI-64 格式的 64 位接口标识符的 IPv6 地址类型,这些保留的子网任播地址构造如下:

|              64 bits            |      57 bits     |   7 bits   |
+---------------------------------+------------------+------------+
|           subnet prefix         | 1111110111...111 | anycast ID |
+---------------------------------+------------------+------------+
                                  |   interface identifier field  |

对于其他 IPv6 地址类型(即具有上述以外的格式前缀),接口标识符不是 EUI-64 格式,并且长度可能不是 64 位;这些地址类型的这些保留子网任播地址的构造如下:

|              n bits             |    121-n bits    |   7 bits   |
+---------------------------------+------------------+------------+
|           subnet prefix         | 1111111...111111 | anycast ID |
+---------------------------------+------------------+------------+
                                  |   interface identifier field  |

这里的子网前缀由 IPv6 地址的所有字段组成,除了接口标识符字段。这些保留子网任播地址中的接口标识符字段由一个 7 位的任播标识符(“任播 ID”)组成,其余(最高位)位全为 1;然而,对于 EUI-64 格式的接口标识符,接口标识符中的通用/本地位必须设置为 0。任播标识符从保留的子网任播地址集中标识子网前缀内的特定保留任播地址。

保留每个子网的最高地址而不是最低地址的动机是为了避免与子网中低编号地址的某些现有官方和非官方使用发生冲突。例如,这些低编号地址通常用于点对点链路的末端、隧道端点、当硬件令牌不可用于网络接口时手动配置的单播地址,甚至用于手动配置的静态链路上路由器的地址。只为任播标识符保留 128 个值(而不是 256 个)意味着 IPv6 地址中接口标识符的最小可能大小为 8 位(包括子网中用于单播地址的空间以及保留的子网任播地址),

与所有 IPv6 任播地址 [3] 一样,这些保留的子网任播地址是从 IPv6 单播地址空间分配的。本文档中定义的所有保留子网任播地址都保留在所有链路上,带有所有子网前缀。它们不得用于分配给任何接口的单播地址。

3 . 保留子网任播地址列表

目前,为这些保留的子网任播地址定义了以下任播标识符:

 Decimal   Hexadecimal     Description
 -------   -----------     -----------
  127         7F           Reserved
  126         7E           Mobile IPv6 Home-Agents anycast [4]
  0-125       00-7D        Reserved

预计将来会定义其他任播标识符。


上述路由器和保留子网任播地址有几个例外。一种是/128在接口上使用地址,例如环回接口。另一个例外是/127RFC 6164,在路由器间链接上使用 127 位 IPv6 前缀中允许的点对点链接网络使用

在路由器间点对点链路上,出于安全和其他原因,使用 127 位 IPv6 前缀很有用。这种做法类似于在 IPv4 中使用 31 位前缀。本文档详细说明了路由器间点对点链路上 127 位 IPv6 前缀长度的动机和用途。

IPv6 没有广播或网络地址的概念——多播用于这些服务。每个地址都和其他地址一样有效。

DAD 失败通常意味着其他东西正在声明该地址。检查您的系统日志以了解其失败的原因。