使用dig查看dns递归查询过程

使用 dig 查看 dns 递归查询过程

DNS 查询过程中如果没有命中缓存,查询实际上是一个递归过程。

DNS 解析工具 dig 提供了 trace 功能,可以展示递归查询的整个过程。以查询 www.baidu.com 为例,查询结果如下:

root@ubuntu:~# dig +trace +nodnssec www.baidu.com
;; communications error to 114.114.114.114#53: timed out

; <<>> DiG 9.18.30-0ubuntu0.20.04.2-Ubuntu <<>> +trace +nodnssec www.baidu.com
;; global options: +cmd
.                       2822    IN      NS      c.root-servers.net.
.                       2822    IN      NS      m.root-servers.net.
.                       2822    IN      NS      i.root-servers.net.
.                       2822    IN      NS      g.root-servers.net.
.                       2822    IN      NS      b.root-servers.net.
.                       2822    IN      NS      a.root-servers.net.
.                       2822    IN      NS      j.root-servers.net.
.                       2822    IN      NS      e.root-servers.net.
.                       2822    IN      NS      l.root-servers.net.
.                       2822    IN      NS      h.root-servers.net.
.                       2822    IN      NS      d.root-servers.net.
.                       2822    IN      NS      k.root-servers.net.
.                       2822    IN      NS      f.root-servers.net.
;; Received 515 bytes from 114.114.114.114#53(114.114.114.114) in 156 ms

com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
;; Received 838 bytes from 170.247.170.2#53(b.root-servers.net) in 368 ms

;; UDP setup with 2001:502:8cc::30#53(2001:502:8cc::30) for www.baidu.com failed: network unreachable.
;; no servers could be reached
;; UDP setup with 2001:502:8cc::30#53(2001:502:8cc::30) for www.baidu.com failed: network unreachable.
baidu.com.              172800  IN      NS      ns2.baidu.com.
baidu.com.              172800  IN      NS      ns3.baidu.com.
baidu.com.              172800  IN      NS      ns4.baidu.com.
baidu.com.              172800  IN      NS      ns1.baidu.com.
baidu.com.              172800  IN      NS      ns7.baidu.com.
;; Received 356 bytes from 192.54.112.30#53(h.gtld-servers.net) in 340 ms

www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
;; Received 100 bytes from 180.76.76.92#53(ns7.baidu.com) in 132 ms

dig trace 的输出,主要包括四部分:

第一部分,是从 114.114.114.114 查到的一些根域名服务器(.)NS 记录。

第二部分,是从 NS 记录结果中选一个根域名服务器b.root-servers.netip170.247.170.2,并查询顶级域名 com. NS 记录。

第三部分,是从 com.NS 记录中选择一个定义域名服务器h.gtld-servers.netip192.54.112.30,并查询二级域名baidu.com.NS 服务器。

最后一部分,就是从 baidu.com.NS 服务器ns7.baidu.com查询最终主机 www.baidu.com.CNAME 记录。

整理成流程图如下:
dns 递归查询过程
如果查询返回的是A记录,DNS 查询流程就结束了。如果是返回的CNAME记录,需要再次作 DNS 查询,进一步得到目标主机的IP地址:

root@ubuntu:~# dig +trace +nodnssec www.a.shifen.com

; <<>> DiG 9.18.30-0ubuntu0.20.04.2-Ubuntu <<>> +trace +nodnssec www.a.shifen.com
;; global options: +cmd
.                       234     IN      NS      i.root-servers.net.
.                       234     IN      NS      a.root-servers.net.
.                       234     IN      NS      m.root-servers.net.
.                       234     IN      NS      c.root-servers.net.
.                       234     IN      NS      f.root-servers.net.
.                       234     IN      NS      b.root-servers.net.
.                       234     IN      NS      j.root-servers.net.
.                       234     IN      NS      e.root-servers.net.
.                       234     IN      NS      d.root-servers.net.
.                       234     IN      NS      h.root-servers.net.
.                       234     IN      NS      l.root-servers.net.
.                       234     IN      NS      g.root-servers.net.
.                       234     IN      NS      k.root-servers.net.
;; Received 515 bytes from 114.114.114.114#53(114.114.114.114) in 20 ms

com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
;; Received 841 bytes from 193.0.14.129#53(k.root-servers.net) in 4 ms

shifen.com.             172800  IN      NS      dns.baidu.com.
shifen.com.             172800  IN      NS      ns2.baidu.com.
shifen.com.             172800  IN      NS      ns3.baidu.com.
shifen.com.             172800  IN      NS      ns4.baidu.com.
;; Received 275 bytes from 192.5.6.30#53(a.gtld-servers.net) in 288 ms

;; UDP setup with 240e:bf:b801:1002:0:ff:b024:26de#53(240e:bf:b801:1002:0:ff:b024:26de) for www.a.shifen.com failed: network unreachable.
;; no servers could be reached
;; UDP setup with 240e:bf:b801:1002:0:ff:b024:26de#53(240e:bf:b801:1002:0:ff:b024:26de) for www.a.shifen.com failed: network unreachable.
;; no servers could be reached
;; UDP setup with 240e:bf:b801:1002:0:ff:b024:26de#53(240e:bf:b801:1002:0:ff:b024:26de) for www.a.shifen.com failed: network unreachable.
a.shifen.com.           1200    IN      NS      ns2.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns5.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns4.a.shifen.com.
;; Received 331 bytes from 36.155.132.78#53(ns3.baidu.com) in 40 ms

www.a.shifen.com.       120     IN      A       110.242.69.21
www.a.shifen.com.       120     IN      A       110.242.70.57
a.shifen.com.           1200    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns2.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns4.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns5.a.shifen.com.
;; Received 363 bytes from 110.242.68.42#53(ns1.a.shifen.com) in 16 ms

关于CNAME的说明

CNAME(Canonical Name)是域名的别名记录,用于将一个域名指向另一个规范域名(主域名)。当查询到 CNAME 记录时,客户端需进一步向该规范域名发起 DNS 查询,以获取最终的 IP 地址(A 记录或 AAAA 记录)。

大型站点,例如百度为了实现负载均衡、CDN 加速或灵活管理域名,会将 www.baidu.com 配置为 CNAME 记录,指向后端的多个中间域名(如 www.a.shifen.comwww.b.shifen.com 等)。

使用CNAME有如下优势:

  1. 修改 CNAME 指向的目标域名时,无需变更原域名的解析记录,适合频繁调整后端服务的场景(如切换 CDN 节点)。

  2. 这些中间域名最终会解析到不同的 IP 地址(A 记录),从而实现流量分发和高可用性。

  3. 直接使用 A 记录时,若 IP 变更需等待全球 DNS 缓存过期,可能导致访问中断。而 CNAME 记录的 TTL(生存时间)通常较短,可更快刷新解析结果。

  4. 这些中间域名最终会解析到不同的 IP 地址(A 记录),从而实现流量分发和高可用性。

  5. 直接使用 A 记录时,若 IP 变更需等待全球 DNS 缓存过期,可能导致访问中断。而 CNAME 记录的 TTL(生存时间)通常较短,可更快刷新解析结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值