域名系统 (DNS) 是 Internet 的电话簿。人类通过域名在线访问信息,例如 nytimes.com 或 espn.com。Web 浏览器通过Internet 协议 (IP)地址进行交互。DNS 将域名转换为IP 地址,因此浏览器可以加载 Internet 资源。
每台连接到 Internet 的设备都有一个唯一的 IP 地址,其他机器使用该地址来查找该设备。DNS 服务器无需人类记忆 IP 地址,例如 192.168.1.1(在 IPv4 中),或更复杂的较新的字母数字 IP 地址,例如 2400:cb00:2048:1::c629:d7a2(在 IPv6 中)。

DNS如何工作?
DNS 解析过程涉及将主机名(例如 www.example.com)转换为计算机友好的 IP 地址(例如 192.168.1.1)。互联网上的每台设备都有一个 IP 地址,该地址是查找合适的互联网设备所必需的——就像街道地址用于查找特定的家一样。当用户想要加载网页时,必须在用户在其 Web 浏览器 (example.com) 中键入的内容与定位 example.com 网页所需的机器友好地址之间进行转换。
为了了解 DNS 解析背后的过程,了解 DNS 查询必须在其之间传递的不同硬件组件非常重要。对于 Web 浏览器,DNS 查找发生在“幕后”,除了初始请求外,不需要用户计算机的交互。
加载网页涉及 4 个 DNS 服务器:
- DNS 递归器- 递归器可以被认为是一个图书馆员,他被要求去图书馆的某个地方寻找一本特定的书。DNS 递归器是一种服务器,旨在通过 Web 浏览器等应用程序接收来自客户端计算机的查询。通常,递归器随后负责发出额外的请求以满足客户端的 DNS 查询。
- 根名称服务器-根服务器是将人类可读的主机名转换(解析)为 IP 地址的第一步。它可以被认为是图书馆中指向不同书架的索引 - 通常它用作对其他更具体位置的参考。
- TLD 名称服务器- 顶级域服务器 ( TLD ) 可以被认为是图书馆中特定的书架。此名称服务器是搜索特定 IP 地址的下一步,它托管主机名的最后一部分(在 example.com 中,TLD 服务器是“com”)。
- 权威名称服务器- 这个最终的名称服务器可以被认为是书架上的字典,其中可以将特定名称翻译成它的定义。权威名称服务器是名称服务器查询的最后一站。如果权威名称服务器有权访问所请求的记录,它会将所请求主机名的 IP 地址返回给发出初始请求的 DNS Recursor(图书管理员)。
权威 DNS 服务器和递归 DNS 解析器有什么区别?
这两个概念都指的是与 DNS 基础设施不可分割的服务器(服务器组),但每个都执行不同的角色并位于 DNS 查询管道内的不同位置。考虑差异的一种方法是递归解析器位于 DNS 查询的开头,而权威名称服务器位于末尾。
递归 DNS 解析器
递归解析器是响应来自客户端的递归请求并花时间跟踪DNS 记录的计算机。它通过发出一系列请求来完成此操作,直到它到达所请求记录的权威 DNS 名称服务器(如果未找到记录,则超时或返回错误)。幸运的是,递归 DNS 解析器并不总是需要发出多个请求来跟踪响应客户端所需的记录。缓存是一个数据持久性过程,它通过在 DNS 查找中更早地提供请求的资源记录来帮助缩短必要的请求。
权威DNS服务器
简而言之,权威 DNS 服务器是实际保存并负责 DNS 资源记录的服务器。这是位于 DNS 查找链底部的服务器,它将响应查询的资源记录,最终允许发出请求的 Web 浏览器到达访问网站或其他 Web 资源所需的 IP 地址。权威名称服务器可以满足来自其自身数据的查询,而无需查询其他来源,因为它是某些 DNS 记录的最终真实来源。
值得一提的是,在查询是针对 foo.example.com 或blog.cloudflare.com等子域的情况下,将在权威名称服务器之后的序列中添加一个额外的名称服务器,该名称服务器负责存储子域的CNAME 记录.
许多 DNS 服务与 Cloudflare 提供的服务之间存在关键区别。不同的 DNS 递归解析器(例如 Google DNS、OpenDNS)和提供商(例如 Comcast)都维护着 DNS 递归解析器的数据中心安装。这些解析器允许通过 DNS 优化计算机系统的优化集群进行快速轻松的查询,但它们与 Cloudflare 托管的名称服务器有根本的不同。
Cloudflare 维护基础设施级名称服务器,这些名称服务器是互联网运行不可或缺的一部分。一个关键示例是Cloudflare 部分负责托管的f-root 服务器网络。F-root 是负责每天数十亿互联网请求的根级 DNS 名称服务器基础结构组件之一。我们的Anycast 网络使我们能够在不中断服务的情况下处理大量 DNS 流量。
DNS查找的步骤是什么?
在大多数情况下,DNS 关注的是域名被转换为适当的 IP 地址。要了解此过程的工作原理,它有助于跟踪 DNS 查找的路径,因为它从 Web 浏览器经过 DNS 查找过程,然后再返回。让我们看一下步骤。
注意:DNS 查找信息通常会在查询计算机中本地缓存或在 DNS 基础结构中远程缓存。DNS 查找通常有 8 个步骤。缓存 DNS 信息时,会跳过 DNS 查找过程中的步骤,从而使其更快。下面的示例概述了没有缓存时的所有 8 个步骤。
DNS 查询的 8 个步骤:
- 用户在 Web 浏览器中键入“example.com”,查询进入 Internet 并由 DNS 递归解析器接收。
- 然后解析器查询 DNS 根名称服务器 (.)。
- 然后,根服务器使用顶级域 (TLD) DNS 服务器(例如 .com 或 .net)的地址响应解析器,该服务器存储其域的信息。在搜索 example.com 时,我们的请求指向 .com TLD。
- 然后解析器向 .com TLD 发出请求。
- 然后,TLD 服务器使用域名称服务器 example.com 的 IP 地址进行响应。
- 最后,递归解析器向域的名称服务器发送查询。
- 然后 example.com 的 IP 地址从名称服务器返回到解析器。
- 然后 DNS 解析器使用最初请求的域的 IP 地址响应 Web 浏览器。
- 浏览器向 IP 地址发出HTTP请求。
- 该 IP 上的服务器返回要在浏览器中呈现的网页(步骤 10)。
什么是 DNS 解析器?
DNS 解析器是 DNS 查找的第一站,它负责处理发出初始请求的客户端。解析器启动一系列查询,最终将 URL 转换为必要的 IP 地址。
注意:典型的未缓存 DNS 查找将涉及递归和迭代查询。
区分递归 DNS查询和递归 DNS 解析器非常重要。查询是指向需要解析查询的 DNS 解析器发出的请求。DNS 递归解析器是接受递归查询并通过发出必要请求来处理响应的计算机。
DNS 查询的类型有哪些?
在典型的 DNS 查找中,会发生三种类型的查询。通过使用这些查询的组合,DNS 解析的优化过程可以减少行进的距离。在理想情况下,缓存记录数据将可用,允许 DNS 名称服务器返回非递归查询。
3 种类型的 DNS 查询:
- 递归查询- 在递归查询中,DNS 客户端要求 DNS 服务器(通常是 DNS 递归解析器)以请求的资源记录或解析器找不到记录时的错误消息响应客户端。
- 迭代查询- 在这种情况下,DNS 客户端将允许 DNS 服务器返回它可以返回的最佳答案。如果被查询的 DNS 服务器与查询名称不匹配,它将返回一个对域名称空间较低级别的权威 DNS 服务器的引用。然后,DNS 客户端将对引用地址进行查询。此过程将继续使用查询链中的其他 DNS 服务器,直到发生错误或超时。
- 非递归查询- 这通常会在 DNS 解析器客户端向 DNS 服务器查询它有权访问的记录时发生,因为它对记录具有权威性,或者记录存在于其缓存中。通常,DNS 服务器会缓存 DNS 记录,以防止额外的带宽消耗和上游服务器的负载。
什么是 DNS 缓存?DNS缓存发生在哪里?
缓存的目的是将数据临时存储在一个位置,从而提高数据请求的性能和可靠性。DNS 缓存涉及将数据存储在更靠近请求客户端的位置,以便可以更早地解析 DNS 查询,并且可以避免 DNS 查找链下游的额外查询,从而缩短加载时间并减少带宽/CPU 消耗。DNS 数据可以缓存在多个位置,每个位置都将存储 DNS 记录一段由生存时间 (TTL) 确定的时间。
浏览器 DNS 缓存
现代 Web 浏览器默认设计为在一定时间内缓存 DNS 记录。这里的目的很明显;DNS 缓存越靠近 Web 浏览器,必须采取的处理步骤就越少,以便检查缓存并向 IP 地址发出正确的请求。当请求 DNS 记录时,浏览器缓存是为请求的记录检查的第一个位置。
在 Chrome 中,您可以通过转到 chrome://net-internals/#dns 查看 DNS 缓存的状态。
操作系统 (OS) 级别的 DNS 缓存
操作系统级别的 DNS 解析器是 DNS 查询离开您的计算机之前的第二个也是最后一个本地站点。操作系统内部旨在处理此查询的进程通常称为“存根解析器”或 DNS 客户端。当存根解析器从应用程序收到请求时,它首先检查自己的缓存以查看是否有记录。如果没有,它会在本地网络外部向 Internet 服务提供商 (ISP) 内部的 DNS 递归解析器发送一个 DNS 查询(设置了递归标志)。
当 ISP 内部的递归解析器接收到 DNS 查询时,与之前的所有步骤一样,它还将检查请求的主机到 IP 地址的转换是否已存储在其本地持久层内。
递归解析器还具有其他功能,具体取决于其缓存中的记录类型:
- 如果解析器没有A 记录,但有权威名称服务器的NS 记录,它将直接查询这些名称服务器,绕过 DNS 查询中的几个步骤。此快捷方式可防止从根和 .com 名称服务器(在我们搜索 example.com 中)进行查找,并有助于更快地解析 DNS 查询。
- 如果解析器没有 NS 记录,它将向 TLD 服务器(在我们的例子中为 .com)发送查询,跳过根服务器。
- 万一解析器没有指向 TLD 服务器的记录,它将查询根服务器。此事件通常在清除 DNS 缓存后发生。
