首页/网络/抓包与流量分析速查/DNS 标志位逐项判读
应用层报文判读71 条

DNS 标志位逐项判读

QR 应答、AA 权威、TC 截断、RD 期望递归、RA 递归可用、rcode 结果码:六个位串起来就能读出"谁在答、是否权威、要不要重试"。

标志位是干什么的

DNS 报文头里的标志位是一组可独立读取的布尔量:QR 区分查询与响应,AA 表示答复来自权威服务器,TC 表示响应被截断,RD 是查询方期望递归,RA 是服务器声明自己提供递归,rcode 给出本次查询的结果码。把这几位串起来读,就能回答四个问题:谁在答、答得是否权威、回答是否完整、要不要换一个解析器。抓包里它们都以 dns.flags.* 字段暴露,可单独过滤。

基本信息

适用平台Wireshark / tshark,任何解析 DNS 的环境
字段前缀dns.flags.<name>,如 response、authoritative、truncated
结果码dns.flags.rcode,0 成功 2 服务器失败 3 名字不存在 5 拒绝
典型端口UDP 53 与 TCP 53,组播 DNS 为 5353

典型使用场景

  • 判断某个响应是缓存或转发给出的,还是权威服务器直接给出的
  • 确认响应是否因尺寸超限被截断,避免按不完整内容下结论
  • 识别只发查询不收回应的单向现象,用于定位链路过滤
  • 排查「解析器不提供递归」类故障,看 RD 与 RA 的配对关系
  • 按结果码快速分流失败原因,缩小到上游或本地策略
  • 在 DNSSEC 相关故障中确认是否需要额外关注 DO 位

常用过滤

常用过滤
dns.flags.response == 0            # 只看查询
dns.flags.response == 1            # 只看响应
dns.flags.truncated == 1           # 被截断的响应
dns.flags.authoritative == 0       # 非权威答复(缓存或转发)
dns.flags.rcode == 3               # NXDOMAIN
dns.flags.rcode != 0               # 所有失败结果

标志位逐位读法

标志位含义怎么用
QR0 查询、1 响应先分流再分析,避免把查询当答复读
AA答复来自权威服务器置 0 说明来自缓存或转发,不代表答案错误
TC响应被截断置 1 时内容可能只有部分记录,先别下结论
RD查询方期望递归常态为 1,客户端可据此要求解析器代为查询
RA服务器提供递归RD 置 1 而 RA 置 0 说明对方不代查,需换解析器
rcode结果码非 0 时按码点分流,0 但答案段为空属于 NODATA
AA 缺失本身不是故障信号:企业内网解析器通常转发上游答案,此时答复的权威性由上游决定,本地看到的 AA 自然为 0。
结果码为 0 但答案段为空的应答(NODATA)是常见形态,例如域名存在但没有所查类型的记录,不能一律当作成功。

易错点

  • TC 置位仍按内容判读:截断响应可能只带回部分记录,据此统计记录数或下故障结论都会偏
  • 把 AA 为 0 当成答案不可信:缓存与转发答复天然没有权威位,缺的是属性不是正确性
  • RD 与 RA 的关系被忽略:RD 置位而 RA 未置位时查询会一直失败,现场却总在查域名配置
  • 把 NODATA 当成功:结果码 0 并不代表拿到了所需记录,答案段为空要单独识别

数据来源与参考

  • RFC 1035(头部标志)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌