为什么 IPv6 链路本地地址不是 /9?

网络工程 ipv6 IP地址 ip-link-local
2021-07-24 23:19:47

根据这个答案,这是因为计算机以二进制读取地址。

美好的。这就解释了为什么 fe80 地址不需要是 /12 或 /16——因为第 10 位之后的所有内容都是零。

fe80::/16 = 1111 1110 1000 0000

fe80::/12 = 1111 1110 1000

fe80::/10 = 1111 1110 10

但如果是这样的话,那么为什么不进一步去除最后一个零并得到:

fe80::/9  = 1111 1110 1

编辑:更正了 IPv6 地址的格式,从 fe80/16 到 fe80::/16。

2个回答

它可以追溯到最初的 IPv6 寻址 RFC。第 10 位用于区分本地链路寻址和(现已过时的)站点本地寻址。如果该位是0,则它是一个本地链路地址,如果该位是1,则它是一个站点本地地址。站点本地地址已被弃用,取而代之的是唯一本地地址,以避免公司合并或尝试创建具有重叠寻址的外联网的问题。

RFC 1884,IP 版本 6 寻址架构是最初的 RFC,其中定义了站点本地寻址并通过两个后续 RFC( RFC 2373RFC 3513)进行:

2.4.8 本地使用的 IPv6 单播地址

定义了两种类型的本地使用单播地址。它们是本地链接和站点本地。Link-Local 用于单个链接,Site-Local 用于单个站点。链路本地地址具有以下格式:

|   10     |
|  bits    |        n bits           |       118-n bits           |
+----------+-------------------------+----------------------------+
|1111111010|           0             |       interface ID         |
+----------+-------------------------+----------------------------+

链路本地地址旨在用于在单个链路上寻址,以实现自动地址配置、邻居发现或不存在路由器的情况。

路由器不得转发任何带有本地链路源地址的数据包。

站点本地地址具有以下格式:

|   10     |
|  bits    | n bits  |    m bits     |       118-n-m bits         |
+----------+---------+---------------+----------------------------+
|1111111011|    0    |   subnet ID   |       interface ID         |
+----------+---------+---------------+----------------------------+

站点本地地址可用于(尚未)连接到全球 Internet 的站点或组织。他们不需要从全球 Internet 地址空间请求或“窃取”地址前缀。可以改用 IPv6 站点本地地址。当组织连接到全球 Internet 时,它可以通过用订户前缀替换站点本地前缀来形成全局地址。

路由器不得将任何具有站点本地源地址的数据包转发到站点之外。

最新版本是RFC 4291,IP 版本 6 寻址架构,它废弃了以前的 RFC,并弃用了站点本地寻址:

2.5.6. 链路本地 IPv6 单播地址

链路本地地址用于单个链路。链路本地地址具有以下格式:

|   10     |
|  bits    |         54 bits         |          64 bits           |
+----------+-------------------------+----------------------------+
|1111111010|           0             |       interface ID         |
+----------+-------------------------+----------------------------+

链路本地地址旨在用于在单个链路上寻址,以实现自动地址配置、邻居发现或不存在路由器的情况。

路由器不得将任何带有本地链路源地址或目标地址的数据包转发到其他链路。

2.5.7. 站点本地 IPv6 单播地址

站点本地地址最初设计用于在站点内部寻址,而无需全局前缀。现在不推荐使用 [ SLDEP ] 中定义的站点本地地址

站点本地地址具有以下格式:

|   10     |
|  bits    |         54 bits         |         64 bits            |
+----------+-------------------------+----------------------------+
|1111111011|        subnet ID        |       interface ID         |
+----------+-------------------------+----------------------------+

在[ RFC3513 ]中定义的这个前缀的特殊行为在新的实现中必须不再被支持(即,新的实现必须把这个前缀当作全局单播)。

现有的实现和部署可能会继续使用这个前缀。

简单回答:

因为链接本地地址不是唯一以 开头的地址111111101

不再使用的“站点本地”地址(`fec0::/10 )也以此序列开头。

因此,该范围fe80::/9涵盖链接本地地址和站点本地地址。