首页/网络/网络排障速查/DNS 报文判读与响应时间

DNS 报文判读与响应时间

DNS 排障在 Wireshark 里很直观:看查询/响应配对、rcode 错误码、截断标志与重试,再用内置的响应时间统计量化慢在哪台服务器。

网络排障速查网络更新于 2026-10-13

在抓包里读 DNS

DNS 流量结构简单,在 Wireshark 里判读很直观:一次查询对应一次响应,事务 ID 相同,响应里带有 rcode 状态码。常见排查动作有三个——看查询与响应是否配对(有无只发不收)、看 rcode 是否为 0(区分 NXDOMAIN 与 SERVFAIL)、看是否发生重试(相同查询重复出现且间隔接近超时值)。再加上内置的响应时间统计,就能量化慢在哪台服务器上。

基本信息

适用平台Wireshark / tshark,分析任意端口对 53 的抓包
基础过滤dns、dns.qry.name contains "example.com"
方向与状态dns.flags.response == 0 为查询,dns.flags.rcode != 0 为错误应答
截断标志dns.flags.truncated == 1 表示响应被截断,客户端应改走 TCP
统计入口Statistics → Service Response Time → DNS

典型使用场景

  • 排查解析慢:用响应时间统计比较各 DNS 服务器的平均与最大耗时
  • 确认是否被重试:同一事务 ID 重复出现说明发生了超时重试
  • 定位截断问题:TC 标志置位后观察客户端是否真的改走 TCP
  • 区分错误类型:rcode 为 3 与 2 的处置方向完全不同
  • 核对解析结果:比对响应中的地址与预期是否一致

DNS 过滤与统计

DNS 过滤与统计
# 全部 DNS 流量
dns
# 指定域名
dns.qry.name contains "example.com"
# 只看查询
dns.flags.response == 0
# 非 0 的错误应答
dns.flags.rcode != 0
# 被截断的响应(客户端应改用 TCP 53)
dns.flags.truncated == 1
# 统计:Statistics → Service Response Time → DNS,可看到各服务器平均与最大响应时间

rcode 速查

rcode含义处置方向
0NOERROR(也可能是 NODATA:域名存在但该类型无记录)正常,注意区分 NODATA 与无记录
2SERVFAIL(权威服务器失败或验证失败)查上游转发与 DNSSEC 配置
3NXDOMAIN(域名不存在)核对拼写、search 域与记录是否已发布
5REFUSED(服务器按策略拒绝)确认查询来源是否在服务器允许范围内
同一事务 ID 的查询重复出现且间隔接近超时时间,说明发生了 DNS 重试;据此可区分「服务器慢」与「第一台服务器完全无响应」两种情况。
统计前先确认 DNS 协议解析未被关闭:在分析菜单的已启用协议里勾选 DNS,否则过滤器会匹配不到任何报文,误以为没有 DNS 流量。

易错点

  • 只按域名过滤:漏掉截断后改走 TCP 53 的兜底查询,看不到完整的解析过程
  • 把 NODATA 当 NXDOMAIN:前者域名存在只是该类型无记录,两者的处置方向完全不同
  • 忽略重试时序:不看重复查询的时间间隔,就无法判断是第一台服务器无响应还是全部变慢
  • 只看单次响应耗时:DNS 排障需要统计分布,单次快慢受缓存与随机路径影响很大

数据来源与参考

  • RFC 1035:DNS 报文格式与 RCODE
  • Wireshark 文档:DNS dissector 字段

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌