首页/网络/协议速查/DNS 报文头部与标志位
DNS 与域名解析60 条

DNS 报文头部与标志位

DNS 报文 12 字节固定头:ID、QR、Opcode、AA、TC、RD、RA、Z、AD、CD、RCODE,其余是四个资源记录区段。

协议速查网络更新于 2026-10-13

DNS 报文结构

一条 DNS 报文由 12 字节固定头和四个区段组成:问题区(要查的名字与类型)、回答区、权威区、附加区。头部里的 ID 与标志位决定这是查询还是响应、要不要递归、答案是否被截断、DNSSEC 校验到了哪一步。抓包或 dig 输出看不明白时,绝大多数疑问都能在这几个标志位里找到答案。

头部字段读法

字段含义排障关注点
ID查询标识,用于匹配请求与响应防伪造依赖随机化,固定 ID 可被抢答
QR0 查询,1 响应抓包时先分清方向
Opcode0 标准查询,另有 NOTIFY、UPDATE动态更新与主从通知走别的取值
AA权威答案标志dig 输出里的小写 aa
TC截断,说明超长需改用 TCP出现即改 TCP 或调大缓冲
RD / RA请求递归 / 服务器支持递归RA=0 说明对方不替你递归
AD / CDDNSSEC 已验证 / 请求禁用校验dig 里的 ad 标志
RCODE响应码NOERROR、NXDOMAIN、SERVFAIL、REFUSED

查看标志位与区段

查看标志位与区段
dig www.example.com +noall +comments        # 只看头部与标志位
dig +cd www.example.com +noall +comments    # CD=1 表示请求端禁用校验
dig +dnssec example.com | grep -i 'flags'   # 观察 ad 标志
dig +noall +answer +additional example.com MX   # 看附加区里的胶水记录

典型使用场景

  • 解析超时排查:先看有没有响应回来,再看 RCODE 与 TC 标志,避免一上来就怀疑链路
  • DNSSEC 相关故障:用 ad 与 cd 判断是校验失败还是请求端主动放弃了校验
  • 权威与递归定位:用 aa 判断答案来自权威服务器还是缓存递归
  • 抓包比对:核对 ID 是否一致,识别是否存在抢答或丢包重传
  • 协议开发与联调:按区段核对压缩指针与记录顺序
TC 置位只代表这次 UDP 响应塞不下,并不表示答案有错;解析器收到后应改用 TCP 重试。忽略 TC 不重试,是很多「大响应域名偶发解析超时」的根因。多数验证都可用简洁的 dig 标志位完成。
伪造源地址的查询配合大响应(如 ANY 或大量记录)可形成放大攻击。对外提供的递归解析器必须做访问控制与速率限制,权威服务器应慎用超大类 ANY 响应。

易错点

  • 把 TC=1 当成答案错误去改记录,实际只需让请求方改用 TCP 重试
  • 只看 RCODE 不看 QR 与 ID:把伪造响应或过期响应误当成真实答案
  • 忽略附加区:MX、NS 的胶水记录缺失会让后续连接莫名失败,而主记录看起来完全正常
  • 用 +noall 过滤过头,只剩答案行就断言没有截断或校验失败

数据来源与参考

  • RFC 1035 §4.1.1
  • RFC 6895(参数注册表)

相关工具

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