DNS 层次结构中的哪里可以进行缓存以及如何转发查询?

DNS 层次结构中的哪里可以进行缓存以及如何转发查询?

要将主机名解析为其 IP 地址,可能需要查询多个 DNS 服务器。假设没有发生缓存,则查询顺序为:发出请求的服务器(客户端)、递归 DNS、根 DNS、TLD DNS,最后是权威名称服务器。

我的顺序对吗?请求是否被转发,还是服务器仅回复客户端应联系的下一级服务器的 IP 地址?例如,递归名称服务器是否在根服务器上进行实际查询,还是仅传递根服务器的 IP 地址?我猜是第一个用于缓存目的的。此外,缓存可以在哪些阶段发生,例如,根服务器是否会从 TLD 服务器缓存响应?由于只有 13 个唯一的根服务器,那么拥有该级别而不是直接转到 TLD 服务器有什么意义呢?

答案1

这是一个很深奥的话题,这只是表面,但请考虑一下有几种方法可以回答查询。

一般来说,可用的查询类型将决定客户端需要发出多少个请求来解析类似路径a.b.c.com

对于递归解析,客户端会向服务器查询一次,以获取所要查找的全名。服务器将处理对根服务器的查询,然后解析名称服务器CB然后解析B主机名A。然后本地服务器将返回单身的對客戶的回覆。

对于非递归解析,客户端将发送请求,询问 的名称服务器C.com,然后向该服务器查询 的名称服务器B.C.com,然后向这些服务器查询主机A。这才是我们一直想要的实际答案。但在本例中,客户必须进行 3 次单独查询为拿到它,为实现它。

有一个相关概念“转发器”,其中本地解析器可能会将未知(非本地)查询转发到另一台服务器进行解析。本地服务器和上游解析器之间的交互可能是递归的,也可能不是,但结果会作为单个响应发送回客户端,因此从客户端的角度来看是递归的。

现在谈到缓存的话题,从网络性能的角度来看,缓存越靠近客户端,其价值就越大。尽管如此,但权衡是,如果缓存太近,并且代表一组不太多样化的缓存答案,则缓存可能不会被大量使用。将缓存放置在上游一层或两层,以便缓存代表更多用户的组合结果,从而更有可能获得答案,这可能是有价值的。

答案2

我的顺序正确吗?

一般顺序是的,但不是直线:根服务器不会将您的查询转发到其他任何地方,它会通过引用响应反弹回解析器(告诉解析器到其他地方查询)。TLD 服务器和域服务器也是如此。

请求是否被转发,还是服务器仅回复客户端应该联系的下一级服务器的 IP 地址?

这两种行为都会发生,但是发生的地方不同。

例如,递归名称服务器是否在根服务器上进行实际查询,还是仅传递根服务器的 IP 地址?

递归服务器执行实际查询。这实际上是使其成为递归服务器的原因:在接受客户端的查询后,它会自行进行进一步查询,直到可以返回最终结果。(这是因为在您的操作系统上运行的客户端只是一个存根解析器,不具备所有必要的功能。)

但是,根/TLD/域服务器不是递归的——它们只对它们有权限的域进行响应,对其余域只提供重定向(引荐)。它们永远不会自行进行进一步查询。

此外,缓存可以在哪些阶段发生,例如根服务器是否会有来自 TLD 服务器的缓存响应?

缓存发生在发送查询和接收回复的系统上。这意味着只有递归解析器执行缓存,因为它们从其他人那里接收可缓存的信息。

另一方面,根/TLD/域服务器从不处理递归查询——它们不查询任何其他内容,因此它们不需要缓存任何内容。(它们只回答它们所权威性关于。)

由于只有 13 个唯一的根服务器,那么拥有该级别而不是直接转到 TLD 服务器有什么意义呢?

每个人的解析器如何知道 TLD 服务器在哪里?

请记住,没有“唯一”的 TLD 服务器。每个 TLD 都有对应的 TLD 服务器 – 例如,comTL​​D 有一组服务器,TLDeu有另一组服务器。实际上有数百个 TLD,因此静态列表是行不通的。

DNS 根简化了这个问题——不再列出所有 TLD 及其服务器,而是只有一个根域及其服务器,这会导致初始列表小得多,并且会发生变化非常很少,因此解析器软件实际上可以包含它的副本。大多数递归解析器都包含“根提示”的副本。

(另请注意,有 13 个根服务器地址,因为在早期,一个地址意味着一个主机,但现在情况已不再如此 - 互联网支持任播路由,因此实际上几乎每个地址都对应数百个唯一实例。)

相关内容