从我在线阅读的内容来看,通过获取网络接口的 MAC 地址,在其中插入一个 FF:FE 字,或者在一些额外的位中进行 OR'ing 来生成 IPv6 链接本地地址,等等:例如 MAC 地址 00: 3E:E1:c6:20:c2 对应于 IPv6 链路本地地址 fe80::23e:e1ff:fec6:20c2%en0,知道 MAC 地址的程序可以计算 IPv6 地址,反之亦然。
这似乎在我的 Macintosh 上运行良好,但在我同事的 Windows 机器上,我们看到了这个(来自 ipconfig 的输出):
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::eb:b41:3e4c:fd9e%11
IPv4 Address. . . . . . . . . . . : 192.168.0.3
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
在这里,网络接口的 MAC 地址(即 0b:41:3e:4c:fd:9e )看起来只有字节“eb”OR'd 到它的前面,而不是插入 ff:fe 到正如我所期望的那样。
谁能解释这是为什么?即,Windows 是否在做一些与此处的 IPv6 链接本地地址规范相反的事情,或者它只是使用了一些我不知道的其他可接受的 MAC-> IPv6 约定?或者,当从 MAC 地址生成 fe80 地址时,供应商可能只是被允许做任何他们想做的事情?
并不是说需要从 MAC 地址生成链路本地地址;它从来都不是一个要求。您可以在许多设备上手动分配链路本地地址。
您在 Windows 中看到的是隐私扩展和随机寻址的使用。与分配 SLAAC 接口 ID 的原始方式不同,引入了隐私扩展和随机地址生成。这是 Windows 的默认设置,但可以禁用。
请参阅RFC 4862,IPv6 无状态地址自动配置和RFC 4941,IPv6 中无状态地址自动配置的隐私扩展。