DNS 查找顺序是如何确定的?

DNS 查找顺序是如何确定的?

例如:我们已经注册了域名域名.com并在注册商服务器上添加了名称服务器记录 :
ns1.domain.com。ns2.domain.com。ns3.domain.com 。


比我们期待的域名.com。我们得到了所有 3 个名称服务器地址。1
. 哪一个服务器将被进一步请求以及为什么?
2. 区域文件中 NS 记录的顺序重要吗?
3. 它是否在任何情况下都已确定请求函数

答案1

遗憾的是,答案是“视情况而定”。所依赖的因素会因域名、所属服务器的设置方式以及您自己的本地 DNS 的设置方式而异。

首先,例如,关于返回的 NS 记录:完全可以随机化返回这些记录的顺序,因此每次请求时顺序可能会有所不同。另一方面,并​​非所有 DNS 实现都这样做,因此您很可能会得到一个静态排序的列表。关键是您无法确定。

接下来,一些 DNS 实现将并行查询每个 NS,并使用最先回复的 NS。其他 DNS 实现将查询每个 NS,在一定数量的请求中确定最快的 NS 并使用那个 NS。或者它可能只是循环。

DNS 有多个 RFC,我发现其中两个比较有用的是:

http://www.faqs.org/rfcs/rfc1912.html

http://www.faqs.org/rfcs/rfc1033.html

我意识到这是一个非答案的问题,没有任何明确的答案可以让你接受,但鉴于上述情况,确定给定域的行为的唯一真正方法就是进行测试。

答案2

我在客户端层面(例如世界各地的 ISP)见过的最常见的实现如下:

  1. 某人(例如宽带用户)要求 ISP 的 DNS 服务器解析 foo.example.com 的 A 记录。
  2. ISP 检查自己的缓存,如果该记录已被缓存且仍然被视为“新鲜的”,则立即通过缓存返回该记录。(所有 DNS 缓存都是如此工作的,这样它们就不会不必要地给相关站点的 DNS 服务器带来压力。
  3. 如果他们没有缓存该记录,或者缓存被视为“陈旧/过时”,则 ISP 知道它需要再次解析最新的记录。
  4. 现在 ISP 需要知道向哪些名称服务器查询最新记录。
  5. ISP 首先检查其缓存的该域的权威名称服务器列表(这些是 ns1.example.com、ns2.example.com 等及其 IP)。如果这些记录仍被视为最新,则跳至步骤 8。
  6. 如果缓存的名称服务器记录被视为已过期,或者没有该域的任何缓存记录,则 ISP 会查询 TLD 的根名称服务器(例如,如果是 .com 域,则查询 .com 注册中心)以获取 example.com 的最新名称服务器名称/IP 对。(您可以通过“dig @b.gtld-servers.net example.com”亲自尝试,以查看您的 TLD 的根名称服务器对您的域名的了解情况 - 如果您的域名属于常见的 com/net/etc TLD。其他 TLD 必须查询其各自的根服务器。
  7. TLD 的根域名服务器总是返回名称服务器精确顺序它们是由您指定的;没有随机化。它们还返回每个名称服务器的 IP;这被称为“GLUE”,它允许互联网解决“先有鸡还是先有蛋”的问题,即在完全不了解域名的情况下如何将名称服务器主机名解析为 IP。此外,它们中的大多数(例如最大的 com/net/etc 注册表)使用 2 天的缓存时间,这样它们就不会不断受到“域 X 的名称服务器列表是什么?”请求的困扰。这就是常识的来源:在您编辑名称服务器列表后,您必须等待 2 天,直到您可以安全地说您的新名称服务器在全球范围内为人所知。
  8. 当 ISP 知道 example.com 的名称服务器及其 IP(例如 ns1.example.com、ns2.example.com、ns3.example.com)时,ISP 现在会选择一个随机的服务器从该列表中选择并发送查询。(他们这样做很好,他们不会不必要地敲击相关站点的所有 DNS 服务器,而且他们不会总是查询第一个列出的名称服务器,从而进一步协助负载平衡。
  9. 如果 ISP 在指定的超时期限内没有收到该名称服务器的响应,它将查询列表中的另一个名称服务器。
  10. 当 ISP 收到响应时,它会将其存储在自己的本地缓存中。至于它会被缓存多长时间;任何 DNS 服务器返回的每条记录都有一个与之关联的“软过期”时间(以秒为单位),即查询客户端(例如 ISP 的 DNS 服务器)被允许缓存该记录的时间,超过这个时间,记录才会被视为“仍然可用但可能已过期,如果可能的话,现在应该进行新的查询,以确保它没有改变”。每个单独的名称服务器的“SOA”(授权起始)记录中还指定了一个“硬过期”时间(您可以通过“dig @ns1.example.com example.com -t soa”查看您的名称服务器),它为该服务器返回的所有记录指定了一个全局“硬限制”,在此之后,任何缓存都应删除其缓存记录,即使名称服务器已关闭并且无法再次查找记录。通常软到期时间为 30 分钟到 5 小时,而硬到期时间通常为 1 到 3 周。
  11. 经过这项详尽的工作后,ISP 终于获得了最新的 DNS 记录,并将其返回给查询的宽带用户,而用户并不知道这幕后发生了多么巨大的工作量!

每次查找记录时都会重复此过程。但是,只有第一个查询才能完成整个工作;此后,名称服务器 IP 将被缓存,并且对 ISP 缓存 DNS 服务器的后续查询将能够快速跳转到步骤 8。

现在,至于步骤 8 的随机化,它是在记录级别上起作用的。假设该 ISP 的宽带用户询问以下记录:

  • foo.example.com
  • 以 example.com 为例
  • www.example.com
  • MX example.com(ISP 客户不应该要求此记录,但这只是一个例子)

每条记录都将作为其自己的单独“实体”进行处理,独立缓存和查找。因此,假设订阅者和 ISP 之前从未遇到过该域,并且两者都完全没有缓存记录。查找可能如下:

  • 通过 ns1.example.com 访问 foo.example.com,然后存储在 ISP 缓存中
  • 通过 ns3.example.com 访问 example.com,然后存储在 ISP 缓存中
  • 通过 ns2.example.com 访问 www.example.com,然后存储在 ISP 缓存中
  • 通过 ns3.example.com MX example.com,然后存储在 ISP 缓存中

每当缓存记录软过期时,就会重复该过程,因此您甚至不知道该记录的后续请求是否会再次使用同一服务器。

因此,你最大的目标就是确保全部您的 DNS 服务器彼此完全同步,完美镜像每一个每台服务器的 DNS 记录。您绝不不知道 DNS 客户端将访问哪个服务器,您不能依赖任何顺序。没有这样的事。

此外,正如 Adam C 所提到的,服务器级(example.com)DNS 服务器本身可以返回 NS 记录并随机化这些记录的顺序。常规 DNS 服务器随机化其 NS 记录是很常见的,因为糟糕的 DNS 实现总是选择第一个返回的域名服务器。然而,ROOT TLD 域名服务器(前面提到过)永远不会随机化列表,而它们的列表才是解析域时真正重要的。这就是为什么最多实现从名称服务器列表中选择一个随机服务器,以避免总是访问同一个服务器并导致其过载。

好的,以上就是有关 DNS 的工作原理以及您应该记住的内容的入门知识。

  • 简而言之:将所有 DNS 服务器视为一台服务器,确保它们都能够平等地响应请求,这是你人生中的最高目标任何他们可能会被问到这个问题。

免责声明:生活中比管理 DNS 更高的目标可能可用,但单独出售,请发挥您的想象力。;-)

相关内容