当前位置: 首页 > news >正文

使用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 mscom.                    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 mswww.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 mscom.                    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 msshifen.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 mswww.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(生存时间)通常较短,可更快刷新解析结果。

相关文章:

  • 操作系统 | 第一章:操作系统引论思维导图
  • 【CAPL实战】LIN校验和测试
  • 模型微调参数入门:核心概念与全局视角
  • Step9—Ambari Web UI 初始化安装 (Ambari3.0.0)
  • Proguard代码混淆-springboot3
  • spring4第3课-ioc控制反转-详解依赖注入的4种方式
  • SpringBoot项目快速打包与部署,War包⽅式打包部署与Jar包⽅式打包部署两种方式
  • 基于Vue3.0的【Vis.js】库基本使用教程(002):图片知识图谱的基本构建和设置
  • SpringBoot Controller接收参数方式
  • SpringBoot使用ffmpeg实现视频压缩
  • vue+elementUi+axios实现分页(MyBatis、Servlet)
  • Baklib内容中台驱动资源高效整合
  • matlab中绘图函数plot
  • 《vue.js快速入门》链接摘抄整理
  • DBeaver 连接 OceanBase Oracle 租户
  • vscode 终端 PATH 和python pip 不对
  • 压缩包方式在Linux和Windows下安装mongodb
  • 前端面经 React常见的生命周期
  • D2000平台上Centos使用mmap函数遇到的陷阱
  • 多模态大语言模型arxiv论文略读(九十六)
  • 网站设计侵权/河北网站建设案例
  • 重庆模板网站建设怎么样/软件开发app制作公司
  • 网络隐私安全/广告优化
  • 建站专家网站建设系统/报个计算机培训班多少钱
  • 网站建设专业导航网站/百度关键字搜索排名
  • 房山网站开发/百度做广告多少钱一天