理解DNS查找机制

13

导致我尝试剖析这个过程的具体查询是:

如果父域名example.com已经被解析,那么对子域名assets.example.com进行DNS查找是否会更快?

按照我(天真的)的理解,将域名转换为IP地址的基本过程相当简单。13个根服务器的地址已经硬编码在网络硬件中,它们知道如何解析像comnet这样的顶级域。对于查找example.com,我们的本地DNS服务器(可能是路由器)向其中一个根服务器询问在哪里可以找到com顶级名称服务器。然后它询问结果名称服务器是否知道如何解析example。如果它知道,我们就完成了,否则我们就会传递到另一个服务器。此过程中的每个名称服务器都可能具有缓存,因此一段时间内,我们的本地路由器现在会轻松找到comexample的位置,而com服务器将知道在哪里查找example

但是,我还是不太明白。

  • 我知道还有其他中间DNS服务器,例如由ISP提供的服务器。在什么时候会查询它们?
  • 如果com顶级域名服务器不知道如何解析example,那么它如何确定要检查哪些其他名称服务器?或者这是否意味着无法解析example.com
  • 当我注册一个域名并配置名称服务器时,我是否实际上正在编辑该TLD的名称服务器数据库中我的子域名的一组NS记录?

维基百科解释说,一些DNS服务器将缓存与递归查询实现相结合,从而使它们能够提供缓存命中并可靠地解析缓存未命中。我不明白这些服务器是如何被查询的,或者即使是广泛意义上的解析算法是如何工作的。

回顾我的初始问题,我可能会尝试回答“否”,假设A记录都在同一个名称服务器上。这个回答准确吗?

1个回答

24

首先,需要澄清的误解:

  • 根提示(13个根域名服务器的名称和IP地址)几乎从未“硬编码在网络硬件中”。例如路由器等网络硬件可能会有内置的DNS解析器,如果它恰好也有DHCP服务器,但如果有的话,通常只是一个转发解析器,如果不知道答案,则将查询传递给上游名称服务器(从ISP获取)。
  • 由ISP提供的名称服务器通常不充当“中间DNS服务器”。您可以使用自己的名称服务器(例如企业名称服务器或在计算机上安装BIND),或使用ISP提供的名称服务器。无论哪种情况,您选择的任何名称服务器都将负责从开始到结束的递归解析过程。例外是前面提到的转发名称服务器。
  • 如果com TLD名称服务器不知道如何解析example,则它不会查找其他要检查的名称服务器。它本身就是要检查的名称服务器。它要么知道example,要么example不存在。

回答你的问题是肯定的。如果名称服务器已经解析了example.com(并且该结果仍然在其缓存中有效),那么它能够更快地解析assets.example.com

递归解析过程与您所描述的大致相同:首先找到.(根)的命名服务器,然后找到com的命名服务器等等...只有递归解析器实际上并不请求comexample.com的命名服务器。它实际上每次都会询问assets.example.com。根服务器不会给出该问题的答案(它们不知道任何关于assets.example.com的信息),但至少可以提供有关com的命名服务器的转介。类似地,com的命名服务器也不会回答这个问题(它们也不知道),但可以向example.com的命名服务器提供转介。根据assets.example.com是否进一步委派到其他命名服务器或在与example.com相同的区域中进行设置,example.com的命名服务器可能知道该问题的答案,也可能不知道。因此,递归解析器将收到最终答案或另一个转介。


1
因此,性能的好处在于客户端已经知道一个名字服务器,它知道如何解析example.com,因此它可以直接请求assets.example.com。 - crenshaw-dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接