观察 DNS 响应耗时
dns.time 是 Wireshark 把 DNS 查询与响应配对之后算出的耗时,用来直接统计「这一次解析花了多久」。筛出超过阈值的查询,通常能立刻指向两种原因:本地递归解析器链路慢,或者权威服务器响应慢。它只对配对成功的查询取值,超时无响应的查询不会出现在这个字段里。
基本信息
| 适用平台 | Wireshark(dns.time 字段) |
|---|---|
| 过滤语法 | dns.time > 0.5 / dns.time > 1 |
| 测量范围 | 查询发出到响应到达,含网络往返与解析器处理 |
| 取值前提 | 同一事务 ID 的响应已被捕获到 |
典型使用场景
- 页面加载慢定位:先确认域名解析是否占了大头
- 递归解析器质量评估:统计超过阈值的查询占比
- 权威服务器排查:指定某个权威地址后统计它的响应耗时
- 缓存命中判断:常用域名解析极快,长耗时多为未命中
- 与本地解析日志互补:抓包说明「慢」,日志说明「为什么慢」
常用示例
常用示例
dns.time > 0.5 # 超过 500 毫秒的解析
dns.time > 1 && dns.flags.response == 1 # 只看响应侧的长耗时
ip.dst == 10.0.0.53 && dns.time # 指定递归解析器地址
dns.time > 2 && dns.qry.type == 1 # A 记录里特别慢的解析耗时归属判读
| 现象 | 偏向原因 | 下一步 |
|---|---|---|
| 查询后长时间无响应 | 解析器无响应或链路丢包 | 看是否有重试与超时 |
| 响应很快但值不对 | 解析结果本身有问题 | 核对权威记录与本地缓存 |
| 少数域名特别慢 | 该域名的权威服务器慢 | 按域名聚合统计 |
| 所有域名都慢 | 本地递归解析器或链路 | 换解析器对比验证 |
查询超时后客户端会按配置重试,抓包里表现为同一域名出现多条请求、最后才有响应。统计「慢」时要按事务 ID 把重试合并,否则请求总数会被明显放大。
本地缓存命中不产生任何报文,抓包里「没有查询」并不等于应用没在解析。要判断真实解析次数,需要同时参考应用侧日志或解析器自身的统计。
在客户端侧抓包看到的耗时包含客户端到解析器、解析器到权威的整条链路。要把这段拆分归因,需要在解析器所在主机上再抓一份做对照。