1、DNS域名解析处理过程
sequenceDiagram
DNS解析->> 本地HOST: 请求本地HOST
本地HOST ->> 本地HOST: 本地映射关系返回
DNS解析->> DNS缓存: 请求DNS缓存
DNS缓存 ->> DNS缓存: 本地缓存返回
DNS解析->> DNSServer: 请求DNSServer
DNSServer ->> DNSServer: DNS响应返回
2、DNS请求应答报文
| ID | 请求头 | 问题格式 | 应答资源记录数 | 授权资源记录数 | 额外资源记录数 | 应答资源记录 | 授权资源记录 | 额外资源记录 |
|---|---|---|---|---|---|---|---|---|
| 16bit | 16bit | 16bit | 16bit | 16bit | 16bit | 依据应答资源记录数变长 | 依据授权资源记录数变长 | 依据额外资源记录数变长 |
DNS请求头
| QR | OPCODE | AA | TC | RD | RA | ZERO | RCODE |
|---|---|---|---|---|---|---|---|
| 1bit | 4bit | 1bit | 1bit | 1bit | 1bit | 3bit(这三位未使用,固定为0) | 4bit |
QR 查询应答标志,0表示这是查询报文,1表示这是应答报文
OPCODE 查询应答类型,0表示标准查询,1表示反向查询,2表示请求服务器状态。
AA 表示权威回答( authoritative answer ),意味着当前查询结果是由域名的权威服务器给出的,仅由应答报文使用.
TC 位表示截断( truncated ),使用 UDP 时,如果应答超过 512 字节,只返回前 512 个字节.
RD 表示递归查询标志 ( recursion desired ),在请求中设置,并在应答中返回.
RA 位表示可递归 ( recursion available ),如果服务器支持递归查询,就会在应答中设置该位,以告知客户端。仅由应答报文使用.
ZERO 这三位未使用,固定为0.
RCODE 表示返回码(reply code),用来返回应答状态,常用返回码:0表示无错误,2表示格式错误,3表示域名不存在。
DNS查询类型
| 查询类型 | 名称代码 | 含义 |
|---|---|---|
| 1 | A | 将域名解析到一个指定的IPV4的IP上。 |
| 2 | NS | 用来指定该域名由哪个DNS服务器来进行解析,类似于托管,将子域名交给其他DNS服务器解析。 |
| 5 | CNAME | 规范名称,可以将注册的不同域名都转到同一个规范名称上,由这个规范名称统一解析IP地址 |
| 15 | MX | 电子邮件交互 |
| 16 | TXT | 文本信息 |
| 28 | AAAA | 将域名解析到一个指定的IPV6的IP上。 |
3、动手抓包DNS请求响应
前面已经讲解了DNS基础协议,在理解基础理论的同时我们需要动手使用WireShark去抓包协议这样才能更好的去理解DNS请求响应协议。
(1)首先安装Wireshark这里就不需要再为大家讲解软件安装了。
(2)使用nslookup来查询一个A记录并对A记录请求和响应做一下抓包。
1、打开wireshark输入dns这样就会拦截到dns请求记录
2、cmd/shell输入nslookup
3、set type=A (这里只关注A记录的请求响应报文)