DNS 缓存 - 迭代与递归

DNS 缓存 - 迭代与递归

在迭代 DNS 架构中,本地 DNS 服务器具有缓存,并且大多数情况下可以跳过联系根服务器和 TLD 服务器。

在递归模式中,本地 DNS 服务器联系一个 DNS 服务器,该服务器以递归方式获取结果并使用请求的资源进行回复。

从缓存的角度来看,迭代 DNS 和递归 DNS 之间有什么区别?

本地DNS服务器在递归架构中还能走捷径吗?

答案1

从缓存的角度来看,迭代 DNS 和递归 DNS 之间有什么区别?

没有区别。权威服务器的生存时间 (TTL) 以及本地策略将指示记录将在缓存中保留多长时间以及从缓存中提供多长时间。

本地DNS服务器在递归架构中还能走捷径吗?

如果本地 DNS 不是仅转发 DNS,那么答案是肯定的,而且这种情况总是会发生。一旦您知道如何获取特定域的答案,当信息在缓存中时,您就不会再一路返回根目录。数据可能会从缓存中删除,因为原始 TTL 已过期,或者因为本地配置对缓存大小或 TTL 设置了限制。例如,bind这将是max-cache-ttl

答案2

目前有一份关于 DNS 术语的规范文档:

RFC 8499 又名 BCP 219

以下是其相关定义,略作删节和重新排序:

  • “递归解析器:以递归模式运行的解析器。[..][RFC4697] 试图区分递归解析器和迭代解析器。”

  • “递归模式:服务器的一种解析模式,它接收 DNS 查询并从本地缓存响应这些查询或将查询发送到其他服务器以获得原始查询的最终答案。”

  • “迭代解析:名称服务器可能会收到只能由其他服务器回答的查询。处理此问题的两种通用方法是“递归”,其中第一个服务器代表客户端在另一台服务器上进行查询,以及“迭代”,其中服务器将客户端引至另一台服务器并让客户端在那里进行查询。(请参阅 [RFC1034] 的第 2.3 节。)

    In iterative resolution, the client repeatedly makes non-recursive
    queries and follows referrals and/or aliases.  The iterative
    resolution algorithm is described in Section 5.3.3 of [RFC1034]."
    

上面引用的 RFC 4697 是这样说的:

本备忘录主要关注迭代
解析器的行为,迭代解析器通常作为递归名称服务器的一部分
。本备忘录使用更准确的术语“迭代解析器”,
因为重点通常放在该组件上。在
需要提及此实体的名称服务器角色的情况下,本备忘录
使用术语“递归名称服务器”。作为
差异的一个例子,递归名称服务器的名称服务器组件
接收 DNS 查询,而迭代解析器组件发送
查询。

在我看来,RFC 1034 在这一点上更加不清楚,或者更准确地说更加过时:

  • 在任何具有分布式数据库的系统中,特定名称服务器可能会收到只能由其他服务器回答的查询。处理此问题的两种通用方法是“递归”,其中第一个服务器在另一台服务器上为客户端进行查询,以及“迭代”,其中服务器将客户端引至另一台服务器并让客户端进行查询。这两种方法都有优点和缺点,但对于数据报样式的访问,迭代方法是首选。域系统要求实施迭代方法,但允许将递归方法作为一种选择。

回到你的问题:

从缓存的角度来看,迭代 DNS 和递归 DNS 之间有什么区别?

根据我对事物在现实中如何运作的理解(与上述定义并不完全一致),没有区别,因为递归名称服务器会执行迭代查询来解析客户端所要求的任何名称。

以及

本地DNS服务器在递归架构中还能走捷径吗?

基本上,任何非权威的东西都可以有缓存,只要它遵守从收到的先前回复中获得的 TTL,它就在协议范围内工作。

请注意,未来事情可能会变得更加混乱:一些提案ANAME和特定实现可能要求权威名称服务器在给定查询时也变为递归/迭代,以便能够解析目标。

相关内容