实际如何选择 TTL
如何刷新 DNS 缓存(Windows、macOS、Linux、浏览器)
您的设备会保存 DNS 应答,这样就不必为每个请求都重新查询。记录变更之后,您之所以一直看到旧的目标,正是因为这份保存下来的副本。刷新会丢弃它,并强制重新查询。
不过,在刷新任何东西之前,不妨花三十秒确认一下问题是否真的出在缓存过期上,因为多数时候并不是。
第一步:确认问题出在缓存上
直接查询权威域名服务器,绕过您与源头之间的所有缓存。
dig +short example.com @ns1.example.com- 权威服务器显示新值,您看到的却是旧值:问题出在缓存上,刷新可能有帮助。
- 权威服务器显示的也是旧值:刷新不会改变任何结果。记录没有保存成功,或者您是在一家您的域名并未委派给的服务商处编辑的。
核心要点
刷新只会清除您自己控制的设备上的缓存,碰不到您的 ISP 的解析器,也碰不到其他任何人的解析器,它们会按各自的时间表过期,由记录的 TTL 决定。
Windows
以管理员身份打开命令提示符或 PowerShell,然后执行:
ipconfig /flushdns您应该会看到提示 Successfully flushed the DNS Resolver Cache(中文系统中为“已成功刷新 DNS 解析缓存”)。没有管理员权限时,命令会因权限错误而失败。
ipconfig /displaydnsmacOS
自 Big Sur 以来的所有版本,都只需一条命令。系统会提示您输入密码。
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder成功时没有任何输出,没有消息就说明成功了。两部分缺一不可:前一条清除目录服务缓存,后一条重启持有其余缓存的解析器守护进程。
Linux
Linux 因发行版而异,因为使用的解析器守护进程不同。请先检查您用的是哪一种:
systemctl is-active systemd-resolved
systemctl is-active nscd
systemctl is-active dnsmasqsudo resolvectl flush-caches
# Confirm it worked:
resolvectl statisticssudo systemctl restart nscdsudo systemctl restart dnsmasq浏览器
浏览器有自己的 DNS 缓存,独立于操作系统。刷新系统缓存不会清除它,这就是为什么在 Chrome 中网站可能仍从旧地址加载,而 dig 已经显示新地址。
| 浏览器 | 清除方法 |
|---|---|
| Chrome / Edge / Brave | 访问 chrome://net-internals/#dns,点击 Clear host cache(清除主机缓存) |
| Firefox | 访问 about:networking#dns,点击 Clear DNS Cache(清除 DNS 缓存) |
| Safari | 使用 macOS 的缓存,需在系统层面刷新 |
您的路由器
家用路由器经常为整个家庭缓存 DNS,所以有时逐台刷新每个设备仍然无效。重启路由器就能清除它,虽然粗暴,但有效。有些固件也会在管理界面中提供清除 DNS 缓存的选项。
否定缓存:为什么新记录看起来不存在
有一种情况会让人意外,而且无论怎么刷新常规位置都解决不了:您新建了一个子域名,立即查询,得到“不存在”,之后即便记录明明已经生效,它仍会在一段时间内继续返回这个结果。
这就是否定缓存。当解析器被告知某个名称不存在时,它会像缓存真实应答一样,把这种不存在也缓存下来。再次查询,命中的只是缓存的否定结果。
缓存的时长并不由您刚创建的记录决定,而是来自该区域 SOA 记录的最后一个字段,即最小 TTL。常见取值在 300 到 3600 秒之间,所以新创建的名称最长可能有一小时看起来像是不存在。
刷新本地缓存在这里会有帮助,因为否定应答和其他应答一样,会在每一层被存储。但您的 ISP 的解析器持有自己的那一份,它只能等待过期。这段时长从何而来,请参阅 TTL。
缓存为什么会存在
值得克制那种习惯性刷新的冲动。DNS 缓存在做实实在在的工作:一次典型的页面加载,要解析网站本身、字体、统计分析和图片的名称。如果没有缓存,每一项都意味着在获取任何一个字节之前,先来一次完整的往返。
缓存也在保护您。如果您的 DNS 服务商发生故障,持有您记录未过期副本的解析器会继续提供这些记录,访客毫无察觉。激进地清除缓存,就等于拿掉了这层缓冲。请在追查某个具体的过期应答时才刷新,而不要把它当作日常的清洁习惯。
完整流程,依次进行
验证权威记录
确认新值确实已在源头生效。如果没有,就到此为止,这不是缓存问题。
刷新浏览器缓存
这是最常见的原因,也最容易清除。或者直接在隐私窗口中测试。
刷新系统缓存
使用上文中适用于您所在平台的命令。
重启路由器
如果同一网络中的其他设备也显示旧值,这很可能就是共享的那一层。
换一个网络测试
移动数据使用的是一条完全独立的解析器链路。如果在那里正常,说明剩下的过期缓存在您的 ISP 那里,只有时间能解决。
如果全部刷新之后您看到的仍是旧应答,说明您在等待一个不受您控制的缓存。DNS 传播解释了这段等待由什么决定,TTL 则说明下次如何缩短它。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
常见问题
相关阅读
“传播”其实只是缓存过期
0 分钟
您保存了更改
0-5 分钟
您的 DNS 托管商完成更新
最长到 TTL
旧答案仍在缓存中
TTL 之后
所有人都看到新答案
没有任何内容被推送出去,只是各个缓存不再复用自己的副本
DNS 传播:为何变更要等这么久,实际发生了什么
没有任何东西在传播。弄清等待期间实际发生的事,就能准确知道要等多久,以及如何缩短。
实际如何选择 TTL
什么是 DNS TTL?如何选择合适的值
一个数字,决定了变更多快生效,也决定了您产生多少 DNS 流量。下面教您如何有意识地选择它。
一次递归 DNS 查询,逐跳详解
浏览器
想访问 example.com
解析器
运营商 / 1.1.1.1
根 + TLD
谁负责 .com?
权威服务器
真正的答案
这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存
DNS 如何工作:从域名到 IP 地址
互联网的电话簿,从头到尾追踪一遍:从输入域名,到第一个数据包抵达服务器,这短短几毫秒里究竟发生了什么。