实际如何选择 TTL
理解 DNS TTL:为什么变更需要时间才能生效
每条 DNS 记录都带有一个 TTL(time to live,生存时间),以秒为单位。这是域名的权威域名服务器向每个获取该记录的解析器发出的指令:“在再次询问之前,您可以在这么长的时间内复用这个应答。”300 秒的 TTL 意味着,刚刚查询过某个域名的解析器,在接下来的五分钟内不会再去询问,即使这期间记录已经变化。
TTL 所权衡的取舍
较长的 TTL 意味着更少的 DNS 查询、更快的平均查询速度(因为更多请求由缓存直接响应),以及权威域名服务器上更低的负载。较短的 TTL 则意味着记录的变更传播得更快,代价是查询更加频繁。并不存在放之四海而皆准的值,这取决于记录预计多久变更一次,以及当前情形对过期应答的容忍程度。
变更期间究竟发生了什么
更新一条 DNS 记录,并不会把变更推送给互联网上的每个解析器,它只是改变了权威域名服务器下一次被询问时给出的答案。每个已经缓存了旧应答的解析器,都会继续提供旧应答,直到其缓存副本的 TTL 过期。这就是为什么同一个域名,可能会因为作答的解析器和缓存不同,而在短时间内解析到不同的地址。
- 计划迁移之前,一个常见的实用做法是提前一两天调低 TTL,让最终的切换传播得更快。
- 迁移完成后,通常会把 TTL 调回正常值。
- 一条长期没有变更、TTL 又很长的记录,一旦发生变更,仍可能需要整个 TTL 窗口的时间,才能从全球各地的缓存中完全清除。
实际如何选择 TTL
| TTL | 适用场景 | 取舍 |
|---|---|---|
| 60-300 秒 | 正在进行的迁移、负载均衡的端点 | 传播快,但查询量大幅增加 |
| 3,600 秒(1 小时) | 大多数普通的 A/AAAA/CNAME 记录 | 对偶尔变更的记录来说是合理的平衡 |
| 86,400 秒(24 小时) | MX、NS 以及其他很少改动的记录 | 查询更少,但这里的变更需要整整一天才能完全清除 |
否定应答同样会被缓存,这一点很容易被忽视。当域名不存在时,NXDOMAIN 响应本身会被缓存,其时长由另一个值决定(SOA 记录的最小 TTL,而不是某条本来就不存在的记录的 TTL)。新注册的域名,有时会在随后的一小段时间内看起来无法解析,原因仅仅是解析器在注册完成之前,就已经缓存了它的 NXDOMAIN。
TTL 是一种请求,而不是保证
需要知道的是,TTL 只是建议性的,并没有任何外部权威来强制执行。从技术上讲,解析器可以自由地把应答缓存得比声明的 TTL 更久(有些解析器在高负载下会这样做,以减少查询量),也可以更早地将其驱逐(内存不足的解析器可能提前丢弃缓存条目)。在绝大多数情况下,运营良好的公共解析器和 ISP 解析器都会严格而可预测地遵守 TTL,但这也正是为什么基于 TTL 的传播时间估算只是一条可靠的经验法则,而不是严格的、有合同约束力的保证。如果某项变更在旧 TTL 窗口过去之后仍然没有明显生效,那么某个异常激进的中间缓存,就是虽然少见但确实存在、值得牢记的解释之一。
如果您要验证 DNS 变更是否已经生效,单次查询只能告诉您某一个解析器当前缓存了什么。相隔几分钟重新运行查询,或者安排一次周期性检查,是确认变更已真正传播的更可靠方式,而不是只碰到一次过期的缓存应答,就以为那是最终结果。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
本主题的免费工具
相关阅读
两种寻址方案,并行运行
IPv4
192.0.2.10
32 位,约 43 亿个地址,已耗尽
IPv6
2606:4700::6810:84e5
128 位,约 3.4×10³⁸ 个地址
A 记录与 AAAA 记录:IPv4 和 IPv6 详解
A 记录返回 IPv4 地址,AAAA 记录返回 IPv6 地址。同一个域名拥有两个相互独立的地址族,这也是为什么两者都要检查。
一次递归 DNS 查询,逐跳详解
浏览器
想访问 example.com
解析器
运营商 / 1.1.1.1
根 + TLD
谁负责 .com?
权威服务器
真正的答案
这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存
什么是 DNS?它是如何工作的
用通俗的语言讲解域名系统:从您输入域名,到浏览器连上服务器,中间究竟发生了什么。
三个层级都被称作“DNS 服务器”
存根解析器
您自己的设备
递归解析器
运营商、路由器或 1.1.1.1
权威服务器
域名自己的 DNS
域名 IP 地址查询:如何解读结果
弄清域名 IP 地址查询结果的含义,包括多个地址、IPv4 与 IPv6 记录、CDN 边缘节点,以及反向归属判断的局限。