![缓存的 DNS 记录是否可能使 TTL 值翻倍?](https://linux22.com/image/779395/%E7%BC%93%E5%AD%98%E7%9A%84%20DNS%20%E8%AE%B0%E5%BD%95%E6%98%AF%E5%90%A6%E5%8F%AF%E8%83%BD%E4%BD%BF%20TTL%20%E5%80%BC%E7%BF%BB%E5%80%8D%EF%BC%9F.png)
- 权威 DNS 服务器发送 TTL 为 600 秒的 A 记录。
- 该记录由另一个 DNS 缓存,该 DNS 随后在 599 秒后回复对具有 600 秒 TTL 的 A 记录的请求。
由于接收记录的客户端收到 600 秒的 TTL,理论上,缓存 DNS 是否应该将 TTL 调整为 1 秒,以便传递记录的真实年龄?TTL 的目的是允许在已知间隔内更改和重新传播记录,这是否会使该间隔加倍?
答案1
这难道不会使间隔加倍吗?
不。
递归解析器及其缓存在时间 T 获得一条 TTL 为 600(秒)的记录。它将该记录保存在缓存中(我们假设它有无限的空间 - 因此永远不需要提前逐出数据 - 并且它们没有本地策略来干扰 TTL 值)。
在 T 和 T+600 之间,值位于其缓存中。如果它收到任何针对该记录的查询,它将在查询到来时将其与 TTL 一起给出,因此如果查询在 T+30 到来,则给出的 TTL 将为 600 - 30 = 570,如果查询在 T+599 到来,则给出的 TTL 将为 600 - 599 = 1
那么,在 T+600 时,或者更准确地说,此后的任何时间,如果有人提出查询,会发生什么情况呢?[1]
缓存将计算要提供给客户端的 TTL,并确定它已变为 0 或负数,这仅表示它已过期。因此,缓存实际上没有数据可以回复客户端。因此,它将删除其缓存数据,再次询问相关的权威名称服务器,希望该服务器会回复数据和 TTL(可能再次为 600,也可能是其他值),解析器会将其复制到其缓存中以供以后使用,并将其回复给发出请求的客户端。
[1] 还有其他情况:如果缓存被视为“重要”,则可以决定预先重新查询即将过期的记录,以便在之后的查询时这些记录已经可用。