【DNS解析】多DNS服务器接力解析IP(原理 + 例子 + 图解)

218 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情 >>

DNS接力解析IP

相信很多朋友都对DNS的作用十分清楚,简单点来说,DNS就是为了解决域名和ip之间两两映射的问题的。

接下来,我们一起来学习一些吧。

域名的层级结构

在将DNS解析之前,我们需要对域名的层级结构有一定的理解才行。

image.png

就像上面的 www.baidu.com 域名的层级是通过 . 来划分的,而且越靠右层级越高。

其实www.baidu.com是一个简写的域名,完整的域名应该是这样的www.baidu.com.

.是根域,域名层级中最高

像这些具有层级结构的域名信息会被注册到DNS服务器中的,一个层级域的信息是作为一个整体存在DNS服务器中的,也就是说如果在一个DNS服务器中找到一条该域的记录,那么其他该域的记录也能在该DNS服务器中找到。

一个域的信息整体存放在一个DNS服务器中;但是一个DNS服务器中可以拥有多个域的信息。

如何通过DNS找到Ip地址

DNS前提准备

因为域名中是由层级域组成的,每个域的信息都整体存在一个DNS服务器中;所以为了能找到域名对用的 IP ,我们需要:

  1. 将负责管理下级域的DNS服务器的IP地址注册到它的上级域DNS服务器中
  2. 上级DNS服务器的IP地址再注册到更上一级的DNS服务器中
  3. 以此类推

经过了以上步骤,我们就可以通过上级的DNS服务器找到下级的DNS服务器IP,也就可以向该下级DNS服务器发送查询请求了。

根域是层级最高的域,只要知道存放根域信息的DNS服务器的IP地址,就可以通过它一路往下,顺藤摸瓜找到想找到的域名记录了。

DNS流程:

下面以解析网址 www.baidu.com 为例子进行讲述:

  1. 客户端向最近的DNS服务器发送查询请求,如果该服务器有记录,则立马返回对应域名的IP;如果没有,则代替客户端向根域名服务器发出查询请求
  2. 根域名服务器中肯定是没有www.baidu.com的记录的,但是根据域名的层级结构,根域名服务器会返回存放 com 域的DNS服务器的IP
  3. 最近DNS服务器拿到存放 com 域的DNS服务器的IP,就向其发送查询请求;如果该服务器也没有记录,则会返回存放 baidu 域的DNS服务器的IP
  4. 最近DNS服务器拿到存放 baidu 域的DNS服务器的IP,就向其发送查询请求;如果该服务器也没有记录,则会返回存放 www 域的DNS服务器的IP
  5. 最近DNS服务器拿到存放 www 域的DNS服务器的IP,就向其发送查询请求;该服务器有该记录,则会返回 www.baidu.com对应的IP
  6. 最近DNS服务器将得到的IP返回给客户端

详细DNS流程,如下图所示:

image.png

当然啦,在实际中,并不一定是一个域对应一个服务器的,有可能是两个域都在同一个服务器中(上下级域共享服务器),这样子的话,在访问上级服务器的时候就可以直接向下跳过一级DNS服务器,直接返回再下一级DNS服务器的相关信息。

通过缓存加快DNS服务器的响应

DNS服务器中会有一个缓存功能的,可以记住之前查询过的域名记录;在后续查询中,只要缓存命中就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。

缓存可以减少查询的时间,提高查询效率

注意: 既然是缓存那就存在有效期,如果过了有效期,则需要删除缓存!