IPv4 与 IPv6:双栈时代的新故障形态
IPv6 的普及没有替代 IPv4,而是造出了一个双栈并存的世界:多数设备同时持有两种地址,多数域名同时发布 A 和 AAAA 记录。双栈带来了冗余,也带来了一类全新的故障——两条栈一条好一条坏时,系统选错了那条。
系统怎么选栈
域名同时有 A 和 AAAA 记录时,主流系统的默认策略是优先 IPv6。选错的代价由回退机制兜底:现代实现普遍采用 Happy Eyeballs(快乐眼球)算法——先试 IPv6,短暂延迟(几十到几百毫秒)后并行试 IPv4,谁先成功用谁。这套机制工作良好时,用户对单栈故障几乎无感。
问题出在回退不总是存在:老旧应用、部分命令行工具、某些嵌入式实现会死磕首选地址直到完整超时(可能是几十秒)甚至不回退。于是同一个"IPv6 出口不通"的环境里,浏览器一切正常(回退救了它),某个应用却持续超时——双栈时代特有的"精神分裂"现象。
"有地址"与"能用"的鸿沟
IPv6 故障的诊断陷阱在于纸面证据的迷惑性:设备拿到了 IPv6 地址、域名解析出了 AAAA 记录,一切文书齐全,但数据包沿 IPv6 出门就没了下文。可能的断点:设备只有链路本地地址(fe80:: 开头)没有全局地址、本机缺 IPv6 默认路由、路由器前缀委派配置不完整、运营商 IPv6 链路质量差。
诊断方法是对照检测,让两条栈各自用事实说话:
connproof tcp 目标域名 --port 443 --ipv4connproof tcp 目标域名 --port 443 --ipv6一条成功一条失败,结论立现。完整的病灶定位流程见 IPv6 resolved but unreachable。
双栈相关的典型故障
- IPv6 半残拖慢一切:回退机制存在但每次连接都要先等 IPv6 失败,表现为"能用但第一下总是慢";
- 仅 IPv6 目标不可达:目标只发布 AAAA(少见但存在),IPv4-only 网络彻底无法访问;
- 防火墙规则只写了一半:管理员配好了 IPv4 规则,IPv6 流量走了默认策略——或被全放行(安全隐患)或被全拦截(莫名故障);
- 代理分流按 IPv4 写规则:目标解析成 IPv6 后绕过了按 IPv4 地址段写的规则。
务实的处理原则
IPv6 出口确认不可用而短期无法修复时,临时优先 IPv4 是保住可用性的合理手段(系统级前缀策略或应用内设置)。但把它当作过渡而不是终点:IPv6 是方向,长期禁用等于把问题留给未来。修复的正路在路由器配置与运营商侧——"AAAA 正常 + v6 建连超时 + v4 同目标正常"三条证据是向运营商报障的标准弹药。