通常情况下,链路本地地址的接口 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 等系统较新版本可能会支持。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.