中间名称服务器中的DNS TTL过期后会发生什么?

问题描述 投票:1回答:1

我有一些问题可以更好地理解DNS机制:

1)我知道客户端和权威DNS服务器之间有一些中间DNS服务器,例如ISP的。还有其他什么类型?在哪里?

2)在中间DNS服务器中,NS记录的TTL过期后,它们何时刷新名称的地址?客户要求?或到期后立即刷新记录?

谢谢。

dns ttl
1个回答
2
投票

您的问题不在这里,与编程无关。

但是:

我知道客户端和权威DNS服务器之间有一些中间DNS服务器,例如ISP的。还有其他什么类型?在哪里?

仅有两种类型的DNS服务器(我们暂时将它放在存根中):它是authoritative名称服务器(保存有关某些域的信息并作为其信任源)或递归一个附加到缓存的缓存,它基本上从没有数据开始,然后将根据获取的查询逐步进行各种查询以获取信息。

从技术上讲,一台服务器可以同时做到,但是至少出于缓存原因以及客户端数量的不同,这是一个坏主意:权威的名称服务器通常对任何客户端开放,因为它需要“广播”其客户端。递归名称服务器通常仅适用于选定的客户端列表(例如ISP客户端)的所有位置。

[当今,大型组织存在开放的公共递归名称服务器:CloudFlare,Google,Quad9等。但是,它们都有硬件,链接和人力来处理来自公共递归名称服务器(例如具有放大功能的DDOS)的所有问题。

从技术上讲,您可以拥有一个递归名称服务器场,就像大型ISP需要(或以上大型公共名称服务器一样),因为任何单个实例都无法承受所有客户端查询,并且它们可以共享一个缓存或在一个缓存中工作层次结构,最底层的将其数据发送到另一个上游递归名称服务器,等等。

NS记录的TTL在中间DNS服务器中过期后,它们何时刷新名称的地址?客户要求?或到期后立即刷新记录?

这种历史性的天真的方法可以概括为:请求到达,我是否将其保存在缓存中?如果否,则在外面查询并缓存它。如果是,它在我的缓存中过期了吗?如果不是,则将其发送给客户端,但是如果是,我们需要将其从缓存中删除,然后从一开始就认为它不在缓存中。

然后您会有各种变化:

  • 某些缓存不完全遵循TTL:根据它们自己的本地策略,某些钳位值太低或太高。关于规范的最一致的理解是,TTL表示将记录保留在高速缓存中的最长时间,这意味着客户端可以随意放弃它。但是,如果认为它太低,则不应将其重写为更高的值。
  • 缓存可以在重新启动/重新启动时保留,并且可以预取,特别是对于“受欢迎”的记录;以某种方式,根NS列表在引导时被预取,并与内部硬编码列表进行比较,以便对其进行更新]
  • 可能需要修剪缓存,尤其是RAM中的缓存,通常是在“最旧的”情况下,以便为新记录腾出空间。
  • 因此,取决于缓存的管理方式和要求具有的功能,可能会有一个后台任务来监视过期和刷新记录。

我建议您将unbound用作递归名称服务器,因为它在TTL处理方面具有多种设置,因此您可以学习一些内容,然后阅读代码本身(这使我们回到了主题上) 。

您还可以阅读此文档:https://www.ietf.org/archive/id/draft-wkumari-dnsop-hammer-03.txt有关以下内容的IETF互联网草案:

原理是获取缓存中流行的RRset,即可以说在TTL过期并刷新之前已解决。通过获取最终用户查询RRset之前,也就是说预取,HAMMER有望改善体验质量最终用户以及优化涉及的资源大型DNSSEC解决平台。

请务必阅读附录A并提供许多有用的示例,例如:

并举一个绑定的例子,您可以阅读:

BIND 9.10预取的工作原理如下。有两个数字控制它。第一个数字是“资格”。只有到达TTL值大于配置的可识别性的记录才被考虑进行预取。第二个数字是“触发器”。如果查询到达要求缓存的数据过期之前还剩下少于“触发”秒的时间,则除了返回该数据作为对查询的答复外,BIND还将向权威服务器请求新副本。目的是使新副本在现有副本到期之前到达,以确保一致的响应时间。

BIND 9.10预取值是全局选项。您不能在不同的域中要求不同的预取行为。默认情况下启用预取。要关闭它,请将触发值指定为0。以下命令将触发值指定为2秒,而合格值为9秒,这是默认值。

© www.soinside.com 2019 - 2024. All rights reserved.