完整教程:如何清除 DNS 缓存?深入解析与跨平台指南
在日常网络使用中,我们频繁地通过域名(例如 www.google.com
)访问网站或服务。然而,计算机并不直接通过域名进行通信,而是通过 IP 地址(例如 172.217.160.142
)。将域名翻译成 IP 地址的过程,就是由域名系统(DNS,Domain Name System)来完成的。为了加快这一翻译过程,我们的操作系统、浏览器甚至路由器都会存储一个临时记录,这就是 DNS 缓存。
虽然 DNS 缓存极大地提高了网络访问速度,但有时它也会成为问题。当一个网站的 IP 地址发生变化,而你的设备却仍然使用旧的缓存记录时,你可能会遇到网站无法访问、加载错误页面、跳转到错误地址等问题。在这种情况下,“清除 DNS 缓存”(或称“刷新 DNS 缓存”)就成为了一个重要的故障排除步骤。
本文将带你深入了解 DNS 缓存是什么、为什么需要清除它,并提供在主流操作系统(Windows、macOS、Linux)和常见浏览器上清除 DNS 缓存的详细步骤。
第一部分:理解 DNS 和 DNS 缓存
在深入讲解如何清除缓存之前,让我们先理解一下 DNS 的工作原理以及 DNS 缓存扮演的角色。
什么是 DNS?
DNS 是互联网的一项核心服务,它就像互联网的电话簿。当你在浏览器中输入一个网址(域名)时,你的计算机需要知道这个域名对应的 IP 地址才能连接到正确的服务器。DNS 的作用就是将人类易于记忆的域名转换为机器可识别的 IP 地址。
这个过程通常是这样的:
- 你在浏览器中输入
www.example.com
。 - 你的操作系统会首先检查自己的本地 DNS 缓存,看看是否有
www.example.com
的 IP 地址记录。 - 如果本地缓存中有记录,并且记录尚未过期(DNS 记录有一个“生存时间” TTL,Time To Live),系统会直接使用这个 IP 地址发起连接。
- 如果本地缓存中没有记录或记录已过期,系统会将请求发送给配置的 DNS 服务器(通常是你的路由器,然后路由器会转发给你的 ISP 的 DNS 服务器,或者你手动配置的公共 DNS 服务器,如 Google DNS 8.8.8.8 或 Cloudflare DNS 1.1.1.1)。
- DNS 服务器会进行一系列查询(如果它自己也没有缓存),最终找到
www.example.com
对应的 IP 地址。 - DNS 服务器将 IP 地址返回给你的计算机。
- 你的操作系统将这个 IP 地址存储在本地 DNS 缓存中,并将其提供给浏览器,然后浏览器使用这个 IP 地址与服务器建立连接。
整个过程通常在毫秒级别完成,对于用户来说是透明的。
什么是 DNS 缓存?
DNS 缓存就是你的设备(操作系统、浏览器等)在接收到 DNS 查询结果后,将其临时存储在本地硬盘或内存中的一个数据库。存储的内容通常包括:
- 域名 (Hostname)
- 对应的 IP 地址 (IP Address)
- 记录类型 (Record Type,如 A、AAAA、CNAME 等)
- 生存时间 (TTL,Time To Live)
DNS 缓存的主要目的是提高访问速度。如果没有缓存,每次访问同一个域名,你的设备都需要重复完整的 DNS 查询过程,这会增加延迟。通过缓存,对于频繁访问的域名,可以直接从本地获取 IP 地址,显著减少了等待时间,提高了网页加载速度。
DNS 缓存存储在哪里?
DNS 缓存可以存储在几个不同的地方:
- 操作系统 (OS) 级别: 这是最常见的 DNS 缓存位置。操作系统维护一个系统级的 DNS 缓存,供所有应用程序使用。清除这个缓存是最彻底的本地 DNS 缓存清理方式。
- 浏览器级别: 一些浏览器(如 Chrome、Edge)为了进一步提高速度,也会维护自己的 DNS 缓存。这个缓存独立于操作系统级别的缓存。
- 路由器级别: 你的家庭或办公室路由器也可能有自己的 DNS 缓存。它会缓存其处理过的 DNS 请求,以便为连接到它的所有设备提供更快的响应。
- ISP 级别: 你的互联网服务提供商 (ISP) 的 DNS 服务器也有缓存。
本文主要关注操作系统和浏览器级别的 DNS 缓存清除方法。
第二部分:为什么需要清除 DNS 缓存?
虽然 DNS 缓存通常是有益的,但在特定情况下,清除它变得非常必要:
- 网站 IP 地址变更: 如果一个网站或服务迁移到了新的服务器,其对应的 IP 地址会发生变化。如果你的本地 DNS 缓存仍然存储着旧的 IP 地址(尤其是在 TTL 过期之前),你将无法连接到新的服务器,导致访问失败或错误。清除缓存可以强制系统重新进行 DNS 查询,获取新的 IP 地址。
- DNS 劫持或缓存污染: 在极少数情况下,你的 DNS 缓存可能被恶意篡改(DNS 劫持),将某个域名指向错误的或恶意的 IP 地址(DNS 缓存污染)。这可能导致你访问虚假网站、被重定向到恶意页面或信息被窃取。清除缓存可以移除这些被污染的记录。
- 无法访问特定网站: 当你确定某个网站正常运行(其他人可以访问),但你却无法访问时,本地 DNS 缓存问题可能是原因之一。清除缓存往往能解决这类问题。
- 网络连接故障排除: DNS 问题是导致网络连接问题的常见原因之一。在诊断网络故障时,清除 DNS 缓存通常是建议尝试的第一步。
- 应用商店或服务更新: 有时,应用商店、游戏服务器或其他在线服务的连接问题也可能与过时的 DNS 缓存有关。
简而言之,当你怀疑由于域名解析问题导致网络连接出现异常时,清除 DNS 缓存是一个简单且有效的故障排除手段。
第三部分:在不同操作系统上清除 DNS 缓存
清除操作系统级别的 DNS 缓存是最彻底的本地 DNS 缓存清理方式,它会影响到所有使用系统 DNS 服务的应用程序。以下是在主流操作系统上的操作步骤:
1. 在 Windows 上清除 DNS 缓存
Windows 使用 ipconfig
命令来管理网络配置,包括 DNS 缓存。这个命令在几乎所有现代 Windows 版本(Windows 11, 10, 8, 7, Vista, XP)中都是通用的。
步骤:
-
打开命令提示符(以管理员身份运行):
- 点击屏幕左下角的“开始”按钮。
- 在搜索栏中输入
cmd
或命令提示符
。 - 在搜索结果中找到“命令提示符”应用,右键点击它。
- 选择“以管理员身份运行”。
- 如果出现用户账户控制(UAC)提示,点击“是”允许程序运行。
- 为什么要以管理员身份运行? 清除系统级的 DNS 缓存需要管理员权限。
-
输入并执行清除缓存的命令:
- 在打开的命令提示符窗口中,会看到一个黑色的窗口,光标在闪烁。
- 输入以下命令,然后按下回车键(Enter):
bash
ipconfig /flushdns
-
确认清除成功:
-
执行命令后,如果操作成功,你将看到如下所示的输出消息:
“`
Windows IP ConfigurationSuccessfully flushed the DNS Resolver Cache.
“`
* 这表示你的 Windows 系统 DNS 缓存已经成功清除。
-
相关命令(可选):
ipconfig /displaydns
: 在清除缓存之前或之后,你可以使用这个命令来查看当前的 DNS 缓存内容。执行这个命令后,系统会将缓存中的所有记录列出来,通常会非常长。这有助于你确认缓存是否被清除(清除后再次执行此命令,列表应该为空或包含极少数基本记录)。ipconfig /registerdns
: 刷新所有 DHCP 租约并重新注册 DNS 名称。在某些 DNS 解析问题无法通过flushdns
解决时可以尝试。ipconfig /release
和ipconfig /renew
: 释放并重新获取 IP 地址。这通常用于解决 IP 地址相关的网络问题,有时也间接影响 DNS 配置的更新。
清除后的注意事项:
- 清除缓存后,第一次访问某些网站可能会感觉稍慢,因为系统需要重新执行完整的 DNS 查询过程。但随后的访问就会恢复正常速度。
- 如果问题仍然存在,请检查你的 Hosts 文件(位于
C:\Windows\System32\drivers\etc\hosts
)。Hosts 文件中的记录会优先于 DNS 缓存和外部 DNS 查询。
2. 在 macOS 上清除 DNS 缓存
macOS 清除 DNS 缓存的命令会根据 macOS 版本有所不同。这是因为苹果在不同版本中使用了不同的 DNS 缓存服务。以下是针对近期 macOS 版本的常用命令。
步骤:
-
打开终端 (Terminal):
- 前往“应用程序”文件夹,然后进入“实用工具”文件夹。
- 找到并双击“终端”应用。或者使用 Spotlight 搜索(按下
Command + Space
,输入终端
或Terminal
)。
-
输入并执行清除缓存的命令(根据你的 macOS 版本):
-
在终端窗口中,输入适用于你的 macOS 版本的命令。请注意,这些命令通常需要管理员权限,因此需要使用
sudo
,并在提示时输入你的用户密码(输入时密码不会显示)。 -
macOS Ventura (13) 及更高版本, Monterey (12), Big Sur (11):
这是目前最常见的命令组合,它会停止并重启负责 DNS 缓存的服务mDNSResponder
和UniversalAccessMIGServer
:
bash
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder; sudo killall -HUP mDNSResponderHelper; sudo killall -HUP sourceboard
输入此命令后按回车,系统会提示你输入用户密码。输入密码后再次按回车。 -
macOS Catalina (10.15), Mojave (10.14), High Sierra (10.13), Sierra (10.12):
这个版本通常只需要刷新mDNSResponder
服务:
bash
sudo killall -HUP mDNSResponder
输入此命令后按回车,然后输入用户密码并按回车。 -
macOS El Capitan (10.11), Yosemite (10.10):
这个版本需要刷新mDNSResponder
和lookupd
服务:
bash
sudo discoveryutil mdnsflushcache; sudo discoveryutil udnsflushcaches
输入此命令后按回车,然后输入用户密码并按回车。 -
macOS Mavericks (10.9):
bash
dscacheutil -flushcache; sudo killall -HUP mDNSResponder
输入此命令后按回车,然后输入用户密码并按回车。 -
macOS Lion (10.7), Mountain Lion (10.8):
bash
sudo killall -HUP mDNSResponder
输入此命令后按回车,然后输入用户密码并按回车。 -
macOS Snow Leopard (10.6):
bash
sudo dscacheutil -flushcache
输入此命令后按回车,然后输入用户密码并按回车。
-
-
确认清除成功:
- macOS 的终端在执行这些命令后通常不会显示“成功”的消息。如果命令执行时没有出现错误提示,且返回了新的命令行提示符,通常就表示命令已成功执行。
提示: 如果你不确定自己的 macOS 版本,可以点击屏幕左上角的苹果菜单,选择“关于本机”来查看。选择适用于你版本的命令即可。
3. 在 Linux 上清除 DNS 缓存
Linux 清除 DNS 缓存的方法差异较大,因为它取决于你使用的 Linux 发行版以及该发行版配置的 DNS 缓存服务。一些发行版默认不开启系统级 DNS 缓存,而另一些则使用 nscd
、dnsmasq
、systemd-resolved
等服务。
步骤:
-
打开终端 (Terminal):
- 通常可以在应用程序菜单中找到“终端”或使用快捷键(如
Ctrl + Alt + T
)。
- 通常可以在应用程序菜单中找到“终端”或使用快捷键(如
-
确定你使用的 DNS 缓存服务(如果存在):
- 这是 Linux 下的关键一步。不同的服务有不同的清除或重启命令。常用的检查方法是查看哪些相关的服务正在运行:
bash
sudo systemctl status systemd-resolved # 检查是否使用了 systemd-resolved
sudo systemctl status nscd # 检查是否使用了 nscd
sudo systemctl status dnsmasq # 检查是否使用了 dnsmasq
ps aux | grep dnsmasq # 另一种检查 dnsmasq 的方法 - 输入这些命令后按回车,并输入你的用户密码(如果提示)。如果服务正在运行,你会在输出中看到其状态信息。
- 这是 Linux 下的关键一步。不同的服务有不同的清除或重启命令。常用的检查方法是查看哪些相关的服务正在运行:
-
根据识别的服务执行清除或重启命令:
-
对于
systemd-resolved
:
这是许多现代 Linux 发行版(如 Ubuntu 17.04+、Fedora 25+、Debian 9+)的默认 DNS 解决方案,它包含 DNS 缓存功能。你可以使用以下命令清除缓存:
bash
sudo systemd-resolve --flush-caches
或者,重启服务也可以达到清除缓存的目的(这会中断所有当前使用该服务进行 DNS 查询的连接):
bash
sudo systemctl restart systemd-resolved
输入命令后按回车,输入密码。 -
对于
nscd
(Name Service Cache Daemon):
这个服务在一些较旧或企业级发行版中常见。清除缓存通常需要重启服务:
bash
sudo systemctl restart nscd
# 或者对于使用 init.d 的旧系统:
# sudo /etc/init.d/nscd restart
输入命令后按回车,输入密码。 -
对于
dnsmasq
:
dnsmasq
通常用作本地网络的小型 DNS 转发和 DHCP 服务器,它也有缓存功能。清除缓存通常需要重启服务:
bash
sudo systemctl restart dnsmasq
# 或者对于使用 init.d 的旧系统:
# sudo /etc/init.d/dnsmasq restart
输入命令后按回车,输入密码。 -
对于其他服务或没有系统级缓存的情况:
有些发行版可能使用其他 DNS 缓存服务,或者默认不启用系统级缓存。如果你的系统没有运行上述任何服务,那么很可能没有系统级的 DNS 缓存需要清除(或者它的缓存集成在其他网络管理工具中,不方便直接清除)。在这种情况下,你可能只需要关注浏览器级的缓存。
如果你确定使用了某个缓存服务但不知道如何清除,通常可以尝试重启该服务:sudo systemctl restart [服务名称]
或sudo service [服务名称] restart
。
-
-
确认清除成功:
- 类似 macOS,Linux 终端执行这些命令后通常不会有明确的“成功”消息。没有错误输出通常意味着命令成功执行。
Linux 的复杂性: Linux 的灵活性意味着配置差异很大。上述是最常见的几种情况。如果你不确定如何操作,可以查阅你的 Linux 发行版的文档,或者在相关的社区/论坛寻求帮助,说明你的发行版和遇到的具体问题。
第四部分:在常见浏览器中清除 DNS 缓存
除了操作系统,一些浏览器也会维护自己的 DNS 缓存。清除浏览器缓存通常不会影响到其他应用程序,只影响该浏览器。
1. Google Chrome 和 Microsoft Edge
由于 Edge 现在基于 Chromium 内核,Chrome 和 Edge 清除 DNS 缓存的方法是相同的。
步骤:
- 打开浏览器。
- 在地址栏输入特定的内部 URL:
- 对于 Chrome:输入
chrome://net-internals/#dns
- 对于 Edge:输入
edge://net-internals/#dns
- 按下回车键(Enter)。
- 对于 Chrome:输入
-
清除缓存:
- 页面加载后,你会看到一个关于网络内部信息和测试的界面。
- 在左侧菜单中(或顶部),选择 “DNS”。
- 在 DNS 部分,你会看到当前缓存的 DNS 条目列表(如果存在)。
- 点击列表上方的 “Clear host cache”(清除主机缓存) 按钮。
-
确认清除:
- 点击按钮后,按钮旁边的列表会清空。这表示浏览器的 DNS 缓存已成功清除。
注意: 这个界面还提供了其他网络相关的调试工具,请小心操作,不要随意点击其他按钮,以免影响浏览器设置。
2. Mozilla Firefox
Firefox 处理 DNS 缓存的方式与 Chrome/Edge 不同。它更多地依赖于操作系统的 DNS 缓存。Firefox 自身的 DNS 缓存大小可以通过 about:config
进行配置,但没有一个直接的按钮来“刷新”它。
如何影响 Firefox 的 DNS 缓存:
- 重启浏览器: 关闭并重新打开 Firefox 是清除其内部 DNS 缓存的最简单方法。
- 清除浏览器缓存(包含网络缓存): 清除 Firefox 的普通浏览器缓存通常也包括网络相关的缓存数据,这间接影响 DNS 查找。
- 点击菜单按钮(通常是右上角的三条横线)。
- 选择“设置”(或“选项”)。
- 在左侧菜单选择“隐私与安全”。
- 在“Cookie 和站点数据”或“缓存的 Web 内容”部分,点击“清除数据”。
- 确保勾选了“缓存的 Web 内容”。你也可以选择清除其他项目,但至少要勾选这个。
- 点击“清除”按钮。
- 修改
about:config
设置 (高级用户):- 在地址栏输入
about:config
并按回车。 - 接受风险提示。
- 在搜索框中输入
network.dnsCacheEntries
。这个设置控制 Firefox 缓存的 DNS 条目数量。将其设置为 0 会禁用浏览器级的 DNS 缓存(不推荐用于日常使用,因为会降低速度),设置为 0 然后改回默认值(通常是 400)可以间接清空当前缓存。 - 搜索
network.dnsCacheExpiration
(缓存过期时间,单位秒) 和network.dnsCacheExpirationGracePeriod
(宽限期)。修改这些值也可以影响缓存行为,但不直接清除。 - 注意: 修改
about:config
设置可能会影响浏览器性能或稳定性,请谨慎操作,最好在了解其作用后再进行修改。重启浏览器通常是最安全的清除 Firefox DNS 缓存的方法。
- 在地址栏输入
3. Apple Safari
Safari 在 macOS 上运行时,主要依赖于 macOS 操作系统的 DNS 缓存。清除 macOS 的系统 DNS 缓存(如前文所述)是影响 Safari DNS 解析的主要方法。Safari 本身没有独立的、用户可直接清除的 DNS 缓存界面或功能。
影响 Safari DNS 的方法:
- 清除 macOS 系统 DNS 缓存: 这是最有效的方法。
- 清除 Safari 历史记录和网站数据:
- 打开 Safari。
- 点击菜单栏的“Safari”。
- 选择“清除历史记录…”。
- 选择清除的时间范围,然后点击“清除历史记录”。
- 或者,点击菜单栏的“Safari”,选择“偏好设置”,进入“隐私”标签页,点击“管理网站数据”,然后点击“移除所有”。
虽然这主要清除 Cookie、缓存文件等,但也可能间接影响一些与网站连接相关的临时数据。
- 重启 Safari 浏览器。
第五部分:当清除 DNS 缓存无效时怎么办?
如果你清除了操作系统和浏览器的 DNS 缓存后问题依然存在,这说明问题可能不在你的本地缓存。以下是一些可能的后续排查方向:
-
检查 Hosts 文件: Hosts 文件中的记录会优先于 DNS 查询。如果 Hosts 文件中有一个错误的条目指向了你无法访问的域名,它会阻止正常的 DNS 解析。
- Windows: 文件位于
C:\Windows\System32\drivers\etc\hosts
,需要管理员权限才能修改。 - macOS 和 Linux: 文件位于
/etc/hosts
,需要管理员权限才能修改。
使用文本编辑器(以管理员身份)打开 Hosts 文件,检查是否有关于目标域名的条目,删除或注释掉(在行首添加#
)任何可疑或错误的条目。
- Windows: 文件位于
-
重启路由器: 你的家庭或办公室路由器也可能缓存 DNS 信息。简单地重启路由器(拔掉电源等待几十秒再插上)可以清除路由器的缓存,并可能从 ISP 获取最新的 DNS 配置。
-
尝试使用不同的 DNS 服务器: 你的 ISP 提供的 DNS 服务器可能存在问题,或者缓存了旧的记录。你可以尝试将设备的 DNS 设置更改为公共 DNS 服务器,例如:
- Google Public DNS:
8.8.8.8
和8.8.4.4
- Cloudflare DNS:
1.1.1.1
和1.0.0.1
- 阿里云公共 DNS:
223.5.5.5
和223.6.6.6
更改 DNS 服务器的设置通常在操作系统的网络适配器设置中完成。
- Google Public DNS:
-
使用
nslookup
或dig
命令诊断: 这些命令行工具可以直接查询 DNS 服务器,帮助你诊断是本地解析问题还是上游 DNS 服务器的问题。- Windows: 打开命令提示符,输入
nslookup [域名]
,例如nslookup www.example.com
。它会显示你的 DNS 服务器以及查询到的 IP 地址。 - macOS 和 Linux: 打开终端,输入
dig [域名]
,例如dig www.example.com
。它提供更详细的 DNS 查询信息。
你可以尝试查询目标域名,并与已知正确的 IP 地址进行对比,或者尝试指定不同的 DNS 服务器进行查询(例如nslookup www.example.com 8.8.8.8
或dig @8.8.8.8 www.example.com
)。
- Windows: 打开命令提示符,输入
-
检查防火墙或安全软件: 防火墙、杀毒软件或安全代理有时会阻止或篡改网络连接,包括 DNS 查询。尝试临时禁用它们进行测试(请注意安全风险)。
-
联系网站管理员或服务提供商: 如果只有特定网站或服务有问题,可能是服务器端的问题,联系服务提供商确认。
-
联系你的 ISP: 如果广泛的网站访问都有问题,并且你排除了本地设备和路由器的问题,问题可能出在你的 ISP 的网络或 DNS 服务器上。
第六部分:DNS 缓存的 TTL (生存时间)
在讨论清除 DNS 缓存时,理解 TTL(Time To Live,生存时间)的概念很重要。每个 DNS 记录都有一个关联的 TTL 值,由域名所有者在权威 DNS 服务器上设置。TTL 告诉缓存 DNS 服务器(包括你的本地系统和浏览器)该记录可以缓存多久。
例如,如果一个域名的 A 记录 TTL 设置为 3600 秒(1小时),那么你的系统在查询到这个记录后,会将其缓存 1小时。在这一小时内,所有对该域名的查询都会直接使用缓存中的 IP 地址,而不会再次进行 DNS 查询。1小时后,如果再次访问该域名,缓存记录过期,系统会重新发起 DNS 查询来获取最新的 IP 地址。
清除 DNS 缓存本质上是忽略了记录的 TTL,强制提前使所有缓存记录失效。这在你怀疑缓存信息是旧的或错误的时候非常有用。
网站管理员在更改 IP 地址时,通常会提前降低 TTL 值(例如降到 300 秒或更低),以便旧记录更快过期,从而减少用户访问到旧地址的时间。但在用户端,如果你等不及 TTL 自然过期,或者怀疑 TTL 设置有问题,手动清除缓存是最直接的方法。
第七部分:总结
DNS 缓存是提高互联网访问速度的一项重要机制,但当缓存中的信息过时或错误时,就可能导致网络连接问题。了解如何在你的设备上清除 DNS 缓存是一项实用的网络故障排除技能。
本文详细介绍了在 Windows、macOS 和 Linux 这三大主流操作系统上清除 DNS 缓存的命令行方法,以及在 Chrome、Edge 和 Firefox 这几个常用浏览器中清除其独立 DNS 缓存的步骤。记住,操作系统级的清除通常是最全面和有效的。
当你遇到以下情况时,可以首先尝试清除 DNS 缓存:
- 访问某个网站时出现“无法找到服务器”、“页面加载错误”等提示,但你确认网站正常运行。
- 网站近期更改了 IP 地址,你无法访问新地址。
- 怀疑存在 DNS 劫持或缓存污染。
- 进行一般的网络连接故障排除。
如果清除 DNS 缓存未能解决问题,请不要灰心,按照本文第五部分提供的方向继续排查,包括检查 Hosts 文件、重启路由器、尝试更换 DNS 服务器等。通过这些步骤,你有很大机会解决由 DNS 问题引起的网络访问障碍。
掌握这些技能,可以让你更有效地管理自己的网络连接,解决常见的上网难题。希望这篇完整的教程对你有所帮助!