SLAAC:这个生成的 IPv6 地址有什么问题?

网络工程 IPv6
2022-03-02 15:34:31

考虑这个MAC a4:ba:db:fe:b24b:。

SLAAC ”方法允许我们从这个 MAC 生成 IPv6:

  1. 首先我们放入fffe第四个和第五个字节

  2. 然后,我们反转第一个字节的第 7 位。

因此,SLAAC 生成的 IPv6 地址应按如下所述生成:

  1. fffea4:b1:db:feff:feb2:4B

  2. 反转第 7 位:a6:b1:db:feff:feb2:4B

最后,IPv6 地址应该是 : a6:b1:db:feff:feb2:4B

但是,我的老师发现了这个 IPv6 a6ba:dbff:fefe:b24b:。

为什么?

2个回答

看来您将字节与单词混淆了。在 IPv4(通常是 MAC)地址中,每个分隔的部分是一个字节,但在 IPv6 中,每个部分是两个字节(16 位字)。你似乎一直在思考 IPv4。您原来的是将字节放入单独的单词中,但您需要将两个字节组合成一个单词。例如, the会以两个单独的单词结尾,因为它的两边各有三个字节,所以在 the和.fffe之间会有一个冒号您应该以四个字(64 位)结束,用冒号分隔,但您正在尝试创建六个字(96 位)。fffe

RFC 4291,IP 版本 6 寻址架构,附录 A,创建修改的 EUI-64 格式接口标识符详细说明了原始过程:

具有 IEEE 802 48 位 MAC 的链路或节点

[EUI64] 定义了一种从 IEEE 48 位 MAC 标识符创建 IEEE EUI-64 标识符的方法。这是在 48 位 MAC 中间(company_id 和供应商提供的 id 之间)插入两个八位字节,十六进制值为 0xFF 和 0xFE(参见附录末尾的注释)。一个示例是具有全局范围的 48 位 IEEE MAC:

|0              1|1              3|3              4|
|0              5|6              1|2              7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+

其中“c”是分配的 company_id 的位,“0”是表示全局范围的通用/本地位的值,“g”是单个/组位,“m”是制造商选择的位扩展标识符。接口标识符将采用以下形式:

|0              1|1              3|3              4|4              6|
|0              5|6              1|2              7|8              3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

当 IEEE 802 48 位 MAC 地址可用(在接口或节点上)时,由于它们的可用性和唯一性属性,实现可以使用它们来创建接口标识符。

基本上,您将 48 位 MAC 地址分成两半,插入fffe中间,然后翻转 U/L 位。这会导致来自 48 位 MAC 地址的 64 位接口标识符。当您将生成的 64 位 IID 拆分为用冒号分隔的 4 个 16 位字时,您就得到了教师所拥有的。

从您的 MAC 地址开始a4:ba:db:fe:b24b

  • 您的 MAC 地址中有六个字节:a4badbfeb24b
  • 将它们分成两组三个字节:a4badbfeb24b
  • 在中间插入fffe,你最终得到八个字节: a4badbfffefeb24b
  • 用冒号分隔 16 位字:a4ba:dbff:fefe:b24b
  • 翻转 U/L 位:a6ba:dbff:fefe:b24b

这意味着您的 64 位 IPv6 IID 是a6ba:dbff:fefe:b24b,这就是您的讲师所拥有的。


许多人对 IPv6 地址生成的原始 SLAAC 方法感到担忧。主要担心的是,无论用户连接到公共 Internet 的位置如何,都可以通过 MAC 地址跟踪用户。

有后续的 RFC 来解决这个明显的弱点,并允许隐私扩展和随机地址生成。例如,RFC 4941,IPv6 中无状态地址自动配置的隐私扩展

抽象的

节点使用 IPv6 无状态地址自动配置,结合本地可用信息和路由器通告的信息生成地址。地址是通过将网络前缀与接口标识符组合而成的。在包含嵌入式 IEEE 标识符的接口上,接口标识符通常是从中派生的。在其他接口类型上,接口标识是通过其他方式生成的,例如随机数生成。本文档描述了对接口标识符从 IEEE 标识符派生的接口的 IPv6 无状态地址自动配置的扩展。使用扩展会导致节点从随时间变化的接口标识符生成全局范围地址,即使在接口包含嵌入式 IEEE 标识符的情况下也是如此。

许多操作系统已采用隐私扩展和随机寻址作为默认行为。现在很难找到由原始 SLAAC 方法生成地址的设备。

A link-local address is formed by combining the well-known link-local
prefix FE80::0 [RFC4291] (of appropriate length) with an interface
identifier as follows:

1.  The left-most 'prefix length' bits of the address are those of
    the link-local prefix.

2.  The bits in the address to the right of the link-local prefix are
    set to all zeroes.

3.  If the length of the interface identifier is N bits, the right-
    most N bits of the address are replaced by the interface
    identifier.

https://www.rfc-editor.org/rfc/rfc4862#section-5.3

将此算法应用于您的地址给出:

fe80::a4ba:dbfe:b24b

我不知道你老师使用的算法来自哪里。

它似乎也不是这种算法: https ://www.rfc-editor.org/rfc/rfc7217#section-5