← 返回题目列表

DNS 缓存是怎么工作的?TTL 有什么作用?

高频 中等 第 12 / 27 题 更新于 2026/07/28
DNS缓存TTL域名解析

简化版

DNS 在多个层级缓存解析结果——浏览器、操作系统、本地 DNS 服务器都会缓存「域名→IP」,任何一层命中就直接返回,不用再走完整查询。**TTL(Time To Live)**是每条记录的「保质期」(秒),规定这条缓存能存多久;TTL 到期才重新查询。TTL 越小,改动生效越快,但查询越频繁;越大越省查询,但改 IP 后要等更久才全网生效。

详细版

多级缓存链(自近到远):

  1. 浏览器 DNS 缓存:浏览器自己缓存一小段时间;
  2. 操作系统缓存:系统级 DNS 缓存(Windows 的 DNS Client 服务等)+ hosts 文件;
  3. 本地 DNS 服务器缓存:递归解析器缓存,服务大量用户,命中率最高;
  4. 更上层(TLD、权威服务器)也各自有缓存。

任一层命中就返回,越靠近用户越快。TTL 决定每层缓存的存活时间:权威服务器给每条记录设一个 TTL,各级缓存拿到后按这个 TTL 计时,到期就丢弃、下次重新查询。

TTL 的权衡

  • TTL 小(如 60 秒):改了 DNS 记录很快全网生效(利于切换 IP、故障转移),但查询频繁、负载高;
  • TTL 大(如 24 小时):省查询、解析快,但改了 IP 后旧缓存要等很久才过期,切换慢。

完整版教学

一、缓存为什么是 DNS 的命脉

全球每秒的 DNS 查询量天文数字,如果每次都从根服务器一层层查到权威,整个 DNS 体系会瞬间崩溃。缓存是让 DNS 能扛住的关键:

  • 绝大多数常用域名都躺在本地 DNS 服务器的缓存里,用户一查直接命中返回;
  • 真正需要走完整「根→TLD→权威」查询的,只有缓存未命中或过期的少数情况。

所以 DNS 本质是一个大量依赖多级缓存的分布式系统,缓存命中率直接决定了它的性能和可扩展性。

二、TTL:缓存的保质期与「双刃剑」

TTL 是权威服务器给每条记录标注的「这条记录可以被缓存多少秒」。各级缓存严格按它计时,到点作废。它是一把双刃剑,本质是「解析性能」和「变更灵活性」的权衡:

  • 想让改 IP 快速生效(比如要做故障切换、迁移服务器)→ TTL 设小,代价是查询更频繁;
  • 想让解析更快、减少查询(记录很少变的稳定服务)→ TTL 设大,代价是万一要改 IP,旧缓存要等 TTL 过期才更新。

实战技巧:计划要换 IP 之前,提前把 TTL 调小(比如提前一天从 24 小时改成 5 分钟),等旧的大 TTL 缓存都过期后,正式切换时新 IP 能快速全网生效,切完再把 TTL 调回大值。这是运维迁移的经典手法。

三、为什么改了 DNS「没马上生效」

一个高频困惑:改了域名的 IP,为什么有的人访问已经是新 IP、有的还是旧的?根源就是缓存 + TTL

  • 各级缓存里还存着旧记录,要等它们的 TTL 过期才会重新查到新值;
  • 不同用户走不同的本地 DNS,缓存过期时间不一,所以「新旧 IP 并存」一段时间——这叫 DNS 生效延迟 / 传播(propagation)

理解这点就知道:改 DNS 不是即时的,全网生效时间大致取决于旧记录的 TTL(以及个别不守规矩的缓存)。

四、缓存也可能带来问题

缓存虽好,也有副作用:

  • 故障切换慢:服务器挂了改了 IP,但大 TTL 缓存还指向旧的挂掉的 IP,部分用户短期内仍访问失败。
  • 负缓存(Negative Caching):「域名不存在」(NXDOMAIN)的结果也会被缓存一段时间。所以刚注册的新域名,可能因为之前查过「不存在」被缓存,短期内还解析不了。
  • 本地缓存脏了:可以手动清(Windows ipconfig /flushdns、Chrome 的 chrome://net-internals/#dns)。

五、常见误区

  • ❌ 以为改了 DNS 立即全网生效——受各级缓存 TTL 影响,有传播延迟。
  • ❌ 以为 TTL 越小越好——小 TTL 让变更快,但查询频繁、增加负载和解析延迟。
  • ❌ 忽略负缓存——「不存在」也会被缓存,新域名可能短期解析不了。
  • ❌ 遇到解析异常不会清缓存——ipconfig /flushdns 等可清本地 DNS 缓存。

六、常见误区与追问

考点正确口径
TTL记录可缓存的秒数
优点减少递归查询和权威 DNS 压力
代价故障切换和变更传播会变慢
old A = 203.0.113.10, TTL = 600s
t=0 change to 203.0.113.20
t=300 resolver may still return old IP
t>=600 resolver asks authoritative DNS again

TTL 是缓存收益和变更速度的旋钮,不是越大越好,也不是越小越专业。

  • 误区:修改 DNS 后全球马上生效。 递归解析器、系统和浏览器可能仍缓存旧记录,必须等 TTL 过期。
  • 误区:TTL 设置为 0 就没有缓存。 部分解析器会设置最小缓存时间,客户端或中间系统也可能另有缓存。
  • 误区:TTL 只影响浏览器。 它影响递归解析器、操作系统缓存、应用内缓存以及部分代理层。
  • 追问:上线迁移前为什么先调低 TTL? 提前把 TTL 从 1 小时降到 60 秒,真正切换时旧记录更快过期。
  • 追问:TTL 太低有什么代价? DNS 查询量增加,权威 DNS 压力上升,解析延迟和成本也可能增加。
  • 追问:负缓存是什么? NXDOMAIN 等不存在结果也可能按 SOA 中的负缓存 TTL 被缓存。

七、加强记忆

DNS 在浏览器/系统/本地 DNS 等多级缓存结果,命中就直接返回,是 DNS 扛住海量查询的命脉。TTL 是每条记录的缓存保质期,权衡「解析性能」与「变更灵活性」:小 TTL 改动快但查询频繁,大 TTL 省查询但生效慢。改 IP 前先调小 TTL 是经典迁移手法;DNS 变更有传播延迟,还要注意负缓存。