DNS查询过程与原理

DNS查询过程与原理注意事项 缓存 DNS 查询的结果会被本地 DNS 服务器和其他中间服务器缓存一段时间 以减少未来的查询次数

大家好,欢迎来到IT知识分享网。

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: 8ede247a436d6ceb95ffb3e3d919ca5 (good)
;; QUESTION SECTION:
;es6.ruanyifeng.com. IN A

;; AUTHORITY SECTION:
com. IN NS g.gtld-servers.net.
com. IN NS f.gtld-servers.net.
com. IN NS m.gtld-servers.net.
com. IN NS d.gtld-servers.net.
com. IN NS b.gtld-servers.net.
com. IN NS j.gtld-servers.net.
com. IN NS k.gtld-servers.net.
com. IN NS l.gtld-servers.net.
com. IN NS i.gtld-servers.net.
com. IN NS e.gtld-servers.net.
com. IN NS h.gtld-servers.net.
com. IN NS a.gtld-servers.net.
com. IN NS c.gtld-servers.net.

;; ADDITIONAL SECTION:
m.gtld-servers.net. IN A 192.55.83.30
l.gtld-servers.net. IN A 192.41.162.30
k.gtld-servers.net. IN A 192.52.178.30
j.gtld-servers.net. IN A 192.48.79.30
i.gtld-servers.net. IN A 192.43.172.30
h.gtld-servers.net. IN A 192.54.112.30
g.gtld-servers.net. IN A 192.42.93.30
f.gtld-servers.net. IN A 192.35.51.30
e.gtld-servers.net. IN A 192.12.94.30
d.gtld-servers.net. IN A 192.31.80.30
c.gtld-servers.net. IN A 192.26.92.30
b.gtld-servers.net. IN A 192.33.14.30
a.gtld-servers.net. IN A 192.5.6.30
m.gtld-servers.net. IN AAAA 2001:501:b1f9::30
l.gtld-servers.net. IN AAAA 2001:500:d937::30
k.gtld-servers.net. IN AAAA 2001:503:d2d::30
j.gtld-servers.net. IN AAAA 2001:502:7094::30
i.gtld-servers.net. IN AAAA 2001:503:39c1::30
h.gtld-servers.net. IN AAAA 2001:502:8cc::30
g.gtld-servers.net. IN AAAA 2001:503:eea3::30
f.gtld-servers.net. IN AAAA 2001:503:d414::30
e.gtld-servers.net. IN AAAA 2001:502:1ca1::30
d.gtld-servers.net. IN AAAA 2001:500:856e::30
c.gtld-servers.net. IN AAAA 2001:503:83eb::30
b.gtld-servers.net. IN AAAA 2001:503:231d::2:30
a.gtld-servers.net. 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. IN NS kara.ns.cloudflare.com.
ruanyifeng.com. IN NS norman.ns.cloudflare.com.

;; ADDITIONAL SECTION:
kara.ns.cloudflare.com. IN A 108.162.192.123
kara.ns.cloudflare.com. IN A 172.64.32.123
kara.ns.cloudflare.com. IN A 173.245.58.123
kara.ns.cloudflare.com. IN AAAA 2606:4700:50::adf5:3a7b
kara.ns.cloudflare.com. IN AAAA 2803:f800:50::6ca2:c07b
kara.ns.cloudflare.com. IN AAAA 2a06:98c1:50::ac40:207b
norman.ns.cloudflare.com. IN A 108.162.193.217
norman.ns.cloudflare.com. IN A 172.64.33.217
norman.ns.cloudflare.com. IN A 173.245.59.217
norman.ns.cloudflare.com. IN AAAA 2606:4700:58::adf5:3bd9
norman.ns.cloudflare.com. IN AAAA 2803:f800:50::6ca2:c1d9
norman.ns.cloudflare.com. 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

;; 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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/135002.html

(0)
上一篇 2024-11-23 14:26
下一篇 2024-11-23 14:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信