Windows 客户端 DNS 缓存
Windows 会缓存最近解析过的域名,并在记录 TTL 到期前直接使用缓存值。运维改了 DNS 记录、客户端却仍然访问旧地址,绝大多数就是这层客户端缓存在起作用。ipconfig /displaydns 能把条目、剩余 TTL 与来源一并列出,是判断「本机缓存旧」还是「服务器未更新」的直接证据。
排查顺序
先 displaydns 看有没有目标域名的条目以及剩余 TTL;再向权威或指定服务器查询,确认记录是否已生效;两者不一致时刷新本机缓存后复测。注意浏览器、.NET 应用、Java 虚拟机等还会维护各自的进程级缓存,本机缓存清了但应用没重启,仍可能看到旧地址。
查看与刷新
查看与刷新
ipconfig /displaydns | Select-String -Pattern 'example.com' -Context 0,6 # 看条目与剩余 TTL
Get-DnsClientCache -Name example.com # PowerShell 版缓存查看
Resolve-DnsName example.com -Server 8.8.8.8 # 指定服务器看当前真实记录
ipconfig /flushdns # 刷新客户端解析缓存
Clear-DnsClientCache # PowerShell 版清缓存
Get-DnsClientServerAddress -AddressFamily IPv4 # 核对当前使用的 DNS 服务器输出字段读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| Record Name | 被缓存的域名 | 确认是否有目标域名条目 |
| Record Type | 记录类型,如 A 或 CNAME | 确认查到的是地址记录而非别名 |
| Time To Live | 剩余缓存时长(秒) | 剩得越多久说明刚查过,条目很新 |
| Data Length | 记录数据长度 | 只能作辅助信息,不用于判断 |
| A (Host) Record | 缓存的地址值 | 与权威查询结果对比即可定位差异 |
| 来源段 | 条目来自 DNS 还是 hosts 文件 | 区分本机写死与本机缓存 |
典型使用场景
- 切换站点 IP 后部分用户仍访问旧地址:先确认是不是客户端缓存
- 排查解析异常:对比本机缓存结果与指定服务器直查结果,定位差异层级
- 域名迁移或下线:清理残留缓存避免流量继续打到已停用地址
- 上线前验证:刷新缓存后重新解析,确保拿到最新记录
- 多台机器表现不一致:逐台比对缓存条目与剩余 TTL,找出异常来源
刷新缓存只是清掉本机副本,若权威记录本身尚未生效,新查询会立刻又把旧值取回来;所以刷新后必须立即复测并把结果与权威查询比对。
刷新后仍看到旧地址时,需要同时排查 hosts 文件与上游 DNS 的缓存:三层缓存(权威、递归、客户端)任一层没过期都会给出旧结果。