DNS 改完为什么半天都看不见?
DNS 传播到底在拖什么后腿
你刚把域名从老主机迁到新平台,改完 nameserver 就刷新浏览器——结果还是老页面。等 10 分钟,再等半小时,域名像钉死一样不动。是不是操作失误了?
其实这是 DNS 传播在作祟。互联网为了保持一致性,故意让改动慢慢扩散。
DNS 就是互联网的分布式电话簿
DNS 的工作很简单:把 myawesomesite.com 这种域名翻译成 203.0.113.45 这样的 IP 地址。没有它,你就得背一堆数字才能上网。
但 DNS 不是一台服务器在管全局。它是全球分布的系统,由多层服务器层层接力。这也是改动需要时间传播的根本原因。
四种服务器各管一摊
一次完整的 DNS 查询,会经过四类服务器:
- 递归解析器:通常由 ISP、Cloudflare 或 Google 提供。你的浏览器先问它要 IP,它再去层层查找,最后把结果缓存起来。
- 根服务器:全球只有 13 组。它们不存具体域名,只告诉你该去问哪个 TLD 服务器。
- TLD 服务器:比如管
.com的那一层。它知道某个域名该由哪台 nameserver 负责。 - 权威服务器:域名真正的主人。托管商的 nameserver 就是权威服务器,里面存着 A 记录、MX 记录等所有 DNS 信息。
一次查询怎么走完全程
当缓存为空时,解析流程是这样的:
- 浏览器问递归解析器要 IP。
- 解析器去问根服务器。
- 根服务器说去问
.com的 TLD 服务器。 - TLD 服务器说这个域名归
ns1.hostingprovider.com管。 - 解析器去问权威服务器。
- 权威服务器返回真实 IP。
- 解析器把结果存进缓存,再告诉浏览器。
全程通常只花几毫秒——前提是记录都是最新的。
为什么改动要等这么久
DNS 记录里有个 TTL(Time To Live),相当于这条记录的有效期。你改了 nameserver 后,旧记录还在全球各地的解析器里缓存着,直到 TTL 到期才会被刷新。
如果你把 TTL 设成 24 小时,那现在全世界可能还有成千上万台解析器拿着旧答案在用。它们不是故意不更新,而是按你自己定的规则在办事。
不同 ISP 的缓存策略不同。有的几分钟就更新了,有的可能拖好几个小时。Cloudflare(1.1.1.1)这类公共 DNS 通常严格按 TTL 来,而有些本地 ISP 则缓存得更久。
没有一个中央按钮能瞬间通知全世界,所有改动都是靠解析器自己慢慢去抓。
怎么让改动更快生效
想让 DNS 改动少折腾,可以试试下面这些做法:
- 提前压低 TTL:切换主机前一两天,把 TTL 调到 300 秒(5 分钟)。这样改完之后,解析器能很快拿新记录。
- 用全球查询工具检查:别只看自己浏览器,多用工具同时查亚洲、欧洲、美洲的解析器,看改动到底传到哪了。
- 根据场景调整 TTL:不常改的域名可以设高 TTL(3600 秒以上),省得解析器反复查询;开发或迁移期间则建议压低 TTL。
- 避开高峰期操作:大改动尽量放在访问量低的时候做,减少用户遇到不一致的概率。
- 留好回滚空间:切换后至少保留老主机 48 小时,万一 DNS 出问题,旧环境还能顶一阵。
分布式系统的代价
DNS 传播慢,本质上是因为它是个去中心化的系统。没有单点控制,也就没有单点故障——这正是互联网能扛住各种意外的原因。
但好处是有代价的:改动不会瞬间同步,而是慢慢扩散。这和分布式数据库、CDN、区块链的逻辑其实是一样的。
下次再等 DNS 传播的时候,别急。记住,全世界某个角落的解析器,可能正在第一次拿到你的新 IP。只是时间早晚的问题。