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

时间:2018-07-16 02:15:26

标签: dns ttl

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

但是:

  

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

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

从技术上讲,一台服务器可以同时完成这一切,但这至少是出于缓存原因以及客户端数量不同的考虑,这是一个坏主意:权威的名称服务器通常对任何客户端开放,因为它需要“扩散”它的数据无处不在,而递归名称服务器通常仅适用于选定的客户端列表(例如ISP客户端)。

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

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

  

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

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

然后您会有各种变化:

  • 某些缓存不完全遵循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秒,这是默认设置。