通常情况下,链路本地地址的接口 ID 是由 MAC 地址来生成的,标准叫做 EUI-64 。( RFC 2373 )
生成的 64bit 接口 ID,叫做接口标识符。
SLAAC (无状态分配)所产生的地址,其接口 ID 也会使用接口标识符。与链路本地地址的接口 ID 一样。
而这只是在 Windows Vista 和 Windows 2008 之前的情况下。
为了安全,Windows 开始使用了随机化接口 ID 和临时地址。( RFC 3041 )
随机标识符 /接口 ID
由于 EUI-64 生成的接口标识符,是由 MAC 地址生成。所以很容易根据 IPv6 地址来推断出设备的 MAC 地址。
EUI-64 是将 48bit 的 MAC 地址,其第七位取反,然后中间填充 FFFE 组成 64bit 的接口 ID 。
所以 Windows 会随机生成 64bit 的接口标识符。看下面的输出,链路本地地址明显是和 MAC 地址无关的。
此地址是固定,一般生成之后,不会改变。
C:\Users\admin> ipconfig /all
描述. . . . . . . . . . . . . . . : Intel(R) Wi-Fi 6 AX200 160MHz
物理地址. . . . . . . . . . . . . : 46-68-5C-AA-41-11
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::1e2:5910:14f3:a9d5%13(首选)
临时地址
由于 SLAAC 产生的地址的接口 ID ,是接口标识符的,所以后 64bit 是基本不变的,这样很容易被跟踪。
所以需要临时地址。
临时地址也是一样随机生成 64bit 接口 ID ,用于主机作为源 IP 主动访问网站和应用。但为了安全,会经常变化。
如在接口重新连接的时候,或者临时 IPv6 生存期到期的时候。会重新随机生成另一个临时 IPv6 地址。
在某种情况下,你会看到多个临时 IPv6 地址。这是因为旧的临时地址过期的时候,旧地址还有建立的连接。
查看 IPv6 协议配置
使用 Powershell 命令 get-netipv6protocol
DefaultHopLimit : 128
NeighborCacheLimit(Entries) : 256
RouteCacheLimit(Entries) : 4096
ReassemblyLimit(Bytes) : 262676960
IcmpRedirects : Enabled
SourceRoutingBehavior : DontForward
DhcpMediaSense : Enabled
MediaSenseEventLog : Disabled
MldLevel : All
MldVersion : Version2
MulticastForwarding : Disabled
GroupForwardedFragments : Disabled
RandomizeIdentifiers : Enabled //随机接口 ID 开启
AddressMaskReply : Disabled
UseTemporaryAddresses : Enabled //临时 IPv6 地址开启
MaxTemporaryDadAttempts : 3 //临时 IPv6 的重复地址检测尝试次数
MaxTemporaryValidLifetime : 7.00:00:00 //临时地址最大有效时间。
MaxTemporaryPreferredLifetime : 7.00:00:00
TemporaryRegenerateTime : 00:00:05
MaxTemporaryDesyncTime : 00:10:00
DeadGatewayDetection : Enabled
SLAAC 的 DNS 服务器地址分配--RDNSS
源于一个较新的 IPv6 标准(RFC 8106)。从 Windows 10 1703 开始,Windows 支持使用无状态获取 DNS 服务器了。
不过,DHCPv6 获取的 DNS 服务器优于通过 RA 报文获取的 DNS 服务器。
Android 从 4.2 开始支持,iOS 从 4.1 开始支持,MacOS 从 10.7 开始支持。
PS:Android 至今都不支持 DHCPv6 ,可能是为了安全考虑。
来源: https://en.wikipedia.org/wiki/Comparison_of_IPv6_support_in_operating_systems
参考
https://datatracker.ietf.org/doc/html/rfc8106
https://www.networkacademy.io/ccna/ipv6/ipv6-on-windows
https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-netipv6protocol?view=windowsserver2022-ps
PS:随机标识符和临时地址,其他系统也会使用,如 MacOS 从 10.7 也开始使用了,Android iOS Linux 等系统较新版本可能会支持。
个人博客
https://songxwn.com/ipv6-Windows/