DNS 缓存与 TTL 是什么:改了解析不生效、连上线路仍打不开时怎么逐层清缓存
域名解析有一个很容易被忽视的特性:结果会被缓存。你访问一个网站时,电脑先问路由器,路由器问运营商的解析服务器,运营商再一层层问到这个域名的权威服务器,拿到的地址会带着一个叫 TTL 的数字一路返回,每一层都按这个数字把结果存起来,在有效期内不再重复查询。这本来是为了加快访问,但也带来了两类常见困扰:站长改了解析记录,访客那边迟迟看不到新地址;用户连上了线路,浏览器却仍然沿用之前缓存下来的错误地址,页面打不开。
第二种情况在国内尤其常见。某些境外域名在未连线路时被解析到了错误地址,这个错误结果同样会被系统和浏览器缓存起来;之后即使连上线路,程序也可能继续使用缓存里的旧结果,直到缓存过期。很多人以为是线路不好,反复换节点也没用,其实清一下缓存就好了。下面先讲清 TTL 和缓存分布在哪几层,再给出逐层清理的步骤和报错对照。
DNS 缓存分布在哪几层
TTL 的单位是秒,由域名的权威服务器设置,常见值从三百秒到一天不等。它表示的是「这个结果最多可以缓存多久」,而不是「多久之后生效」。所以改解析记录后,最坏情况下要等旧记录的 TTL 走完,各层缓存才会全部更新;用户自己能清掉的只有浏览器、系统和路由器三层,递归解析服务器那一层只能等,或者临时换一个解析服务。
| 缓存位置 | 谁在缓存 | 过期依据 | 怎么清理 |
|---|---|---|---|
| 浏览器 | Chrome、Edge、Firefox 内部 | 通常是较短的固定时间 | 浏览器内部页面或重启浏览器 |
| 操作系统 | 系统解析服务 | 按记录 TTL | 系统命令清空 |
| 应用运行时 | Java 等运行时自带缓存 | 运行时自己的配置 | 重启程序或改配置 |
| 家用路由器 | 路由器内置解析转发 | 按记录 TTL | 重启路由器 |
| 递归解析服务器 | 运营商或公共解析服务 | 按记录 TTL | 用户无法清理,只能等待或换服务 |
| 否定缓存 | 各层对不存在的域名也缓存 | 按区域设置的否定 TTL | 同上,逐层清理 |
逐层清理缓存的步骤
- 第一步:先把网络线路准备好。如果你遇到的是「连上线路后境外网站仍打不开」,先确认刺猬VPN已经连上,再按下面的顺序清缓存,清完之后的新查询才会走当前的网络环境;
- 第二步:清浏览器缓存。Chrome 与 Edge 在地址栏打开内部网络页面的 DNS 分区,点击「Clear host cache」,再到套接字分区点击「Flush socket pools」;Firefox 在内部网络页面的 DNS 分区点击清除;最简单的办法是完全退出浏览器再打开;
- 第三步:清 Windows 系统缓存。以管理员身份打开命令提示符执行 ipconfig /flushdns,看到「已成功刷新 DNS 解析缓存」即可;PowerShell 可以用 Clear-DnsClientCache,查看当前缓存用 Get-DnsClientCache;
- 第四步:清 macOS 系统缓存。在终端执行 sudo dscacheutil -flushcache,再执行 sudo killall -HUP mDNSResponder,命令没有输出是正常的;
- 第五步:清 Linux 系统缓存。使用 systemd-resolved 的发行版执行 resolvectl flush-caches,再用 resolvectl statistics 确认缓存条目归零;
- 第六步:手机端最简单的办法是开关一次飞行模式,系统会清掉大部分解析缓存;
- 第七步:路由器层面,重启路由器即可清空它的转发缓存;
- 第八步:验证。用 nslookup 或 dig 查询目标域名,对比返回的地址是否已经是新地址,dig 的结果里能看到剩余的 TTL 秒数,这个数在倒数,说明你拿到的是缓存结果。
按现象排查:哪一层的缓存在作怪
判断问题出在哪一层,最有效的办法是对比:同一时间、同一设备上,不同程序拿到的结果是否一致。
- 命令行查到的是新地址,浏览器访问的仍是旧站:浏览器自己的缓存或者浏览器开启了安全 DNS,绕过了系统解析,清浏览器缓存并检查安全 DNS 设置;
- 自己电脑是旧地址,手机流量下是新地址:本地递归解析服务器还缓存着旧记录,等 TTL 过期或临时换一个公共解析服务;
- 连上线路后境外网站仍报「找不到服务器」或连接被重置:缓存里是之前被污染的地址,清浏览器与系统缓存后重开浏览器;
- 新建的子域名一直提示不存在:之前查询过一次不存在的结果被否定缓存,等否定 TTL 过期或清本地缓存;
- Java 服务一直连旧地址:运行时的解析缓存时间过长,调整运行时配置或重启服务;
- 同一局域网里只有一台设备异常:那台设备自己改过 hosts 文件或者手动设置了解析服务器,检查这两项;
- 清了缓存仍然是旧地址:权威服务器上的记录没有改成功,用 dig 直接查询权威服务器确认。
几种解析方式与缓存行为对比
这张表说明了一个容易忽视的事实:解析结果对不对,和它从哪里来、在哪里被缓存一样重要。连接线路之后,境外域名的解析通常也会随线路处理,但之前已经缓存在本地的旧结果不会自动作废。所以「连上之后先清一次缓存」是一个值得养成的习惯。实际可用性取决于当前网络环境。
| 对比项 | 运营商解析 | 公共解析服务 | 线路内的解析 |
|---|---|---|---|
| 缓存行为 | 按 TTL,部分运营商会延长 | 按 TTL,较为规范 | 随当前线路的解析规则 |
| 境外域名结果 | 可能被污染 | 明文查询仍可能被干扰 | 结果较为干净 |
| 国内域名结果 | 调度到就近节点 | 可能调度不够精准 | 智能分流时国内域名可直连解析 |
| 清理方式 | 无法清理,只能等 | 无法清理,只能等 | 断开重连后重新查询 |
| 适合场景 | 日常国内访问 | 排查与对比 | 访问境外网站时 |
| 使用成本 | 免费 | 免费 | 免费节点永久免费、不限流量、不限速 |
站长视角:改解析前该怎么设置 TTL
如果你是网站或服务的维护者,要迁移服务器或更换地址,正确做法是提前降低 TTL。假设当前记录的 TTL 是一天,那么至少在迁移前一天就把它改成三百秒,等旧的一天 TTL 走完,所有缓存里都变成了三百秒的新记录;迁移当天再修改地址,各层缓存最多五分钟就会更新。迁移稳定之后,再把 TTL 调回较长的值,减轻权威服务器的查询压力。
很多人反过来做:先改地址,再调低 TTL,这时各层缓存里已经存着一天有效期的旧记录,调低 TTL 对它们毫无作用。另外,迁移期间旧服务器不要立刻关机,保留到旧 TTL 完全过期之后,确保还在使用缓存的访客不会访问失败。
接入内容分发网络的网站情况又不一样。这类网站的域名通常指向分发服务商提供的别名记录,别名背后的地址由服务商按访客位置动态调度,TTL 往往只有几十秒到几分钟,站长自己改不了,也不需要改。真正需要留意的是别名记录本身的 TTL:从自建服务器切换到分发网络,或者在两家服务商之间迁移时,同样要提前降低这条记录的 TTL。另外,部分解析服务商对免费套餐设置了 TTL 的下限,低于下限的设置会被自动调整,以服务商说明为准。
与 hosts 文件和公共解析服务的分工
hosts 文件是比缓存更优先的一层:系统查询域名时先看 hosts,有记录就直接使用,既不查缓存也不发请求。它适合临时把某个域名指向测试服务器,但写进去的地址不会过期,忘了删就会一直生效,具体用法与风险见 hosts 文件怎么改。想对比不同解析服务的结果、或者在本地递归服务器缓存未过期时临时绕开它,可以换用公共解析服务,各家服务的地址与加密查询方式见 公共 DNS 服务对比。
三者的关系可以这样理解:hosts 是手动指定,缓存是自动记忆,解析服务是答案的来源。排查解析问题时按 hosts、浏览器缓存、系统缓存、路由器、解析服务的顺序逐层检查,基本都能定位。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 改解析后仍访问旧站 | 旧记录 TTL 未过期 | 清本地缓存,等待递归服务器过期 |
| 连上线路后仍找不到服务器 | 缓存了被污染的地址 | 清浏览器与系统缓存后重开 |
| 新子域名提示不存在 | 否定缓存未过期 | 等否定 TTL 过期或清本地缓存 |
| 命令行与浏览器结果不同 | 浏览器开了安全 DNS | 检查浏览器安全 DNS 设置 |
| 只有一台设备异常 | hosts 或手动解析服务器 | 检查 hosts 与网卡设置 |
| Java 服务连旧地址 | 运行时缓存过长 | 调整配置或重启服务 |
| 清缓存后仍是旧地址 | 权威记录未改成功 | 直接查询权威服务器确认 |
高频问答
- 问:TTL 设得越短越好吗?答:不是,过短会增加查询次数和解析延迟,日常三百秒到一小时比较常见;
- 问:DNS 生效到底要多久?答:取决于旧记录的 TTL,最长等旧 TTL 走完,所谓全球生效四十八小时只是保守说法;
- 问:清 DNS 缓存会影响上网吗?答:不会,只是接下来的几次访问要重新查询,稍慢一点;
- 问:为什么手机开关飞行模式就好了?答:飞行模式会重置网络连接并清掉系统解析缓存;
- 问:浏览器的安全 DNS 要不要开?答:它能减少解析被干扰,但会绕过系统设置,排查问题时要记得它的存在;
- 问:断开线路后要不要清缓存?答:一般不必,遇到国内网站访问异常、打开很慢或跳到错误页面时再清一次即可。
让解析结果始终是对的
DNS 缓存与 TTL 的道理并不复杂:每一层都会按 TTL 记住答案,改了解析或者换了网络环境,旧答案不会马上消失。遇到解析不生效、连上线路仍打不开、设备之间结果不一致时,按浏览器、系统、路由器的顺序清一遍缓存,再用 dig 确认结果,大部分问题当场就能解决;站长迁移前提前降低 TTL,能把影响控制在几分钟之内。
刺猬VPN 支持自定义用户名和密码匿名注册,不需要邮箱、也不需要手机号,采用 HTTPS+AES 加密传输;免费节点永久免费、不限流量、不限速,时长套餐有效期内不限流量、不限速,一个账号支持多设备同时在线。客户端带断线保护和按域名、IP 的智能分流,国内域名照常就近解析与直连,境外域名随线路处理。连上之后清一次本地缓存,境外网站的访问会更顺畅。实际可用性取决于当前网络环境。
开始使用刺猬VPN:免费节点即刻体验,全球会员线路
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。