DNS 查询全解(下)

有了上文《DNS 查询全解(上)》的铺垫终于可以说说域名解析的全过程啦!

域名查询全过程

我们先忽略权威服务器、递归服务器的概念,来看一下 www.hostker.com 这个二级域名是如何完成解析的。有 dig 的读者试着运行 dig +trace www.hostker.com 可以看到以下结果:

; <<>> DiG 9.10.3 <<>> +trace www.hostker.com
;; global options: +cmd
. 270617 IN NS k.root-servers.net.
. 270617 IN NS e.root-servers.net.
. 270617 IN NS a.root-servers.net.
. 270617 IN NS c.root-servers.net.
. 270617 IN NS g.root-servers.net.
. 270617 IN NS m.root-servers.net.
. 270617 IN NS h.root-servers.net.
. 270617 IN NS d.root-servers.net.
. 270617 IN NS i.root-servers.net.
. 270617 IN NS f.root-servers.net.
. 270617 IN NS b.root-servers.net.
. 270617 IN NS l.root-servers.net.
. 270617 IN NS j.root-servers.net.
;; Received 239 bytes from 119.29.29.29#53(119.29.29.29) in 15 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 739 bytes from 193.0.14.129#53(k.root-servers.net) in 198 ms

hostker.com. 172800 IN NS ns1.smartgslb.com.
hostker.com. 172800 IN NS ns2.smartgslb.com.
;; Received 703 bytes from 192.42.93.30#53(g.gtld-servers.net) in 344 ms

www.hostker.com. 300 IN A 58.221.29.99
;; Received 60 bytes from 114.215.85.232#53(ns1.smartgslb.com) in 61 ms

※ Windows 用户可以通过一步步 nslookup -qt=ns 和 nslookup -qt=a 模仿上文流程。

全世界所有的域名的根都是.一个点,不过实际使用中全部忽略了,这个根的 NS 是 a-n.root-server.net.。从这里面选出一台(193.0.14.129 k.root-servers.net)寻找下一级 com. 的 NS 记录,这一排记录是 com 域名的权威服务器,继续选出一台(192.42.93.30 g.gtld-servers.net)得到 hostker.com 的 NS 记录(ns1/2.smartgslb.com 也就是我们的权威 DNS)。

※ 如果此时的 NS 记录正好是类似 ns1.hostker.com 这种结果,那么还会附带有胶水记录例如 58.221.29.99 ns1.hostker.com 这种记录,以便于继续进行查询不至于中断。这也是我们在域名控制面板中经常见到的「新建子域名服务器」的用途。

最后从 ns1.smartgslb.com 中选出一台服务器 114.215.85.232 进行查询,得到了一条 A 记录。一次完整的解析过程就完成了。

递归服务器与 CNAME

在实际使用中,电信运营商(这里的电信指的是电信/移动/联通不局限于电信)会分配两个递归服务器 IP 供宽带用户使用。例如广东电信是 202.96.128.86 和 202.96.134.33。用户也可以在网络设置中修改。

递归服务器上一篇已经提到,作用是减少外部流量加快网站的访问。在遇到 CNAME 域名的时候,其实不需要客户端进行多次跟踪查询,而是由递归服务器完成。例如查询我们的分销平台演示域名 idcdemo.smartgslb.com,得到结果如下:

nslookup idcdemo.smartgslb.com
服务器: pdns.dnspod.cn
Address: 119.29.29.29

非权威应答:
名称: idc.smartgslb.com
Address: 198.57.47.70
Aliases: idcdemo.smartgslb.com

※ 如果是递归服务器返回的结果,nslookup 会提醒你这属于「非权威应答」。

递归服务器首先查询 idcdemo.smartgslb.com,得到 CNAME 记录值是 idc.smartgslb.com。递归服务器继续查询 idc.smartgslb.com,得到 A 记录 198.57.47.70。

因此我们建议用户直接使用我们的 DNS 进行 CDN 类型解析,直接返回 A 记录可以减少一次解析时间加快访问速度。

到这里 DNS 查询全过程就完结啦!是不是觉得全部疑问一扫而光?如果还是不理解,可以再读一遍。完全理解之后继续阅读《DNS 智能调度原理》。

《DNS 查询全解(下)》上有2条评论

    1. 举个例子 smartgslb.com NS使用的是 ns1.smartgslb.com,如果没有胶水记录,将会有一个先有鸡还是先有蛋的问题,因此需要胶水记录把 ns1.smartgslb.com 的 IP 写到 .com. 的根服务器上。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.