DNS查询过程与原理

DNS

1. DNS 是什么

DNS (Domain Name System 的缩写)是域名解析器,根据域名查出IP地址


2. DNS 服务器

DNS 服务器是一种特殊的服务器,它运行 DNS 协议,用于解析域名到 IP 地址的映射关系。我们输入域名,浏览器就会在后台,自动向 DNS 服务器发出请求,获取对应的 IP 地址。这就是 DNS 查询。

DNS 服务器可以分为几种类型:

  1. 根 DNS 服务器
    • 这些服务器存储顶级域服务器的信息。
    • 它们构成了 DNS 系统的基础。
    • 所有域名的起点都是根域名,它写作一个点.,放在域名的结尾。因为这部分对于所有域名都是相同的,所以就省略不写了,比如example.com等同于example.com.(结尾多一个点)。
  2. 顶级域(TLD)服务器
    • .com, .org, .net 等服务器。
    • 它们存储二级域名的权威 DNS 服务器信息。
    • 根域名的下一级是顶级域名。
  3. 权威 DNS 服务器
    • 对应于具体域名的服务器。
    • 存储域名和 IP 地址之间的映射关系。
  4. 递归 DNS 服务器
    • 这些服务器负责递归地查询并返回最终的 IP 地址。
    • 通常是用户的 ISP 提供的 DNS 服务器。
    • 我们平常说的 DNS 服务器,一般都是指递归 DNS 服务器。它把 DNS 查询自动化了,只要向它查询就可以了。它内部有缓存,可以保存以前查询的结果,下次再有人查询,就直接返回缓存里面的结果。所以它能加快查询,减轻源头 DNS 服务器的负担。

3. 使用dig显示查询过程

工具软件dig可以显示整个查询过程。比如我们显示www.baidu.com这个域名的查询过程:

dig www.baidu.com

在这里插入图片描述

第一段是查询参数和统计:

在这里插入图片描述

第二段是查询内容:

在这里插入图片描述

  • 上面输出表示,查询域名www.baidu.comA记录,A是address的缩写。

第三段是DNS服务器的答复:

在这里插入图片描述

  • 上面结果显示,www.baidu.com有2个A记录,即2个IP地址,和1个CNAME记录
  • CNAME记录主要用于域名的内部跳转,为服务器配置提供灵活性,用户感知不到。也就是说用户查询www.baidu.com的时候,实际上返回的是www.a.shifen.com的IP地址。这样的好处是,变更服务器IP地址的时候,只要修改www.a.shifen.com这个域名就可以了,用户的fwww.baidu.com域名不用修改。

第四段是DNS服务器的一些传输信息:

在这里插入图片描述

  • 上面结果显示,本机的DNS服务器是192.168.30.2,查询端口是53(DNS服务器的默认端口)

如果不想看到这么多内容,可以使用+short参数:

在这里插入图片描述


4. 域名的逐级查询

要了解DNS 完整的查询过程,就必须了解 域名是一个树状结构。这种树状结构的意义在于,只有上级域名,才知道下一级域名的 IP 地址,所以需要逐级查询。

在这里插入图片描述

每一级域名都有自己的 DNS 服务器,存放下级域名的 IP 地址。

所以,如果想要查询二级域名 es6.ruanyifeng.com 的 IP 地址,需要三个步骤。

第一步,查询根域名服务器,获得顶级域名服务器.com(又称 TLD 服务器)的 IP 地址。

第二步,查询 TLD 服务器 .com,获得一级域名服务器 ruanyifeng.com 的 IP 地址。

第三步,查询一级域名服务器 ruanyifeng.com,获得二级域名 es6 的 IP 地址。

下面依次演示这三个步骤。

根域名服务器全世界一共有13台(都是服务器集群)。它们的域名和 IP 地址如下。

img

根域名服务器的 IP 地址是不变的,集成在操作系统里面。

操作系统会选其中一台,查询 TLD 服务器的 IP 地址。

dig @192.33.4.12 es6.ruanyifeng.com

上面示例中,我们选择192.33.4.12,向它发出查询,询问es6.ruanyifeng.com的 TLD 服务器的 IP 地址。

dig 命令的输出结果如下:

[root@server1 ~]# dig @192.33.4.12 es6.ruanyifeng.com

; <<>> DiG 9.11.36-RedHat-9.11.36-14.el8_10 <<>> @192.33.4.12 es6.ruanyifeng.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16169
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 27
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8ede247a436d6ce60100000066b95ffb3e3d919c505717a5 (good)
;; QUESTION SECTION:
;es6.ruanyifeng.com. IN A

;; AUTHORITY SECTION:
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS b.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 i.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.

;; ADDITIONAL SECTION:
m.gtld-servers.net. 172800 IN A 192.55.83.30
l.gtld-servers.net. 172800 IN A 192.41.162.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
c.gtld-servers.net. 172800 IN A 192.26.92.30
b.gtld-servers.net. 172800 IN A 192.33.14.30
a.gtld-servers.net. 172800 IN A 192.5.6.30
m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30

;; Query time: 184 msec
;; SERVER: 192.33.4.12#53(192.33.4.12)
;; WHEN: Mon Aug 12 09:06:03 CST 2024
;; MSG SIZE rcvd: 874

  • 因为它给不了 es6.ruanyifeng.com 的 IP 地址,所以输出结果中没有 ANSWER SECTION,只有一个 AUTHORITY SECTION,给出了com.的13台 TLD 服务器的域名。

  • 下面还有一个 ADDITIONAL SECTION,给出了这13台 TLD 服务器的 IP 地址(包含 IPv4 和 IPv6 两个地址)。

有了 TLD 服务器的 IP 地址以后,我们再选一台接着查询:

dig @192.41.162.30 es6.ruanyifeng.com

上面示例中,192.41.162.30 是随便选的一台 .com 的 TLD 服务器,我们向它询问 es6.ruanyifeng.com 的 IP 地址。

返回结果如下。

; <<>> DiG 9.11.36-RedHat-9.11.36-14.el8_10 <<>> @192.41.162.30 es6.ruanyifeng.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30190
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 13
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;es6.ruanyifeng.com. IN A

;; AUTHORITY SECTION:
ruanyifeng.com. 172800 IN NS kara.ns.cloudflare.com.
ruanyifeng.com. 172800 IN NS norman.ns.cloudflare.com.

;; ADDITIONAL SECTION:
kara.ns.cloudflare.com. 172800 IN A 108.162.192.123
kara.ns.cloudflare.com. 172800 IN A 172.64.32.123
kara.ns.cloudflare.com. 172800 IN A 173.245.58.123
kara.ns.cloudflare.com. 172800 IN AAAA 2606:4700:50::adf5:3a7b
kara.ns.cloudflare.com. 172800 IN AAAA 2803:f800:50::6ca2:c07b
kara.ns.cloudflare.com. 172800 IN AAAA 2a06:98c1:50::ac40:207b
norman.ns.cloudflare.com. 172800 IN A 108.162.193.217
norman.ns.cloudflare.com. 172800 IN A 172.64.33.217
norman.ns.cloudflare.com. 172800 IN A 173.245.59.217
norman.ns.cloudflare.com. 172800 IN AAAA 2606:4700:58::adf5:3bd9
norman.ns.cloudflare.com. 172800 IN AAAA 2803:f800:50::6ca2:c1d9
norman.ns.cloudflare.com. 172800 IN AAAA 2a06:98c1:50::ac40:21d9

;; Query time: 311 msec
;; SERVER: 192.41.162.30#53(192.41.162.30)
;; WHEN: Mon Aug 12 09:17:58 CST 2024
;; MSG SIZE rcvd: 365

  • 它依然没有 ANSWER SECTION 的部分,只有 AUTHORITY SECTION,给出了一级域名 ruanyifeng.com 的两台 DNS 服务器。
  • 下面的 ADDITIONAL SECTION 就是这两台 DNS 服务器对应的 IP 地址。

第三步,再向一级域名的 DNS 服务器查询二级域名的 IP 地址。

dig @172.64.32.123 es6.ruanyifeng.com

返回结果如下。

; <<>> DiG 9.11.36-RedHat-9.11.36-14.el8_10 <<>> @172.64.32.123 es6.ruanyifeng.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29581
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;es6.ruanyifeng.com. IN A

;; ANSWER SECTION:
es6.ruanyifeng.com. 300 IN A 104.198.14.52

;; Query time: 855 msec
;; SERVER: 172.64.32.123#53(172.64.32.123)
;; WHEN: Mon Aug 12 09:20:38 CST 2024
;; MSG SIZE rcvd: 63

  • 这次终于有了 ANSWER SECTION,得到了最终的二级域名的 IP 地址。

至此,三个步骤的 DNS 查询全部完成。


5. 简述DNS解析www.baidu.com的过程

  1. 客户端查询
    • 用户在浏览器中输入 www.baidu.com
    • 浏览器首先检查本地缓存中是否有该域名对应的 IP 地址记录。
    • 如果缓存中没有找到记录,则浏览器向本地 DNS 服务器发送查询请求。
  2. 本地 DNS 服务器查询
    • 本地 DNS 服务器收到查询后,先检查自己的缓存中是否有记录。
    • 如果缓存中没有记录,则向根 DNS 服务器发起查询。
  3. 根 DNS 服务器查询
    • 根 DNS 服务器不保存具体的域名和 IP 地址映射,而是知道顶级域(TLD)服务器的位置。
    • 根 DNS 服务器返回 .com 顶级域服务器的信息。
  4. 顶级域(TLD)服务器查询
    • 顶级域服务器 .com 接收到查询后,返回 baidu.com 的权威 DNS 服务器的信息。
  5. 权威 DNS 服务器查询
    • 权威 DNS 服务器 baidu.com 接收到查询后,返回 www.baidu.com 的 A 记录(IPv4 地址)或 AAAA 记录(IPv6 地址)。
  6. 响应客户端
    • 权威 DNS 服务器将结果返回给本地 DNS 服务器。
    • 本地 DNS 服务器将结果返回给客户端浏览器,并将结果缓存起来以备后续查询。

注意事项:

  • 缓存:DNS 查询的结果会被本地 DNS 服务器和其他中间服务器缓存一段时间,以减少未来的查询次数。
  • 递归查询:本地 DNS 服务器通常执行递归查询,这意味着它会负责完成整个查询过程并返回结果给客户端。
  • 迭代查询:在查询过程中,DNS 服务器之间的查询通常是迭代的,即每次查询只返回下一步的地址,直到找到权威 DNS 服务器为止。

参考

https://www.ruanyifeng.com/blog/2022/08/dns-query.html

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不怕娜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值