客户端在解析域名时,IPv6和 IPv4的解析策略主要受操作系统、DNS 解析和网络环境影响,通常遵循Happy Eyeballs(RFC 8305)及系统默认优先级规则。
1. 操作系统解析策略
大多数现代操作系统采用 “Happy Eyeballs”(RFC 8305)算法来决定使用 IPv6 还是 IPv4.这一策略的核心逻辑如下:
* 优先使用 IPv6(如果可用)。
* 如果 IPv6 连接失败或慢于 IPv4.则迅速回退到 IPv4.以提高用户体验。
* 并行解析:同时解析 IPv6(AAAA 记录)和 IPv4(A 记录)。
* 短超时(通常 300ms 内):如果 IPv6 连接未能在短时间内建立,立即尝试 IPv4
不同系统默认行为:
操作系统 | 解析策略 |
Windows 10 + | 优先 IPv6,使用 Happy Eyeballs |
Linux(Ubuntu、CentOS) | 默认 IPv6 优先,可调整 /etc/gai.conf |
macOS / iOS | 采用 Happy Eyeballs,IPv6 优先 |
Android | IPv6 优先,但依赖运营商配置 |
2. DNS 解析逻辑
当客户端请求解析域名时,DNS 服务器会返回以下记录:
- AAAA 记录(IPv6 地址)
- A 记录(IPv4 地址)
客户端解析步骤:
- 查询 AAAA 记录(IPv6)。
- 查询 A 记录(IPv4)。
依据操作系统策略(如 Happy Eyeballs)选择最快的连接,Happy Eyeballs 机制用于加快 IPv6/IPv4 选择过程:
并行解析,同时请求 AAAA 和 A 记录。
短超时(默认 300ms 内),若 IPv6 连接建立过慢,迅速切换到 IPv4,(防止 IPv6 解析失败导致访问缓慢)
首选 IPv6 但不影响用户体验。
3. 网络层解析影响
ISP 影响:某些 ISP 可能不支持 IPv6,导致 AAAA 解析失败。
NAT64 / DNS64(IPv6-only 网络):IPv6 设备访问 IPv4 服务器时,DNS64 服务器返回伪造的 AAAA 记录,并通过 NAT64 转换 IPv6 → IPv4.
IPv6 站点优先:如果网站有 IPv6 地址,且客户端支持 IPv6.通常会优先使用 IPv6.
双栈(IPv6 + IPv4):使用 Happy Eyeballs 选择最快的连接。
解析策略总结:
双栈环境:客户端同时发起IPv6和IPv4连接,优先使用响应更快的协议(Happy Eyeballs,IPv6 优先)
IPv6-only:依赖 NAT64/DNS64 访问 IPv4 站点
IPv4-only:仅解析 A 记录,无法访问 IPv6 站点
优化DNS解析:适配网络环境,确保解析策略不会导致连接超时或失败,避免 IPv6 超时影响访问速度
强制 IPv4/IPv6:可通过 curl、DNS 配置或 hosts 进行调整。