dns 查询的工作原理

use*_*350 7 domain-name-system

当我输入 www.google.com 时,dns 查找是如何工作的。据我所知,它首先进入根服务器并找出 .com dns 服务器的位置。接下来它返回该服务器的 IP 地址。接下来从那里找出谷歌服务器的位置。现在它返回一个 ip 地址,这将是找到 www.google.com 的地方。

所以要解决这两个 dns 查找是需要的。如果我错了,请纠正我。

Cak*_*mox 6

当您开始考虑缓存和任播等问题时,DNS 解析可能会变得非常棘手,但现在让我们保持简单。

以下是将 www.google.com 查询到新启动的名称服务器的 tcpdumps 片段旁边的 digs 片段,因此没有使用缓存。为了清晰起见,我修剪了一些时间戳。

首先,本地名称服务器(此处为 192.168.10.10)向其中一个根服务器(在本例中为 h.root-servers.net,128.63.2.53)询问“www.google.com 的 A 记录是什么?” h.root-servers.net 不是 www.google.com 的权威,但它确实有 .com 的授权,所以它返回那个。

192.168.10.10.17203 > 128.63.2.53.53: 29969 [1au] A? www.google.com. (43)
128.63.2.53.53 > 192.168.10.10.17203: 29969- 0/15/16 (719)

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; AUTHORITY SECTION:
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.
Run Code Online (Sandbox Code Playgroud)

其次,本地名称服务器然后从 h.root-servers.net 返回的列表中选择名称服务器之一并发送相同的查询:“www.google.com 的 A 记录是什么?” 在这种情况下,查询的名称服务器是 f.gtld-servers.net (192.35.51.30)。f.gtld-servers.net 是 .com 的权威机构,已响应 google.com 区域的域名服务器代表团

192.168.10.10.65182 > 192.35.51.30.53: 58632 [1au] A? www.google.com. (43)
192.35.51.30.53 > 192.168.10.10.65182: 58632- 0/4/5 (179)

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; AUTHORITY SECTION:
google.com.             172800  IN      NS      ns2.google.com.
google.com.             172800  IN      NS      ns1.google.com.
google.com.             172800  IN      NS      ns3.google.com.
google.com.             172800  IN      NS      ns4.google.com.
Run Code Online (Sandbox Code Playgroud)

越来越近!现在本地名称服务器在最后一个响应中选择其中一个名称服务器并询问相同的问题。在这种情况下,它会询问 ns2.google.com (216.239.34.10)。ns2.google.com 回应说 www.google.com 实际上是 www.l.google.com 的 CNAME(规范名称)记录

192.168.10.10.4767 > 216.239.34.10.53: 15830 [1au] A? www.google.com. (43)
216.239.34.10.53 > 192.168.10.10.4767: 15830*- 6/0/0 CNAME[|domain]

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         604800  IN      CNAME   www.l.google.com.
Run Code Online (Sandbox Code Playgroud)

很接近!现在我们只需要 www.l.google.com 的地址。现在因为我们已经知道 google.com 的名称服务器,所以我们只询问其中一个。在这种情况下,我们询问 ns3.google.com (216.239.36.10) “www.l.google.com. 的 A 记录是什么?” 它以地址作为响应,我们得到了答案:

192.168.10.10.63657 > 216.239.36.10.53: 62511 [1au] A? www.l.google.com. (45)
216.239.36.10.53 > 192.168.10.10.63657: 62511*- 5/0/0 A[|domain]

;; QUESTION SECTION:
;www.l.google.com.              IN      A

;; ANSWER SECTION:
www.l.google.com.       300     IN      A       74.125.232.116
www.l.google.com.       300     IN      A       74.125.232.112
www.l.google.com.       300     IN      A       74.125.232.115
www.l.google.com.       300     IN      A       74.125.232.113
www.l.google.com.       300     IN      A       74.125.232.114
Run Code Online (Sandbox Code Playgroud)

哈扎!

无论如何,我希望这足以让你开始。那里有很多很棒的资源。O'Reilly 的书“DNS 和 BIND”非常有用。

我强烈强烈建议安装 dig 以用于查看 DNS 查询的进行情况。例如,您可以使用 dig +trace 轻松查看主机的委托路径:

; <<>> DiG 9.7.0-P1 <<>> +trace www.google.com
;; global options: +cmd
.                       516930  IN      NS      k.root-servers.net.
.                       516930  IN      NS      g.root-servers.net.
.                       516930  IN      NS      h.root-servers.net.
.                       516930  IN      NS      j.root-servers.net.
.                       516930  IN      NS      a.root-servers.net.
.                       516930  IN      NS      m.root-servers.net.
.                       516930  IN      NS      b.root-servers.net.
.                       516930  IN      NS      f.root-servers.net.
.                       516930  IN      NS      d.root-servers.net.
.                       516930  IN      NS      c.root-servers.net.
.                       516930  IN      NS      l.root-servers.net.
.                       516930  IN      NS      i.root-servers.net.
.                       516930  IN      NS      e.root-servers.net.
;; Received 244 bytes from 127.0.0.1#53(127.0.0.1) in 1 ms

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

google.com.             172800  IN      NS      ns2.google.com.
google.com.             172800  IN      NS      ns1.google.com.
google.com.             172800  IN      NS      ns3.google.com.
google.com.             172800  IN      NS      ns4.google.com.
;; Received 168 bytes from 192.33.14.30#53(b.gtld-servers.net) in 42 ms

www.google.com.         604800  IN      CNAME   www.l.google.com.
www.l.google.com.       300     IN      A       74.125.232.115
www.l.google.com.       300     IN      A       74.125.232.113
www.l.google.com.       300     IN      A       74.125.232.116
www.l.google.com.       300     IN      A       74.125.232.114
www.l.google.com.       300     IN      A       74.125.232.112
;; Received 132 bytes from 216.239.34.10#53(ns2.google.com) in 131 ms
Run Code Online (Sandbox Code Playgroud)

请注意它与之前查询的跟踪有多相似?希望有帮助。