如何在Mac上清除DNS缓存? – wiki基地


Mac 系统 DNS 缓存清理全攻略:深入解析与详尽步骤

在日常使用 Mac 电脑上网的过程中,我们很少会去关注一个默默在后台工作的系统——DNS(Domain Name System,域名系统)。然而,这个系统对于我们流畅地访问互联网至关重要。DNS 负责将我们容易记住的网站域名(如 www.google.com)转换成计算机能够理解的 IP 地址(如 172.217.160.142)。为了提高效率,macOS 会像许多其他操作系统一样,将这些查询结果缓存起来,这就是所谓的 DNS 缓存。

虽然 DNS 缓存通常能加速网页加载,但有时它也会引发一些问题,例如无法访问特定网站、网站显示旧内容、或者在更改了网络设置(如更换 DNS 服务器)后未能立即生效。在这些情况下,清除 Mac 上的 DNS 缓存就成了一个必要且有效的解决步骤。

本文将深入探讨 DNS 及其缓存机制,详细说明为何以及何时需要清除 DNS 缓存,并提供适用于不同 macOS 版本的具体清除方法,同时涵盖验证、其他相关清理以及故障排除等内容,旨在为您提供一份全面、详尽的 Mac DNS 缓存清理指南。

一、 理解 DNS 与 DNS 缓存

在深入了解如何清除缓存之前,让我们先花点时间理解 DNS 和 DNS 缓存到底是什么,以及它们为何如此重要。

1. DNS:互联网的“电话簿”

想象一下,互联网是一个巨大的城市,每个网站或在线服务都像这座城市里的一栋建筑。每栋建筑都有一个唯一的地址,即 IP 地址(例如 192.168.1.12001:0db8:85a3:0000:0000:8a2e:0370:7334 这样的 IPv6 地址),计算机通过这些地址来定位和通信。然而,对于人类来说,记住一长串数字是非常困难的。我们更习惯于使用有意义的名字,比如 www.apple.comwww.wikipedia.org

DNS 系统就像是这个巨大城市的电话簿。当你尝试访问一个网站时,你的电脑(或更准确地说,是你的浏览器或应用程序)会向 DNS 服务器发出请求,询问这个域名对应的 IP 地址是什么。DNS 服务器会查找记录,并将正确的 IP 地址返回给你的电脑。有了 IP 地址,你的电脑就能直接连接到托管该网站的服务器,从而加载网页内容。

这个过程通常涉及多个层级的 DNS 服务器(递归解析器、根服务器、顶级域 TLD 服务器、权威名称服务器),但最终目的是一样的:找到域名对应的 IP 地址。

2. DNS 缓存:加速访问的“快捷方式”

每次访问网站都进行完整的 DNS 查询会消耗时间和网络资源。为了提高效率,操作系统、浏览器甚至路由器都会将近期查询过的 DNS 记录(域名与 IP 地址的对应关系)存储在一个临时的本地数据库中,这就是 DNS 缓存。

当您再次访问同一个网站时,系统会首先检查本地的 DNS 缓存。如果找到了有效的记录(即缓存尚未过期),它会直接使用缓存中的 IP 地址,跳过向外部 DNS 服务器查询的步骤。这大大减少了延迟,使得网页加载速度更快,用户体验更好。

DNS 缓存中的每条记录都有一个“生存时间”(Time To Live, TTL),这个值由域名的管理员在 DNS 记录中设置。TTL 告诉缓存系统这条记录可以被缓存多长时间。一旦超过 TTL,缓存记录就会被视为无效,下次访问该域名时,系统将需要重新执行完整的 DNS 查询。

3. DNS 缓存的层级

需要注意的是,DNS 缓存存在于多个层级:

  • 操作系统级缓存 (OS-level Cache): 这是本文主要关注的缓存。macOS 维护着一个系统级的 DNS 缓存,供所有应用程序使用。清除这个缓存会影响整个系统的 DNS 解析行为。
  • 浏览器级缓存 (Browser-level Cache): 现代浏览器(如 Chrome, Firefox, Safari)通常也有自己独立的 DNS 缓存机制,以进一步优化性能。有时,即使清除了系统 DNS 缓存,浏览器可能仍然使用其内部缓存。
  • 应用程序级缓存 (Application-level Cache): 某些特定的网络应用程序(如 Java 虚拟机)也可能维护自己的 DNS 缓存。
  • 路由器级缓存 (Router-level Cache): 您的家庭或办公室路由器通常也扮演着 DNS 转发器或解析器的角色,并可能维护自己的 DNS 缓存。

本文的核心是清除 macOS 操作系统级别的 DNS 缓存。

二、 为何以及何时需要清除 DNS 缓存?

既然 DNS 缓存能提高效率,为什么我们还需要清除它呢?以下是一些常见的原因和场景:

  1. 网站无法访问或加载不正确: 如果一个网站最近更改了其服务器的 IP 地址,而你的 Mac 仍然缓存着旧的、无效的 IP 地址,你可能无法访问该网站,或者看到的是旧版本的、未更新的页面。清除 DNS 缓存会强制你的 Mac 获取最新的 IP 地址。
  2. DNS 缓存投毒 (DNS Cache Poisoning) 或欺骗 (Spoofing): 尽管不常见,但攻击者有可能通过技术手段将错误的 DNS 记录注入到你的缓存中,将你导向恶意的仿冒网站(例如,假的银行登录页面)。清除 DNS 缓存是应对这种情况的安全措施之一,可以确保你获取的是来自权威 DNS 服务器的正确信息。
  3. 更改了 DNS 服务器设置: 如果你手动更改了 Mac 的网络设置,使用了新的 DNS 服务器(例如,从 ISP 默认的 DNS 更换为 Google Public DNS 8.8.8.8 或 Cloudflare DNS 1.1.1.1),旧的缓存记录可能仍然指向之前的 DNS 解析结果。清除缓存能确保系统立即开始使用新的 DNS 服务器进行查询。
  4. 开发和测试需要: 网站开发者或网络管理员在更改了网站的 DNS 记录后,需要清除本地 DNS 缓存以立即看到更改的效果,而不是等待缓存自然过期。
  5. 排除网络连接故障: 当遇到普遍的网络连接问题,特别是某些网站能访问而另一些不能时,清除 DNS 缓存是标准的故障排除步骤之一,可以排除由过时或损坏的缓存记录引起的问题。
  6. 解决“无法找到服务器”或类似的 DNS 错误: 浏览器中出现的这类错误有时仅仅是因为本地 DNS 缓存中的条目已损坏或过时。

总而言之,当你遇到与域名解析相关的网络问题时,清除 DNS 缓存是一个简单、无害且往往非常有效的初步解决方案。

三、 清除 Mac DNS 缓存的准备工作

在开始操作之前,有几点需要注意:

  • 管理员权限: 清除系统级的 DNS 缓存通常需要管理员权限,因为这涉及到修改系统级的服务。确保你登录的是具有管理员权限的 macOS 用户账户,并且知道该账户的密码。在执行命令时,系统会提示你输入密码。
  • 了解你的 macOS 版本: 清除 DNS 缓存的命令会因 macOS 版本的不同而略有差异。你需要知道你当前运行的 macOS 版本。可以通过点击屏幕左上角的苹果菜单 (),然后选择“关于本机”来查看。版本名称(如 Sonoma, Ventura, Monterey, Big Sur, Catalina, Mojave 等)和版本号(如 14.x, 13.x, 12.x, 11.x 等)都会显示出来。
  • 终端 (Terminal): 清除 macOS DNS 缓存的主要方法是通过“终端”应用程序执行命令行指令。“终端”位于“应用程序”文件夹下的“实用工具”文件夹中。你也可以通过 Spotlight 搜索(按下 Command + Space,然后输入 “Terminal”)快速找到并打开它。

四、 如何在 Mac 上清除 DNS 缓存:分步指南

macOS 清除 DNS 缓存的核心操作是使用命令行工具与系统的 DNS 服务进行交互。主要的命令涉及到 dscacheutilkillall -HUP mDNSRespondermDNSResponder 是 macOS 中负责处理 DNS 查询(包括单播 DNS 和多播 DNS/Bonjour)的核心后台进程。向它发送 HUP (Hang Up) 信号会使其重新加载配置并有效地刷新其内部缓存。dscacheutil 是一个用于查询或刷新目录服务缓存(包括 DNS 缓存)的工具。

以下是针对不同 macOS 版本的具体命令和步骤:

重要提示: 在终端中输入密码时,你不会看到任何字符(包括星号或圆点)显示,这是正常的安全特性。只需输入密码,然后按 Enter 键即可。

1. 适用于 macOS Sonoma (14.x), Ventura (13.x), Monterey (12.x), Big Sur (11.x)

对于这些较新的 macOS 版本,推荐使用以下命令组合:

bash
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

步骤:

  1. 打开终端: 前往“应用程序” > “实用工具”,找到并双击打开“终端”。或者使用 Spotlight (Command + Space) 搜索 “Terminal”。
  2. 复制并粘贴命令: 将上面的命令 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder 完整地复制(Command + C)。
  3. 在终端中粘贴并执行: 在终端窗口中,粘贴(Command + V)该命令,然后按下 Enter 键。
  4. 输入管理员密码: 终端会提示你输入密码 (Password:)。输入你当前登录的管理员用户的密码,然后按 Enter 键。(注意:输入时密码不显示)。
  5. 等待执行完成: 命令会执行两个操作:首先使用 dscacheutil 清除缓存,然后向 mDNSResponder 进程发送 HUP 信号。通常这个过程很快完成,完成后终端会显示一个新的提示符,表示命令已执行。你可能不会看到明确的“成功”消息,这是正常的。

命令解释:

  • sudo: 以超级用户(管理员)权限执行后续命令。
  • dscacheutil -flushcache: 调用目录服务缓存工具,并执行 flushcache 操作,清除包括 DNS 缓存 在内的多种缓存。
  • ;: 用于在一行中分隔两个独立的命令。
  • sudo killall -HUP mDNSResponder: 再次使用 sudo 获取权限,killall 命令用于向指定名称的所有进程发送信号。-HUP 是发送 SIGHUP 信号,通知 mDNSResponder 进程重新加载其配置并刷新缓存。

2. 适用于 macOS Catalina (10.15.x), Mojave (10.14.x), High Sierra (10.13.x), Sierra (10.12.x)

对于这些版本的 macOS,命令与更新的版本相同:

bash
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

步骤: 与上述 Sonoma, Ventura, Monterey, Big Sur 的步骤完全相同。

3. 适用于 macOS El Capitan (10.11.x)

对于 El Capitan,命令也是一样的:

bash
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

步骤: 同样遵循上述步骤。

4. 适用于 macOS Yosemite (10.10.x)

从 Yosemite 开始,mDNSResponder 回归并成为主要的 DNS 处理进程。

  • 对于 Yosemite (10.10.4 或更高版本): 使用与较新系统相同的命令:
    bash
    sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

    步骤同上。

  • 对于 Yosemite (10.10 至 10.10.3): 这些早期版本的 Yosemite 使用 discoveryutil
    bash
    sudo discoveryutil mdnsflushcache; sudo discoveryutil udnsflushcaches

    步骤:

    1. 打开终端。
    2. 复制并粘贴上述命令。
    3. 按 Enter。
    4. 输入管理员密码,按 Enter。

5. 适用于 macOS Mavericks (10.9.x), Mountain Lion (10.8.x), Lion (10.7.x)

这些版本的 macOS 使用 killall -HUP mDNSResponder 命令:

bash
sudo killall -HUP mDNSResponder

步骤:

  1. 打开终端。
  2. 复制并粘贴 sudo killall -HUP mDNSResponder 命令。
  3. Enter
  4. 输入管理员密码,按 Enter

6. 适用于 macOS Snow Leopard (10.6.x)

对于 Snow Leopard,命令略有不同:

bash
sudo dscacheutil -flushcache

步骤:

  1. 打开终端。
  2. 复制并粘贴 sudo dscacheutil -flushcache 命令。
  3. Enter
  4. 输入管理员密码,按 Enter

总结与通用建议

可以看出,对于 macOS Sierra (10.12) 及之后的所有版本,通用的命令是:

bash
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

如果你不确定自己的 macOS 版本,或者想要一个几乎适用于所有现代 Mac 的命令,使用这个组合通常是安全和有效的。

五、 如何验证 DNS 缓存是否已清除?

执行完清除命令后,你可能想知道操作是否真的成功了。虽然 dscacheutilkillall -HUP mDNSResponder 命令在成功执行时通常不会输出明确的“成功”消息,但你可以通过以下几种方式间接验证:

  1. 没有错误消息: 如果命令执行后,终端没有返回任何错误信息(如 “command not found” 或权限错误),并且提示符重新出现,那么命令很可能已经成功执行。如果你输入了错误的密码,系统会提示 “Sorry, try again”。
  2. 测试之前有问题的网站: 最直接的方法是尝试访问之前无法加载或显示不正确的网站。如果现在能够正常访问并且内容是最新的,那么清除缓存很可能解决了问题。
  3. 使用 ping 命令:
    • 打开终端。
    • 输入 ping [某个你知道IP地址最近可能改变的域名],例如 ping www.example.com
    • Enter
    • 观察返回的 IP 地址。虽然这不能直接证明缓存已被清除(因为新的查询可能恰好返回相同 IP),但如果你知道某个域名的 IP 应该已经改变,ping 命令现在应该显示新的 IP 地址。
    • Control + C 停止 ping 命令。
  4. 使用 dignslookup 命令(更高级): 这些工具可以执行 DNS 查询。
    • 在终端输入 dig [域名]nslookup [域名]
    • 查看返回结果中的 “Query time”。理论上,清除缓存后的第一次查询可能会比后续(如果结果再次被缓存)的查询时间稍长,因为它需要联系外部 DNS 服务器。但这并不总是显著或可靠的指标。
    • 更重要的是,查询应该返回当前正确的 IP 地址。
  5. 检查 Console 日志(非常规): 你可以打开“应用程序” > “实用工具”中的“控制台”(Console) 应用,尝试在日志中搜索与 mDNSResponder 重启或 DNS 相关的消息。但这通常信息量过大,不适合普通用户。

总的来说,最实用的验证方法还是测试你之前遇到的具体问题是否得到解决

六、 其他相关的缓存清理操作

有时,仅仅清除操作系统的 DNS 缓存可能不足以解决问题,特别是当问题似乎与特定浏览器或整个网络环境有关时。以下是一些可以辅助进行的清理操作:

1. 清除浏览器 DNS 缓存

如前所述,浏览器也维护自己的 DNS 缓存。如果系统 DNS 缓存清除后问题依旧,可以尝试清除浏览器缓存:

  • Google Chrome:

    1. 在地址栏输入 chrome://net-internals/#dns 并按 Enter。
    2. 点击 “Clear host cache” 按钮。
    3. (可选)你可能还需要清除常规的浏览器缓存:进入“设置” > “隐私和安全” > “清除浏览数据”,选择时间范围(如“时间不限”),确保勾选“缓存的图片和文件”,然后点击“清除数据”。
  • Mozilla Firefox:

    1. Firefox 的内部 DNS 缓存管理比较复杂,没有像 Chrome 那样直接的按钮。一种方法是尝试修改配置使其缓存时间变短或禁用,但这通常不推荐。
    2. 更实用的方法是清除其网络相关的常规缓存:进入“设置” > “隐私与安全”,找到“Cookie 和网站数据”部分,点击“清除数据…”,勾选“缓存的 Web 内容”,然后点击“清除”。
    3. 重启 Firefox 浏览器有时也能帮助刷新其内部状态。
  • Apple Safari:

    1. Safari 没有直接暴露给用户的清除 DNS 缓存的选项。
    2. 清除 Safari 的历史记录和网站数据通常会间接影响其缓存行为。进入 Safari 菜单 > “清除历史记录…”,选择要清除的时间范围(如“所有历史记录”),然后点击“清除历史记录”。这会同时清除历史记录、Cookie 和其他网站数据,包括一些缓存。
    3. 或者,进入 Safari > “设置…” > “隐私”选项卡,点击“管理网站数据…”,然后点击“全部移除”。
    4. 启用 Safari 的“开发”菜单(在“设置…” > “高级”中勾选“在菜单栏中显示‘开发’菜单”),然后在“开发”菜单中选择“清空缓存”也是一个选项。

2. 重启 Mac

重启你的 Mac 是一个简单但有时非常有效的解决网络问题的方法。重启会关闭所有正在运行的进程和服务(包括 mDNSResponder),并在启动时重新初始化它们。这个过程自然会清除内存中的临时缓存,包括 DNS 缓存。如果你不熟悉终端命令,或者其他方法无效,尝试重启总是一个好主意。

3. 重启路由器和调制解调器 (Modem)

如果网络问题影响到你家里的所有设备,或者清除 Mac 本地的 DNS 缓存无效,问题可能出在你的路由器上。路由器本身也可能缓存 DNS 记录。

  1. 关闭路由器和调制解调器: 拔掉它们的电源插头。
  2. 等待片刻: 等待大约 30 秒到 1 分钟,让设备完全断电并清除内部缓存。
  3. 重新启动: 先插上调制解调器的电源,等待它完全启动并建立连接(通常指示灯会稳定)。然后再插上路由器的电源,等待它完全启动。
  4. 测试连接: 在你的 Mac 上再次测试网络连接。

七、 故障排除:清除 DNS 缓存后问题仍然存在?

如果你清除了 Mac 的 DNS 缓存(甚至尝试了浏览器缓存清理和重启设备),但网络问题(如无法访问特定网站)依然存在,那么问题可能源于其他方面:

  • 检查网络设置: 确保你的 Mac 的网络设置(在“系统设置” > “网络”中)是正确的。检查 IP 地址、子网掩码、路由器地址以及 DNS 服务器地址是否配置正确(可以选择自动获取 DHCP,或确保手动配置的地址有效)。
  • 检查 Hosts 文件: macOS 有一个 hosts 文件(位于 /private/etc/hosts),它可以手动将域名映射到 IP 地址,其优先级高于 DNS 查询。检查这个文件是否有错误的或恶意的条目,这些条目可能会覆盖正常的 DNS 解析。你可以使用终端命令 cat /private/etc/hosts 查看其内容。编辑此文件需要管理员权限。
  • 防火墙或安全软件: 检查你的防火墙设置(macOS 内建防火墙或第三方安全软件)是否阻止了对特定网站或 DNS 服务器的访问。
  • 代理设置: 如果你配置了网络代理(在“系统设置” > “网络” > 选择你的网络服务 > “详细信息…” > “代理”),确保代理服务器设置正确且工作正常,或者尝试暂时禁用代理看看问题是否解决。
  • ISP 问题: 可能是你的互联网服务提供商 (ISP) 的 DNS 服务器出现了问题。你可以尝试临时更换为公共 DNS 服务器(如 Google DNS 8.8.8.8, 8.8.4.4 或 Cloudflare DNS 1.1.1.1, 1.0.0.1)来测试。如果更换后问题解决,则可能是 ISP 的问题。
  • 网站本身的问题: 目标网站可能确实宕机或存在技术问题。可以尝试从其他设备(如手机,使用移动网络)访问该网站,或者使用在线的“网站宕机检测器”服务来确认。
  • 恶意软件: 某些恶意软件可能会干扰网络连接或 DNS 解析。运行一次可靠的反恶意软件扫描。
  • 网络硬件问题: 检查你的网线、Wi-Fi 信号、路由器或调制解调器本身是否存在硬件故障。

八、 总结

清除 DNS 缓存是 Mac 用户解决特定网络连接问题(尤其是与域名解析相关的错误)的一个重要工具。虽然听起来技术性较强,但通过使用“终端”应用程序执行一个简单的命令即可完成。

关键要点回顾:

  • DNS 缓存存储了域名到 IP 地址的映射,以加速网页访问。
  • 当缓存过时、损坏或被投毒时,可能导致网站无法访问、显示错误内容或安全风险。
  • 清除 DNS 缓存可以强制 Mac 获取最新的 DNS 记录。
  • 主要方法是使用终端命令,具体命令因 macOS 版本而异,但对于 macOS Sierra (10.12) 及更新版本,通用命令是 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
  • 执行命令需要管理员密码,输入密码时不可见。
  • 验证缓存是否清除的最佳方法是测试之前遇到的问题是否解决。
  • 辅助操作包括清除浏览器缓存、重启 Mac、重启路由器和调制解调器。
  • 如果问题依然存在,需考虑其他潜在原因,如网络设置、hosts 文件、防火墙、ISP 问题或网站本身的问题。

掌握如何清除 Mac 上的 DNS 缓存,能让你在遇到相关网络小麻烦时,多一个简单有效的自行解决手段,提升你的 Mac 使用体验和问题排查能力。希望这篇详尽的指南对您有所帮助!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部