想象一下,你在一个陌生的城市,想去一家餐厅品尝美食。你知道这家餐厅的名字,但却不知道它的具体位置。
这时,你可能会打开手机地图,输入餐厅的名字,然后地图会告诉你如何到达那里。
在互联网世界里,DNS(域名系统)就扮演了类似导航、带路人的角色。

DNS的诞生
在互联网的早期,计算机之间的通信是通过IP地址来进行的。
然而,由于IP地址是一串难以记忆的数字,如192.168.1.1,这对于人类的记忆和使用带来了极大的不便。
于是,为了解决这个问题,DNS应运而生。它的核心功能就是将容易记忆的域名 (如www.dnspod.cn)转换为实际的IP地址(如183.60.155.197),以便我们更好的访问互联网。
DNS的运作原理
D妹在浏览器中输入一个网址www.dnspod.cn,然后快速地打开了想要访问的网站,这背后究竟发生了什么?
为了让大家更好的理解DNS的"上班"路线,下面请随D妹来探个究竟👇🏻

当D妹从浏览器中输入www.dnspod.cn后,将会进行以下过程:
0 1
本地 DNS 服务器首先向根 DNS 服务器发送请求查询顶级 DNS 服务器地址,既dnspod.cn的.cn地址。
0 2
获取顶级 DNS 服务器.cn地址后,本地 DNS 服务器向顶级 DNS 服务器发送请求查询权威 DNS 服务器地址。
0 3
因dnspod.cn域名解析托管在 DNSPod,则会获取到 DNSPod 权威 DNS 服务器地址。获取地址后,本地 DNS 服务器向 DNSPod 权威 DNS 服务器发送请求查询网站服务器地址。
04
权威 DNS 服务器返回网站服务器地址到本地 DNS 服务器。本地 DNS 服务器获取网站服务器地址后,浏览器向网站服务器地址发送请求,网站响应后则返回网页内容。

简单来说,我们从浏览器中输入网站域名后,会依次向根域名服务器、顶级域名服务器、权威域名服务器查询网站服务器的IP地址,获取IP地址后浏览器发送请求,网站响应后返回网页内容,然后就看到网站了。
从DNS的"上班"路线我们可以看出,我们要正常访问一个网站,DNS在机器背后可走了不少路。DNS域名解析包括两种查询模式,一种是递归查询,另一种是迭代查询。
递归查询
**递归查询是客户端向本地 DNS 服务器发起的查询请求,要求本地 DNS 服务器必须返回一个结果。**这个结果可以是目标IP地址,也可以是一个错误信息。
在递归查询中,本地 DNS 服务器如果没有请求的信息,它会向其他 DNS 服务器发起查询请求,并一直查询下去,直到找到结果或者返回错误信息。对于客户端来说,只需要发起一次请求,然后等待DNS服务器返回结果。
举个🌰:假设D妹想访问 dnspod.cn,D妹的设备会向本地 DNS 服务器发起一个递归查询请求。如果本地 DNS 服务器没有这个域名的缓存记录,它会向其他 DNS 服务器查询,比如向根服务器、顶级域服务器和权威域服务器查询,直到找到IP地址。最后,本地 DNS 服务器将结果返回给D妹的设备。

迭代查询
迭代查询是客户端向本地 DNS 服务器发起的查询请求,但 DNS 服务器不需要返回一个确切的结果。
如果本地 DNS 服务器没有请求的信息,它会返回一个其他可能知道结果的 DNS 服务器的地址。客户端需要自己去联系这个新的 DNS 服务器,发起新的查询请求。这个过程会不断重复,直到客户端找到目标IP地址或者返回错误信息。
举个🌰:假设D妹想访问 dnspod.cn ,D妹的设备会向本地 DNS 服务器发起一个迭代查询请求。如果本地 DNS 服务器没有这个域名的缓存记录,它会返回一个根服务器的地址。D妹的设备会向根服务器发起新的查询请求。根服务器可能会返回一个顶级域服务器的地址,D妹的设备继续查询,直到找到IP地址。

递归查询中,本地 DNS 服务器负责查询其他服务器并返回结果,客户端只需发起一次请求;而迭代查询中,客户端需要不断地向其他域名服务器发起新的请求,直到找到结果。

到这里,相信你对DNS已经有一定的认识了。那么再回到最开始,D妹在浏览器中输入一个网址www.dnspod.cn,然后会发生什么?
一般来说,就会像我们上面讲的DNS运作原理一样,会经过递归查询和迭代查询,最终看到网页的内容。(再来复习一下这张图)

再进阶一下,如果D妹访问的这个本地 DNS 服务器,服务区域内经常有很多用户访问这个网站,那么本地 DNS 服务器会将这个网站的IP地址保存在缓存里,那么D妹访问的时候可以直接从本地 DNS 服务器的缓存中查找IP地址,也就是只走递归查询,不需要再走迭代查询。这样可以减少每次查询时的性能消耗。

再再进阶一下,如果D妹经常访问这个网站,只要没有对缓存策略(cache-control)做特殊设置,一般D妹的浏览器会把网站对应的IP地址保存在缓存里,那么D妹就不需要走递归查询和迭代查询,直接就能向网站服务器发起请求,响应后就能看到网站的内容啦。

DNS核心作用就是实现域名与IP地址的相互转换,这样我们就可以通过输入域名访问网站,而不需要记住复杂的IP地址。它就像是网络世界的导航仪,为我们提供了方便、快捷、安全的网络访问服务。
所以,下次当你在浏览器中输入一个网址时,别忘了感谢那个默默为你指路的导航仪------DNS!
栏目介绍:
《D课堂》是腾讯云轻量云产品中心推出的一档内容丰富、实用性强的科普栏目。本栏目以域名、DNS解析、证书、备案等产品为核心,呈现寓教于乐的科普内容,同时还将分享实用的产品使用技巧,助您轻松驾驭云产品。
《D课堂》旨在通过每期的精彩分享,我们将由浅入深地剖析各类产品原理,与您一起学习DNS相关的知识,解答您在使用产品过程中遇到的各种疑问。欢迎您持续关注《D课堂》!
本期互动

关于DNS,你还有哪些感兴趣的内容or疑问?欢迎评论区留言告诉我们,在下一次《D课堂》中,期待能为你解答!