Windows 刷新 DNS 缓存:ipconfig /flushdns 用法
在 Windows 10 或 Windows 11 上刷新 DNS,打开命令提示符或终端运行 ipconfig /flushdns 就行,PowerShell 里用 Clear-DnsClientCache 效果一样,微软的 cmdlet 文档 写明运行它等同于运行 ipconfig /flushdns。
刷新只清掉一层,也就是 Windows 的 DNS 客户端缓存,路由器、DNS 服务商、浏览器自己的 DNS 缓存和网卡都不受影响,所以它能修好一个过期的域名解析,别的基本修不了。下面讲清楚什么时候问题真的出在这一层,怎么查看里面存了什么,大家常跟它搭配的那几条更重的重置命令,以及每条命令各改了什么。
DNS 客户端缓存里存了什么
应用连到 example.com 之前,Windows 得先把这个域名换成 IP 地址,DNS Client 服务会把已经拿到的结果存下来,同一个域名再查时就不用每次都走网络。微软的 ipconfig 文档 说这份缓存既有从本地 Hosts 文件预载的条目,也有这台电脑最近解析过的域名记录,并且服务会「在查询已配置的 DNS 服务器之前」先用它。
每条记录按该域名 DNS 服务器给的生存时间(TTL)保留,到期再重新获取。失败的结果也会被缓存,同一份文档提到 /flushdns 可以「丢弃否定缓存条目」,也就是那些说某个域名不存在的回答,这就是为什么一个网站失败过一次后,可能在一台电脑上一直打不开,其他设备却都正常。
想看缓存里有什么、又不改动任何东西:
ipconfig /displaydns
或者在 PowerShell 里只看某一个域名:
Get-DnsClientCache -Entry example.com
Get-DnsClientCache 可以按记录类型、状态(Success、NotExist 或 NoRecords)和 TTL 筛选,比 ipconfig 那一长串好读得多,一个本该能用的域名如果显示 NotExist,就是缓存住的失败结果。
什么时候刷新 DNS 有用
| 情况 | 刷新为什么有用 |
|---|---|
| 网站或服务器换了新地址,这台电脑还连到旧地址 | 旧记录还没从本地缓存里过期 |
| 你在设置里改了 DNS 服务器 | 上一个服务器给的结果还在缓存里 |
| 改了 hosts 文件,改动好像没生效 | 缓存里有从 hosts 文件预载的条目,还有这个域名之前的解析结果 |
| 开关过 VPN 或代理,有些域名仍然解析到另一边 | 经另一条路径拿到的记录还在缓存里 |
| 本地开发用的域名改指向了新地方 | 缓存的结果,或缓存的「不存在」,还在被复用 |
| 某个域名在这里打不开,同一网络下的手机却正常 | 失败的解析可能被存成了否定条目 |
这几种情况的办法都一样,先刷新,再看 Windows 现在解析出来的是什么(见下面的确认一节),然后重试应用。浏览器要退出再重新打开,不要只刷新标签页,原因在下一节。
什么时候刷新 DNS 没用
域名可以在好几个地方被应答,Windows 缓存只是其中一处,刷新也只动这一处。
- 网络服务商或网站本身挂了。 如果所有网站都打不开,或者同一网络下的其他设备也打不开,问题在上游,刷新改变不了什么。
- 路由器或 DNS 服务商手里是旧记录。 它们也会缓存结果,本地刷新没法让它们早点去拿新记录,只能等它们那份到期。
- 浏览器自己解析域名。 Chrome 的帮助页面说安全 DNS 默认以自动模式开启,基于 Chromium 的浏览器还有自己的主机解析缓存。Chromium 的 net-internals 页面在 "Host resolver cache" 下有个 "Clear host cache" 按钮(源码),在 Chrome 里打开
chrome://net-internals/#dns,在 Edge 里打开edge://net-internals/#dns,点一下就行。同一页面的 Sockets 部分还有 "Flush socket pools",Chromium 给它标了 "May break pages with active connections",用之前先把重要的标签页关掉。 - DNS 服务器设置本身就错了。 如果 Windows 指向的服务器给错误结果或干脆不回应,刷新只是再问一遍同一个服务器。去设置 › 网络和 Internet › WLAN › 管理已知网络(或以太网)里检查,选中你的网络,再点 IP 分配旁边的「编辑」。微软的网络设置页面说自动(DHCP)会从路由器或接入点获取 DNS 服务器地址,也推荐用这个。公司电脑如果连着 VPN,改这里可能让内网域名失效,先问管这台电脑的人。
- 网页只是慢,并没有打不开。 解析结果之所以缓存,正是因为复用起来很快,下载慢或视频卡顿很少是 DNS 的问题,缓存清空后接下来几次解析反而会稍微慢一点,不会更快。
刷新和查看缓存的命令
在命令提示符或终端里:
ipconfig /flushdns
ipconfig /displaydns
在 PowerShell 里:
Clear-DnsClientCache
Get-DnsClientCache
微软这两份文档都没说这些命令需要管理员权限,Mole for Windows 也是在普通、未提权的进程里做同样的刷新。如果受管理的电脑报了拒绝访问,就以管理员身份打开终端或命令提示符再运行。刷新不会删除磁盘上的任何东西,也不用重启,应用再去解析域名时缓存会自己填回来。
别把刷新做成计划任务,也别当提速技巧塞进开机脚本,热缓存才是快的那条路,刷新只在某条记录确实错了的时候有用。
先查 hosts 文件,再怪缓存
hosts 文件里列出的域名会绕过 DNS。微软的 hosts 重置文章给出的文件夹是 %WinDir%\System32\Drivers\Etc,通常就是 C:\Windows\System32\drivers\etc,文件名叫 hosts,没有扩展名。按那篇文章的说法,默认文件里只有以 # 开头的注释行,以及 localhost 的环回映射。
开发工具、广告拦截器和一些老教程有时会往这里加几行,用完也不删。如果出问题的域名出现在这个文件里,它解析成那样就是这一行造成的。要改的话先留一份备份(微软的文章是把旧文件改名成 Hosts.old),用以管理员身份运行的编辑器只改需要的那一行,保存时别加上 .txt 扩展名,然后运行 ipconfig /flushdns,让缓存不再留着旧的预载条目。不要删除这个文件,也不要改它的权限。
更重的重置命令各改了什么
微软的 Wi-Fi 故障排除文章把这几条命令列在一起,要在管理员命令提示符里按这个顺序运行:
netsh winsock reset
netsh int ip reset
ipconfig /release
ipconfig /renew
ipconfig /flushdns
它们做的事差别很大,只有最后一条跟 DNS 有关:
ipconfig /release会发出 DHCP 释放,按 ipconfig 文档的说法,还会停用设为自动获取地址的网卡上的 TCP/IP,在/renew拿到新地址之前你都是断网的,所以别在远程桌面会话里单独运行它。ipconfig /renew向 DHCP 请求一份新配置,只对设为自动获取地址的网卡有效。netsh winsock reset把 Winsock 目录恢复到干净状态,移除自定义的分层服务提供程序(netsh winsock),有些 VPN 客户端和安全软件会装这类提供程序,运行后记得检查一下这些应用。netsh int ip reset会覆盖注册表里 TCP/IP 和 DHCP 的参数键,微软的 TCP/IP 重置文章说效果等同于卸载再重装 TCP/IP。它需要管理员权限和重启,文中的示例日志显示静态 IP 地址、网关和 DNS 服务器都会被重置,如果这些是你手动设的,先记下来。- 网络重置在设置 › 网络和 Internet › 高级网络设置 › 网络重置里,会移除所有网卡及其设置,电脑重启后再按默认值重新安装。微软的 Wi-Fi 文章提醒,你可能需要重新安装并配置 VPN 客户端软件或 Hyper-V 虚拟交换机,已知网络也可能被设成公用网络配置文件。
如果唯一的症状是某个域名解析到旧地址或解析不出来,这些都用不上。它们是给整体连不上网的情况准备的,而且要在刷新、检查过 DNS 服务器和 hosts 文件都解释不了之后再用。
确认问题解决了
- 只问缓存,看看 Windows 手里这个域名存的是什么:
powershell
Resolve-DnsName example.com -CacheOnly
Resolve-DnsName 加上 -CacheOnly 会「只用本地缓存解析这次查询」。刷新后马上运行一次,应用重试后再运行一次,就能看到缓存的是哪个结果。
- 正常解析一次,再跳过 hosts 文件解析一次,对比两者:
powershell
Resolve-DnsName example.com
Resolve-DnsName example.com -NoHostsFile
如果两个结果不一样,原因就在 hosts 文件的某一行。
- 直接问 DNS 服务器。按 nslookup 文档,第二个参数是要查询的服务器,不写的话 nslookup 用默认的 DNS 名称服务器。
cmd
nslookup example.com
nslookup example.com 1.1.1.1
如果你配置的服务器返回旧地址,另一台服务器返回新地址,说明旧记录还缓存在上游,等就行了。如果两边都返回旧地址,说明这条记录还没改。
- 退出并重新打开出问题的浏览器或应用,如果是 Chrome 或 Edge,再清一下它的主机缓存。
Mole 能做什么
Mole for Windows 在优化里的网络与搜索分组中有一项「刷新 DNS 缓存」,它调用 Windows 的 DnsFlushResolverCache 函数,清的就是 ipconfig /flushdns 清的那份 Windows DNS 客户端缓存,而且不弹管理员提示。Windows 帮助页面把它和优化里的其他维护项列在一起,Windows 优化都做了什么讲了每项任务对应什么症状。
Mole 的网络修复就这么多,它不重置 Winsock 或 TCP/IP,不释放或续订地址,不重装网卡,也不碰 VPN 连接、静态地址、hosts 文件或浏览器自己的主机缓存,这些请用上面的命令。如果你是因为浏览器变慢而不是某个域名打不开才找过来的,浏览器存储的问题在 Windows 缓存指南里讲过。
常见问题
Windows 11 怎么刷新 DNS?
在命令提示符或终端里运行 ipconfig /flushdns,或者在 PowerShell 里运行 Clear-DnsClientCache,两者都立即生效,不用重启。
刷新 DNS 会清掉 Chrome 或 Edge 的 DNS 缓存吗?
不会。打开 chrome://net-internals/#dns 或 edge://net-internals/#dns,点 "Clear host cache",再重新打开浏览器。
刷新 DNS 缓存安全吗?
安全,它只丢掉缓存的解析结果,下次请求时 Windows 会重新获取。常跟它列在一起的那些重置命令,比如 netsh int ip reset 或网络重置,改动大得多,可能会清掉静态设置或 VPN 网卡。
为什么刷新后网站还是去旧地址?
检查 hosts 文件、浏览器自己的缓存,再看看用 nslookup 问你的 DNS 服务器是不是还返回旧地址。如果服务器或路由器手里还是旧记录,本地刷新改变不了,只能等那份到期。