![了解 DNS 域查找机制](https://linux22.com/image/592496/%E4%BA%86%E8%A7%A3%20DNS%20%E5%9F%9F%E6%9F%A5%E6%89%BE%E6%9C%BA%E5%88%B6.png)
促使我尝试解开这个过程的具体查询是:
assets.example.com
如果父域名example.com
已经解析,那么子域名(如 )的 DNS 查找速度是否会更快?
根据我的(天真的)理解,基本流程将域名转换为 IP 地址的方法非常简单。十三台根服务器知道如何解析像com
和 这样的顶级域名net
,而它们的地址实际上是硬编码在网络硬件中的。在查找 的情况下example.com
,我们的本地 DNS 服务器(可能是我们的路由器)会向其中一个根服务器查询相关域,并将它引导至 的顶级名称服务器com
。然后,它会询问该名称服务器是否知道如何解析example
。如果知道,我们就完成了,如果不知道,我们将被引导至另一台服务器。此过程中的某些服务器可能正在缓存,因此在一段时间内,我们的本地路由器现在就可以立即知道在哪里查找com
和example
。
但我还是不太明白。
- 我知道还有其他中间 DNS 服务器,例如 ISP 提供的服务器。在什么时候查询它们?
- 如果
com
我们所指的 TLD 名称服务器不知道如何解析example
,那么是否可以说这就是行的末尾:example.com
无法解析? - 当我注册域名并配置名称服务器时,我实际上是在编辑该 TLD 的名称服务器使用的数据库中我的子域名的一组 NS 记录吗?注册商本身是否维护“代理”名称服务器?
维基百科解释说,一些 DNS 服务器将缓存与递归查询实现相结合,这使得它们能够提供缓存命中并可靠地解决缓存未命中问题。我不明白这些服务器是如何被查询的,也不明白解析算法是如何(甚至广义上)工作的。com
例如,所有权威名称服务器都是精确镜像,还是解析器必须依次尝试每个服务器?
回想我最初的问题,我可能会非常谨慎地回答“否”,假设 A 记录都在同一个名称服务器上。如果有人能帮我解答我的无知,我将不胜感激!
答案1
如果父域 example.com 已经解析,那么对子域(例如 assets.example.com)的 DNS 查找是否会更快?
假设场景中有一个缓存服务器,是的。这是因为为了找到 example.com. 中任何内容的 A 记录,必须知道 example.com. 的名称服务器。当发出对 assets.example.com. 的请求时,example.com. 的名称服务器应该已被缓存,因此唯一的查询是针对 assets.example.com. 本身。
我知道还有其他中间 DNS 服务器,例如 ISP 提供的服务器。在什么时候查询它们?
这些通常是缓存或递归名称服务器。它们会为您完成繁重的工作(遍历树的多个请求),然后缓存结果以加快对同一名称的后续查询。
例如,所有权威的 com 名称服务器是否都是精确的镜像,或者解析器是否必须依次尝试每一个?
是的,它们包含相同的信息。解析器只需找到一个实际有效的即可。
如果我们所引用的 com TLD 名称服务器不知道如何解析 example,那么是否可以说这就是行的末尾:example.com 无法解析?
如果 .com. 名称服务器响应并表示 example.com. 不存在,则结果为该名称不存在。如果 .com. 名称服务器不响应查询,则解析器应尝试其他 .com. 名称服务器。
当我注册域名并配置名称服务器时,我实际上是在编辑该 TLD 的名称服务器使用的数据库中我的子域名的一组 NS 记录吗?注册商本身是否维护“代理”名称服务器?
正确。注册域名时,您需要提供 NS 记录(如果需要,还需要提供一些 A 记录)以插入父域。注册商不一定自己运行这些名称服务器,但具有修改这些名称服务器数据库的机制。
答案2
最有可能的是,您的计算机配置为使用 ISP 的 DNS 服务器。这可能是一个缓存名称服务器。这意味着它将在一段时间内(通常是 TTL)缓存命中(在某些情况下是未命中)。如果您查询此名称服务器的缓存中的某些内容,那么您就大功告成了。它会告诉您 IP。
如果未命中,它将查询该域的顶级名称服务器(com、net、org 等)。在此示例中,它将询问 COM 在哪里可以找到 EXAMPLE.COM,COM 将使用 EXAMPLE.COM 域的权威名称服务器地址 (ip) 进行响应。然后,它将向该名称服务器询问 EXAMPLE.COM 的 IP 是什么,并告知缓存名称服务器,缓存名称服务器将告诉您(这是一条 A 记录)。此外,它还会缓存该 IP,以防以后有人询问。
如果您正在寻找 ASSETS.EXAMPLE.COM,也会发生同样的事情,但是当您找到 EXAMPLE.COM 的权威名称服务器时,您可以直接向它询问 ASSETS.EXAMPLE.COM,它会回复 A 记录 (ip)、CNAME 或 NS 记录(还有其他类型,如 ipv6 的 AAAA、邮件的 MX……但这对于本例来说已经足够了)。如果它给您一个 A 记录,您就大功告成了。您有一个 IP。如果它给您一个 NS,则意味着该其他服务器是 ASSETS.EXAMPLE.COM 的权威服务器,您应该去问那个人 IP 是多少。
CNAME 是另一种类型,它重新启动整个过程,并且实际上在顶点记录(如 example.com)上不可用。