查看域名解析缓存的核心方法是使用操作系统的内置命令,Windows系统执行 ipconfig /displaydns,macOS和Linux系统执行 sudo dscacheutil -cachedump -entries 或 dig 相关命令,无需安装任何第三方软件。
为什么你需要关心DNS缓存查看这件事
你的电脑每天要解析无数个域名,浏览器地址栏输入一个网址,系统先查本地缓存,没有记录才去问DNS服务器,缓存生效期间,网站打开速度飞快,但一旦缓存过期或者记录被污染,你就会被带到错误的IP地址上,域名解析缓存就是一台本地的“电话簿”,记录着域名和IP的对应关系,学会查看它能帮你诊断网站打不开、DNS劫持、IP地址变更后仍然访问旧服务器等问题。
排查网络故障时,我见过太多人一上来就重启路由器、改DNS服务器地址,折腾半天发现是本地缓存里的旧记录在捣乱,掌握正确的查看方法,就能在几分钟内锁定问题根源,下面我把不同系统下的查看方式全部拆开讲清楚。
DNS缓存查看命令是什么:先分清系统再动手
不同操作系统的缓存机制不一样,查看方法也完全不同,行业共识认为,Windows和macOS的缓存存储方式差异较大,对应的命令也就各不相同。
Windows系统查看DNS缓存记录
Windows用户是查询DNS缓存最方便的一群人,因为微软在系统里贴心内置了一条专门命令,按下 Win + R 组合键,输入 cmd 回车打开命令行窗口,然后执行:
ipconfig /displaydns:列出所有DNS缓存条目,这是Windows下最标准的DNS缓存查看命令
包含域名、记录类型、生存时间(TTL)和IP地址,如果你只想看某个特定域名,直接在命令后面加上管道符过滤:
ipconfig /displaydns | find "baidu.com"
高版本的Windows 10和Windows 11还支持PowerShell,同样可以执行这条经典命令,输出效果完全一致,实际查看DNS缓存记录时,你会发现大量来自浏览器预取、系统服务的解析条目,它们混杂在一起,需要仔细分辨。
具体操作路径还可以通过“设置 -> 网络和Internet -> 高级网络设置 -> 网络适配器”进入图形界面,但图形界面上仅能查看DNS服务器配置,无法查看缓存记录,想让域名解析缓存第一时间刷新,建议后续执行 ipconfig /flushdns 清空所有缓存。
macOS和Linux系统下的查看方式
macOS用户的环境比Windows复杂一些,因为系统里同时存在多种DNS解析服务,查看域名解析缓存的常用命令是:
sudo dscacheutil -cachedump -entries:输出完整的DNS缓存记录dscacheutil -cachedump -entries | grep baidu.com:精准过滤指定域名
Linux系统更加灵活,常用的systemd-resolved服务用这条命令:
sudo resolvectl statistics
sudo resolvectl query example.com
Ubuntu 22.04及更新的发行版还支持 resolvectl dump 来查看完整缓存信息,老版本的Linux系统可以查看 /etc/hosts 文件,这里面的静态解析记录优先级最高,但和动态DNS缓存是两回事,国内用户常用的CentOS 7系统,如果使用了dnsmasq服务,则通过 kill -USR1 $(cat /var/run/dnsmasq.pid) 触发日志输出,再查系统日志得到缓存内容。
查看域名解析缓存时要读懂这些参数
执行 ipconfig /displaydns 或 dscacheutil 后,输出的字段是判断问题的基础,每一条记录都包含几个关键部分,这里挑重点说清楚。
- 记录名称(Record Name):实际解析的域名,
www.example.com - 记录类型(Record Type):绝大多数是
A(IPv4地址)或AAAA(IPv6地址),也可能是CNAME(别名记录) - 生存时间(Time To Live):表示该记录还能在缓存里留存多少秒
- 数据长度(Data Length):数据段的字节数
- IP地址:最终的解析结果,这是你最需要关注的字段
假设你刚把网站迁移到新的服务器,IP地址已经变更,但本地域名解析缓存中仍是旧IP,此时再看数据长度和TTL值,可以预估缓存被动刷新的时间,如果TTL数值很大(例如86400秒),意味着缓存会持续一整天,与其等它自动过期,不如直接执行清理命令。
对每个字段的实际含义都了然于胸,你就会明白排查思路应该放在哪个环节上。
DNS缓存的常见故障场景及解开方法
查看缓存只是第一步,多数场景下你还需要进一步处理,域名解析缓存的价值在于加速,但也会带来一些顽固故障,下面是几个几乎人人都能遇见的实际问题。
网页打不开但别人能访问
这种现象通常指向本地缓存中的过期记录,多台设备在同一个局域网内,有人能打开网页有人不能,十有八九是设备没有及时更新域名解析,执行 ipconfig /flushdns 重新建立干净缓存,再去刷新页面,多数情况下可以立刻解决,这条命令只在Windows下生效,macOS用户要执行:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
在较新版本的macOS(Ventura及以后)中,高版本系统简化了缓存重建流程,killall -HUP mDNSResponder 已足够,macOS用户经常在dns缓存查看和清理之间反复切换,实际上查看和清理配合使用效果最好。
修改DNS服务器后没反应
你把DNS地址从114.114.114.114改成223.5.5.5,理论上解析会更快,但实际访问网站依旧走旧解析路线,原因就在于本地缓存保留了之前DNS服务器返回的结果,执行 ipconfig /flushdns 后再用 ipconfig /displaydns 检查,你会发现所有条目已经清空,重新访问网站时系统会向新的DNS服务器发起查询。
如何查看域名解析缓存是否被污染
所谓DNS污染,是指网络链路中返回了错误的IP地址,执行缓存查看命令后,如果发现某个知名域名对应着一串奇怪IP(像是从来没见过、不属于任何知名机构的地址),同时TTL值异常地长,就要警惕了,此时建议先执行清理,再手动指定可信的公共DNS服务器进行解析测试,用 nslookup 对比返回结果。
清除缓存后重新验证
很多人喜欢把清空DNS缓存当成万能方法,实际上操作后还应该验证一下是否真正解决问题,验证的思路很简单:执行完清理命令后,再执行一次查看命令,确认缓存条目已被清空,然后重新加载目标网站。
快速验证清单:
- 清理Windows缓存:
ipconfig /flushdns - 清理macOS缓存:
sudo dscacheutil -flushcache+sudo killall -HUP mDNSResponder - 重新查询解析结果:
nslookup www.example.com - 用浏览器无痕模式访问,排除网页自身缓存干扰
将整个流程完整走一遍,遇到同类问题就能按步骤排查,不必每次都求助于搜索引擎。
域名解析缓存的常见疑问快速解答
查看DNS缓存和清空DNS缓存是一回事吗?
不是,查看DNS缓存记录只是读取当前系统内已有的域名解析结果,不会改变缓存内容,执行查看命令后,缓存条目会原样保留,不会消失,清空DNS缓存则是主动删除所有解析条目,强迫系统重新向DNS服务器发起查询,在排查问题时,建议先查看缓存内容确认问题,再决定是否需要清空。
手机能查看DNS缓存吗?
手机无法像电脑一样直接使用 ipconfig 或 dscacheutil,Android和iOS系统没有开放终端级别的缓存查看接口,普通用户无法通过系统设置查看域名解析缓存内容,不过可以借助第三方开发者的网络诊断类App实现类似功能,日常排查时,把手机切换到飞行模式再关闭,即可刷新网络状态,效果等同于清理缓存。
想知道DNS缓存具体的TTL时间有什么意义?
TTL数值直接决定了一条记录在缓存中保留多久,单位是秒,当DNS服务器的记录更新频率较高时,过长的TTL会让用户持续访问旧IP地址,导致网站内容不一致,从运维角度看,设置合理的TTL值既能保证解析效率,又能降低缓存滞后的风险,对于普通用户来说,通过查看域名解析缓存中的TTL,可以判断一个DNS改动能多快覆盖到全部用户。