看了一些相关文章,总感觉每篇文章在论述过程的时候都缺了些东西,要不就是没说清楚迭代查询和递归查询,要不就是没说缓存,要不就是缓存没说全。当然看了这么多文章,确实让我收获了很多知识,所以在自己的理解上,拾人牙慧,写一篇文章记录一下,如有错误,恳请批评指正~
什么是DNS?
DNS是一种按层次结构组织的分布式数据库系统,它由分布在全世界的成千上万个DNS服务器中的数据库组成。每个DNS的数据库中包含若干条资源记录,每条资源记录为其所管辖的区域中的DNS域名到某种数据(如IP地址)的映射,它提供主机名和IP地址之间的转换及有关电子邮件的选路信息。
DNS的作用
一句话概括:将域名解析为IP地址
DNS的查询方法
【递归查询】:DNS服务器代表请求客户端查询或联系其他DNS服务器,以便完全解析该域名,并将应答返回至客户端。
【迭代查询】:尝试联系其他的DNS服务器来解析名称,然后根据DNS服务器的应答,使用其他的独立查询。
以上,是比较官方的解释,比较抽象。
形象地来讲
递归查询就是:我让你去查找,你查找不到,你就去找其他人,我不管了。你只要把结果发给我就好了:要不找到了,要不找不到。这就是最终结果。
而迭代查询是:我让你去查找,如果你找到了就把结果给我,如果找不到,你告诉我下一步找谁,我再去向这个人去查找,直至查找到目标为止,或最终还是查找不到。
通过上面的分析,就能很好理解在DNS解析中是如何应用这两个查询的:
1. 主机向本地域名服务器的查询,属于递归查询,(主机就坐等结果返回了,只发一次请求,让本地域名服务器帮我做事吧~)
接下来本地域名服务器就开始工作了
2. 本地域名服务器向根域名服务器的查询,属于迭代查询。(每次都要本地域名服务器去请求,不懂的可以看看下面的解析过程,看看本地DNS服务器是不是超忙的!)
DNS的解析过程
1. 首先,主机在请求查询之前,先查找本地DNS缓存,有则返回给主机
2. 如果缓存中没有,则查看操作系统中有没有相关的映射记录(如host记录),有则返回,结束
3. 如果也没有,则主机向本地DNS服务器发送请求进行递归查询
4. 本地DNS服务器接收到请求后,查看自己的缓存记录,有则返回给主机
5. 如果没有,本地DNS服务器向根域名服务器发送查询请求
6. 根域名服务器返回给本地DNS服务器一个负责该区域的顶级域名服务器的IP
7. 本地DNS服务器根据这个IP,向顶级域名服务器去请求查询,如果有则返回给本地DNS服务器,本地DNS服务器再将内容返回给主机。
8. 如果没有,顶级域名服务器返回下一步应查询的权威服务器的IP
9. 本地DNS服务器根据这个IP,向权威域名服务器去请求查询,如果有则返回给本地DNS服务器,本地DNS服务器再将内容返回给主机。如果没有,代表查询不到
10. 本地DNS服务器就把查询结果记录在缓存区中,以供之后快速使用
以上过程中需要注意:
根域名服务器用来管理互联网的主目录,不存储域名,而是存储负责每个域的解析的域名服务器的地址信息,互联网上所有将域名转化为IP地址的请求,理论上都要经过根服务器。