首页/网络/抓包与流量分析速查/双栈优选与 Happy Eyeballs 观察
应用层报文判读71 条

双栈优选与 Happy Eyeballs 观察

A 与 AAAA 都查、连接先试一方超时再试另一方的策略:抓包可见"两个记录的查询 + 两段连接尝试(一快一慢)"的组合形态。

双栈优选是怎么工作的

当一个域名同时有 IPv4 与 IPv6 地址时,客户端两个类型都会查询,连接阶段则采用竞速式策略:先尝试某一族地址,若在很短的窗口内没有连上,立刻并发或切换到另一族,这就是常说的双栈优选。抓包中它呈现为一组组合形态——两个类型的查询成对出现,连接尝试可能分成先后两段,其中一段迅速失败、另一段成功。回落窗口通常很短,往往只在时间线上可见。

基本信息

适用平台Wireshark / tshark,客户端侧抓包最直观
查询类型dns.qry.type == 1(IPv4)与 dns.qry.type == 28(IPv6)
观察点查询成对出现、连接尝试的先后与间隔
典型表现首包延迟变大,最终连接成功

典型使用场景

  • 双栈环境下首次访问偏慢,量化回落等待的时间成本
  • 确认某一族地址不可达时的回落行为是否正常
  • 为是否保留 IPv6 记录提供实测依据
  • 排查「换了网络环境就慢」这类与地址族相关的现象
  • 对比不同客户端实现的竞速策略差异
  • 为应用日志中只记录最终结果的情况补充网络侧事实

观察要点

观察要点
dns.qry.type == 1 || dns.qry.type == 28      # 只看两类地址查询
# 连接阶段: 先试一族无果 → 快速回落另一族并成功
tcp.flags.syn == 1                            # 连接尝试的起手报文
# 统计两族地址的连接成功与失败次数,别只统计最终成功的那一条
# 回落窗口很短,只有时间线能体现,应用日志常看不到

观察项逐项读法

观察项含义判读方向
两类查询成对客户端按双栈策略解析缺少一类说明策略被限定为单栈
首次连接单族优先尝试的地址族该族不可达时等待窗口决定延迟
快速回落另一族竞速策略生效回落窗口越短对用户影响越小
最终连接成功业务可用但首包延迟可能已明显增加
只按最终连接地址统计会低估优先尝试那一族的失败频次,评估地址族可用性要按尝试次数统计。
某一族不可达但未及时返回错误时,首包延迟会明显变长,这种等待只有在抓包时间线上才看得清楚。

易错点

  • 只统计最终成功的连接:优先尝试的失败被完全掩盖,地址族可用性评估失真
  • 把回落等待当成网络抖动:它是客户端竞速策略的固定代价,与丢包无关
  • 忽略记录类型差异:只查一类地址会把双栈行为误读为单栈解析
  • 在服务端侧抓包观察回落:回落发生在客户端侧,服务端看不到这段行为

数据来源与参考

  • RFC 8305(Happy Eyeballs v2)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌