DNS的查询过程
DNS(Domain Name System)叫域名系统,由于IP地址不方便记忆,所以产生了一种可以 有效管理主机名和 IP 地址之间对应关系的系统,即 DNS 系统。
在一个本地计算机上,它可以是一个 hosts 文件,在互联网中它就是 DNS 系统。
域名的构成
域名的分层
在一个内网中,你可以随意定一台电脑的主机名,如 pc1
,将它定义在 hosts 文件中就可以访问它来访问对应的 IP 地址。但在一个大型互联的网络中,我们就用到了域名的分层。
很简单,域名的分层就是我们常见的 jwc.wh.sdu.edu.cn
这种结构。比如,在你定义的主机后面加上所属组织机构的域名 pc1.group1
来表示在 group1 下的 pc1。
域名的分层是一个倒挂的树,所以又称为树形结构 。它的顶点是树的根 Root,顶点的下一层就是第一层域名,又叫 顶级域名,包括代表国家的域名如 cn
,如以及特定领域的域名如 com
(美国企业) 。
域名服务器
域名服务器就是 管理域名的主机或相应的软件。每层都会设置一个域名服务器,用于管理本层的域名。
如 根域名服务器 记录着所有一级域名服务器的 IP 地址。一般每一层的域名服务器都会配置两台以上,以提高容灾能力。
所有域名服务器都必须注册根域名服务器的 IP 地址。因为DNS根据 IP 地址检索需要从根开始顺序进行。
DNS 解析器 (Resolver)
进行 DNS 查询的主机和软件叫做 DNS 解析器。这个解析器中要注册某个域名服务器的 IP 才能对其下的域名进行查找。
DNS 的查询
DNS 的查询有两种方式。一般两种方式都会用到。递归查询是用在本地机查询本地 DNS 服务器的过程,迭代查询是本地 DNS 服务器在互联网上查找目标机的过程。
想象一个树状图,一个主机访问另一台主机,就像是蚂蚁从一个叶子访问到另一个叶子的位置。
比如小蚂蚁 a 从某个叶子上开始,想找 Z 的地址,来到叶子根部的 b 蚂蚁(DNS服务器)处,b 蚂蚁说,“你等着,我帮你打听”。
b 蚂蚁就问到了根服务器 C 蚂蚁,C 说你去问问 D 蚂蚁吧,就给了 b 蚂蚁 D 蚂蚁的地址,b 去问了 D,D 正好知道 Z 蚂蚁的地址,于是给了 b 蚂蚁。自此,终于找到了目标地址。b 最终将信息返回给 a。解析就此结束。
这个过程中:
-
a -> b 这个链路就是递归查询,因为 b 帮助了 a 进行查询。
-
b => C, b => D,这个就是迭代查询,因为 C 没有帮 b 去查,而是直接给了他一个地址去让它再去打听。
-
主机到本地 DNS 服务器的查询就属于递归查询。
-
本地 DNS 服务器向根服务器的查询就是迭代查询。
查询过程
(以下各步骤中,找到目标地址即返回,找不到会执行下一步)
- 先去本地 hosts 中找对应地址
- 再去域名解析器(缓存)中寻找映射关系
- 找 DNS 服务器问是不是配置在其下的
- DNS 服务器有没有缓存它的映射关系
- DNS 根据配置去找到根服务器或者上一级 DNS 服务器
- …