根据规范,一个 DNS 包可以分为下面的几个部分。

wireshark RST 标红 wireshark标志位_递归查询


其中,身份 ID 占 16 个位,标志符占 16 个位,下面的分别是请求数、回答数、权威域名服务器数、其他记录数,再下面一点的就是回答的内容了(请求、回答、权威域名服务器、其他记录)可以对照下面这个 Wireshark 抓到的针对本站 imlonghao.com 的一次 DNS 请求进行理解

wireshark RST 标红 wireshark标志位_服务器_02


本博文主要讲述的是 DNS 包中的几个标志位

标志位
正如上面所提供的 Wireshark 的截图,我们可以看到一个名为 Flags 的栏目,这个就是我们今天要讲的标志位。

标志位总长 16 个位,也就是两个字符。

有相应值的位标记为 1 ,没有的则标记为 0 。

最后这 16 个二进制的位通过进制转换即可变成十六进制的,在图中也就是 81 80

QR 1bit
0 为客户端请求包
1 为服务器响应包
Opcode 4bits
0000 为普通的 DNS 请求
0001 为 rDNS 请求
0002 为服务器状态
0003 无
0004 为通知 (Notify)
0005 为更新 (Update)
0006 - 0015 保留
AA 1bit
0 为应答服务器不是该域名的权威解析服务器
1 为应答服务器是该域名的权威解析服务器
TC 1bit
0 为报文未截断
1 为报文过长被截断 (只返回了前 512 个字节)
RD 1bit
0 为不期望进行递归查询
1 为期望进行递归查询 (从域名服务器进行递归查询)
RA 1bit
0 为应答服务器不支持递归查询
1 为应答服务器支持递归查询
Z 1bit
保留位

AD 1bit
0 为应答服务器未验证了该查询相关的 DNSSEC 数字签名
1 为应答服务器已经验证了该查询相关的 DNSSEC 数字签名
CD 1bit
0 为服务器已经进行了相关 DNSSEC 数字签名的验证
1 为服务器并未进行相关 DNSSEC 数字签名的验证
Rcode 4bits
0000 为正常
0001 为格式错误 (NS 无法解析这个请求)
0002 为服务器错误 (NS 有问题所以无法进行这个请求)
0003 为名称错误 (请求中的地址并不存在)
0004 为未实施查询 (NS 服务器不支持这种查询)
0005 为拒绝 (由于策略原因拒绝执行这个错误)
0006 为域名出现了但是他不该出现
0007 为集合 RR 存在但是他不该存在
0008 为集合 RR 不存在但是他应该存在
0009 为服务器并不是这个区域的权威服务器
0010 为该名称并不包含在区域中
0011 - 0015 保留
0016 为错误的 OPT 版本或者 TSIG 签名无效
0017 为无法识别的密钥
0018 为签名不在时间范围内
0019 为错误的 TKEY 模式
0020 为重复的密钥名称
0021 为该算法不支持
0022 为错误的截断
0023 - 3840 保留
3841 - 4095 私人使用
4096 - 65534 保留
65535 RFC 6195