DNS 工作原理(漫画版):
https://howdns.works/ep1/
域名系统(DNS,Domain Name System)是互联网的电话簿。人们通过例如google.com或baidu.com等玉面在线访问信息。Web 浏览器通过互联网协议(IP)地址进行交互。DNS 将域名转换为 IP 地址,以便浏览器能够加载互联网资源。
连接到 Internet 的每个设备都有一个唯一 IP 地址,其它计算机可使用该 IP 地址查找此设备。DNS 服务器使得人们无需存储例如192.168.1.1(IPv4)等 IP 地址或更复杂的较新字母数字 IP 地址,例如2400:cb00:2048:1::c629:d7a2(IPv6).
DNS 解析过程涉及将主机名(如www.example.com)转换为计算机友好的 IP 地址(如192.168.1.1)。Internet 上的每个设备都被分配了一个 IP 地址,必须有该地址才能找到相应的 Internet 设备,就像使用街道地址来查找特定住所一样。当用户想要加载网页时,用户在 Web 浏览器中键入的内容(example.com)与查找example.com网页所需的机器友好地址之间必须进行转换。
-
DNS 解析器:该解析器可被视为被要求去图书馆的某个地方查找特定图书的图书管理员。DNS 解析器是一种服务,皆在通过 Web 浏览器等应用程序接收客户端计算机的查询。然后,解析器一般负责发出其它请求,以便满足客户端的 DNS 查询。
-
根域名服务器:根域名服务器是将人类可读的主机名转换(解析)为 IP 地址的第一步。可将其视为指向不同书架的图书馆中的索引(一般其作为对其它更具体位置的引用)。
-
TLD名称服务器:顶级域名服务器(TLD:top-level domain)可看作是图书馆中一个特殊的书架。这个域名服务器是搜索特定 IP 地址的下一步,其上托管了主机名的最后一部分(在
example.com中,TLD 服务器为com) -
权威性域名服务器:可将这个最终域名服务器视为书架上的字典,其中特定名称可被转换成其定义。权威性域名服务器是域名服务器查询中的最后一站。如果权威性域名服务器能够访问请求的记录,则其会将已请求主机名的 IP 地址返回给发出初始请求的 DNS 解析器。
这两个概念都是指 DNS 基础设施不可或缺的服务器(服务器组),但各自担当不同的角色,并且位于 DNS 查询管道内的不同位置。考虑二者差异的一种方式是,递归解析器位于 DNS 查询的开头,而权威性域名服务器位于末尾。
递归解析器是响应客户端递归请求并花时间追踪 DNS 记录的计算机。它通过发出一系列请求来实现此目的,直到到达所请求记录的权威性 DNS 服务器(如果为找到记录,则超时或返回错误)。幸运的是,递归 DNS 解析器并不总是需要发出多个请求来跟踪响应客户端所需的记录。缓存是一种数据持久化过程,可通过在 DNS 查找的早期提供所请求的资源记录来帮助缩短必要的请求。
权威性 DNS 服务器是实际持有并负责 DNS 资源记录的服务器。这是位于 DNS 查找链底部的服务器,其将使用所查询的资源记录进行响应,从而最终允许发出请求的 Web 浏览器达到访问网站或其它 Web 资源所需的 IP 地址。权威性域名服务器从自身数据满足查询需求,无需查询其它来源,因为这是某些 DNS 记录的最终真实来源。
值得一提的是,在查询对象为子域(foo.example.com 或 blog.cloudflare.com)的情况下,将向权威性域名服务器之后的序列添加一个附加域名服务器,其负责存储该子域的 CNAME 记录(当您需要将域名指向另一个域名,再由另一个域名提供IP地址时,就需要添加 CNAME 记录)。
大多数情况下,DNS 与正被转换为响应 IP 地址的域名有关。了解此过程的工作方式,对于在 DNS 查找从 Web 浏览器经过 DNS 查找过程然后再返回时,跟踪 DNS 查找的路径时会有所帮助。
通常,DNS 查找信息将缓存在本地计算机内,或者远程缓存在 DNS 基础设施内。DNS 查找通常有 8 个步骤。缓存 DNS 信息时,将从 DNS 查找过程中跳过一些步骤,从而使得该过程更快。
-
用户在 Web 浏览器中键入
example.com,查询传输到 Internet 中,并被 DNS 递归解析器接收。 -
接着,解析器查询 DNS 根域名服务器
.。 -
然后,根服务器使用存储其域信息的顶级域(TLD) DNS 服务器(如
.com或.net)的地址响应该解析器。在搜索example.com时,我们的请求指向.comTLD。 -
然后,解析器向
.comTLD 发出请求。 -
TLD 服务器随后使用该域的域名服务器
example.com的 IP 地址进行响应。 -
最后,递归解析器将查询发送到域的域名解析器。
-
example.com的 IP 地址而后从域名服务器返回解析器。 -
然后 DNS 解析器使用最初请求的域的 IP 地址响应 Web 浏览器。
当 DNS 查询的这 8 个步骤返回example.com的 IP 地址后,浏览器便能发出对该网页的请求。
-
浏览器向该 IP 地址发出 HTTP 请求。
-
服务器响应。
DNS 解析器是 DNS 查找的第一站,其负责与发出初始请求的客户端打交道。解析器启动查询序列,最终使 URL 转换为必要的 IP 地址。
典型的未缓存 DNS 查找将涉及到递归查询和迭代查询。
注意:务必区分递归 DNS 查询和递归 DNS 解析器。该查询是指向需要解析该查询的 DNS 解析器发出的请求。而 DNS 递归解析器是一种计算机,其接收递归查询并通过发出必要的请求来处理响应。
典型 DNS 查找中会出现三种类型的查询。通过组合使用这些查询,优化的 DNS 解析过程可缩短传输距离。在理想情况下,可以使用缓存的记录数据,从而使 DNS 域名服务器能够返回非递归查询。
-
递归查询:在递归查询中,DNS 客户端要求 DNS 服务器(一般为 DNS 递归解析器)将使用所请求的资源记录响应客户端,或者如果解析器无法找到该记录,则返回错误信息。
-
迭代查询:在这种情况下,DNS 客户端将允许 DNS 服务器返回其能够给出的最佳应答。如果所查询的 DNS 服务器与查询名称不匹配,则其将返回对较低级别域名空间具有权威性的 DNS 服务器的引用。然后,DNS 客户端将对引用地址进行查询。此过程继续使用查询链中的其它 DNS 服务器,直至发生错误或超时为止。
-
非递归查询:当 DNS 解析器客户端查询 DNS 服务器以获取其有权访问的记录时,通常会进行此查询,因为其对该记录具有权威性,或者该记录存在于其缓存内。DNS 服务器通常会缓存 DNS 记录,以防止更多带宽消耗和上游服务器上的负载。
缓存的目的是将数据临时存储在某个位置,从而提高数据请求的性能和可靠性。DNS 高速缓存涉及将数据存储在更靠近请求客户端的位置,以便能够更早地解析 DNS 查询,并且能够避免在 DNS 查找链中进一步向下的额外查询,从而缩短加载时间并减少带宽/CPU消耗。DNS 数据可缓存到各种不同的位置上,每个位置均将存储 DNS 记录并保存由生存时间(TTL)决定的一段时间。
生存时间 (TTL) 是指数据包在被路由器丢弃之前可存在于网络内部的时间或“跃点”数。TTL 还用于其他上下文中,包括 CDN 缓存和 DNS 缓存。
现代 Web 浏览器设计为默认将 DNS 记录缓存一段时间。目的很明显,越靠近 Web 浏览器进行 DNS 缓存,为检查缓存并向 IP 地址发出正确请求而采取的处理步骤就越小。发出对 DNS 记录的请求时,浏览器缓存是针对所请求的记录而检查的第一个位置。
在 Chrome 浏览器中,您可以转到chrome://net-internals/#dns查看 DNS 缓存的状态。
操作系统级 DNS 解析器是 DNS 查询离开您计算机前的第二站,也是本地最后一站。操作系统内处理此查询的过程通常称为“存根解析器”或 DNS 客户端。当存根解析器获取来自某个应用程序的请求时,其首先检查自己的缓存,以便查看是否有此记录。如果没有,则将本地网络外部的 DNS 查询(设置递归标记)发送到 Internet 服务提供商(ISP)内部的 DNS 递归服务器。
当 ISP 内的递归解析器收到 DNS 查询后,其还将查看所请求的主机到 IP 地址转换是否已经存储在其本地持久性层中。
根据其缓存中具有的记录类型,递归解析器还具有其它功能:
- 如果解析器没有 A 记录,但确实有针对权威性域名服务器的 NS 记录,则其将直接查询这些域名服务器,从而绕过 DNS 查询中的几个步骤。此快捷方式可防止从根和
.com域名服务器(对example.com的搜索)进行查找,并且有助于更快地解析 DNS 查询。
NS 代表 nameserver(域名服务器)。基本上,NS 记录告诉互联网可从哪里找到域的 IP 地址。
-
如果解析器没有 NS 记录,它会向 TLD 服务器(本例中为
.com)发送查询,从而跳过根服务器。 -
如果解析器没有指向 TLD 服务器的记录,其将查询根服务器。这种情况通常在清除了 DNS 高速缓存后发生。




