文章目录
什么是DNS域名解析
我们首先要了解域名和IP地址的区别。IP地址是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。
但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的IP地址 ,这样对于我们日常工作生活访问不同网站是很困难的。基于这种背景,人们在IP地址的基础上又发展出了一种更易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比IP地址更易被识别和记忆 ,逐渐代替IP地址成为互联网用户进行访问互联的主要入口。这种符号化标识就是域名 。
域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的IP地址,不能直接读取域名 。因此要想达到访问效果,就需要将域名翻译成IP地址。而DNS域名解析承担的就是这种翻译效果。
DNS(Domain Name System)域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS 要解决的是域名和 IP 地址的映射问题
。
DNS服务器
DNS 服务器自底向上可以依次分为以下几个层级(所有 DNS 服务器都属于以下四个类别之一):
- 根 DNS 服务器。根 DNS 服务器提供 TLD 服务器的 IP 地址。目前世界上只有 13 组根服务器,我国境内目前仍没有根服务器。
- 顶级域 DNS 服务器(TLD 服务器)。顶级域是指域名的后缀,如com、org、net和edu等。国家也有自己的顶级域,如uk、fr和ca。TLD 服务器提供了权威 DNS 服务器的 IP 地址。
- 权威 DNS 服务器。在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址。
- 本地 DNS 服务器。每个 ISP(互联网服务提供商)都有一个自己的本地 DNS 服务器。当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,它起着代理的作用,并将该请求转发到 DNS 层次结构中。严格说来,不属于 DNS 层级结构。
世界上并不是只有 13 台根服务器,这是很多人普遍的误解,网上很多文章也是这么写的。实际上,现在根服务器数量远远超过这个数量。最初确实是为 DNS 根服务器分配了 13 个 IP 地址,每个 IP 地址对应一个不同的根 DNS 服务器。然而,由于互联网的快速发展和增长,这个原始的架构变得不太适应当前的需求。为了提高 DNS 的可靠性、安全性和性能,目前这 13 个 IP 地址中的每一个都有多个服务器,截止到 2023 年底,所有根服务器之和达到了 600 多台,未来还会继续增加
DNS域名解析流程
DNS 的查询解析过程分为两种模式:
- 迭代
- 递归
下图是实践中常采用的方式,从请求主机到本地 DNS 服务器的查询是递归的,其余的查询是迭代的。
现在,主机cis.poly.edu想知道gaia.cs.umass.edu的 IP 地址。假设主机cis.poly.edu的本地 DNS 服务器为dns.poly.edu,并且gaia.cs.umass.edu的权威 DNS 服务器为dns.cs.umass.edu。
-
首先,主机cis.poly.edu向本地 DNS 服务器dns.poly.edu发送一个 DNS
-
本地 DNS 服务器dns.poly.edu检查本机缓存,发现并无记录,也不知道gaia.cs.umass.edu的 IP地址该在何处,不得不向根服务器发送请求。
-
根服务器注意到请求报文中含有edu顶级域,因此告诉本地 DNS,你可以向edu的 TLD DNS 发送请求,因为目标域名的 IP
地址很可能在那里。
-
本地 DNS 获取到了edu的 TLD DNS 服务器地址,向其发送请求,询问gaia.cs.umass.edu的 IP 地址。
-
edu的 TLD DNS 服务器仍不清楚请求域名的 IP 地址,但是它注意到该域名有umass.edu前缀,因此返回告知本地
DNS,umass.edu的权威服务器可能记录了目标域名的 IP 地址。
-
这一次,本地 DNS 将请求发送给权威 DNS 服务器dns.cs.umass.edu。
-
终于,由于gaia.cs.umass.edu向权威 DNS 服务器备案过,在这里有它的 IP 地址记录,权威 DNS 成功地将 IP
地址返回给本地 DNS。
-
最后,本地 DNS 获取到了目标域名的 IP 地址,将其返回给请求主机。
除了迭代式查询,还有一种递归式查询如下图,具体过程和上述类似,只是顺序有所不同。
除了迭代式查询,还有一种递归式查询如下图,具体过程和上述类似,只是顺序有所不同
另外,DNS 的缓存位于本地 DNS 服务器。由于全世界的根服务器甚少,只有 600 多台,分为 13 组,且顶级域的数量也在一个可数的范围内,因此本地 DNS 通常已经缓存了很多 TLD DNS 服务器,所以在实际查找过程中,无需访问根服务器。根服务器通常是被跳过的,不请求的。这样可以提高 DNS 查询的效率和速度,减少对根服务器和 TLD 服务器的负担。