通常情况下,链路本地地址的接口ID是由MAC地址来生成的,标准叫做EUI-64。(RFC 2373)
生成的64bit接口ID,叫做接口标识符。
SLAAC(无状态分配)所产生的地址,其接口ID也会使用接口标识符。与链路本地地址的接口ID一样。
而这只是在Windows Vista和Windows 2008之前的情况下。
为了安全,Windows开始使用了随机化接口ID和临时地址。(RFC 3041)
由于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地址。这是因为旧的临时地址过期的时候,旧地址还有建立的连接。
使用 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
源于一个较新的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等系统较新版本可能会支持。