如何清除 DNS 缓存?完整教程 – wiki基地


完整教程:如何清除 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 地址。

这个过程通常是这样的:

  1. 你在浏览器中输入 www.example.com
  2. 你的操作系统会首先检查自己的本地 DNS 缓存,看看是否有 www.example.com 的 IP 地址记录。
  3. 如果本地缓存中有记录,并且记录尚未过期(DNS 记录有一个“生存时间” TTL,Time To Live),系统会直接使用这个 IP 地址发起连接。
  4. 如果本地缓存中没有记录或记录已过期,系统会将请求发送给配置的 DNS 服务器(通常是你的路由器,然后路由器会转发给你的 ISP 的 DNS 服务器,或者你手动配置的公共 DNS 服务器,如 Google DNS 8.8.8.8 或 Cloudflare DNS 1.1.1.1)。
  5. DNS 服务器会进行一系列查询(如果它自己也没有缓存),最终找到 www.example.com 对应的 IP 地址。
  6. DNS 服务器将 IP 地址返回给你的计算机。
  7. 你的操作系统将这个 IP 地址存储在本地 DNS 缓存中,并将其提供给浏览器,然后浏览器使用这个 IP 地址与服务器建立连接。

整个过程通常在毫秒级别完成,对于用户来说是透明的。

什么是 DNS 缓存?

DNS 缓存就是你的设备(操作系统、浏览器等)在接收到 DNS 查询结果后,将其临时存储在本地硬盘或内存中的一个数据库。存储的内容通常包括:

  • 域名 (Hostname)
  • 对应的 IP 地址 (IP Address)
  • 记录类型 (Record Type,如 A、AAAA、CNAME 等)
  • 生存时间 (TTL,Time To Live)

DNS 缓存的主要目的是提高访问速度。如果没有缓存,每次访问同一个域名,你的设备都需要重复完整的 DNS 查询过程,这会增加延迟。通过缓存,对于频繁访问的域名,可以直接从本地获取 IP 地址,显著减少了等待时间,提高了网页加载速度。

DNS 缓存存储在哪里?

DNS 缓存可以存储在几个不同的地方:

  1. 操作系统 (OS) 级别: 这是最常见的 DNS 缓存位置。操作系统维护一个系统级的 DNS 缓存,供所有应用程序使用。清除这个缓存是最彻底的本地 DNS 缓存清理方式。
  2. 浏览器级别: 一些浏览器(如 Chrome、Edge)为了进一步提高速度,也会维护自己的 DNS 缓存。这个缓存独立于操作系统级别的缓存。
  3. 路由器级别: 你的家庭或办公室路由器也可能有自己的 DNS 缓存。它会缓存其处理过的 DNS 请求,以便为连接到它的所有设备提供更快的响应。
  4. ISP 级别: 你的互联网服务提供商 (ISP) 的 DNS 服务器也有缓存。

本文主要关注操作系统和浏览器级别的 DNS 缓存清除方法。

第二部分:为什么需要清除 DNS 缓存?

虽然 DNS 缓存通常是有益的,但在特定情况下,清除它变得非常必要:

  1. 网站 IP 地址变更: 如果一个网站或服务迁移到了新的服务器,其对应的 IP 地址会发生变化。如果你的本地 DNS 缓存仍然存储着旧的 IP 地址(尤其是在 TTL 过期之前),你将无法连接到新的服务器,导致访问失败或错误。清除缓存可以强制系统重新进行 DNS 查询,获取新的 IP 地址。
  2. DNS 劫持或缓存污染: 在极少数情况下,你的 DNS 缓存可能被恶意篡改(DNS 劫持),将某个域名指向错误的或恶意的 IP 地址(DNS 缓存污染)。这可能导致你访问虚假网站、被重定向到恶意页面或信息被窃取。清除缓存可以移除这些被污染的记录。
  3. 无法访问特定网站: 当你确定某个网站正常运行(其他人可以访问),但你却无法访问时,本地 DNS 缓存问题可能是原因之一。清除缓存往往能解决这类问题。
  4. 网络连接故障排除: DNS 问题是导致网络连接问题的常见原因之一。在诊断网络故障时,清除 DNS 缓存通常是建议尝试的第一步。
  5. 应用商店或服务更新: 有时,应用商店、游戏服务器或其他在线服务的连接问题也可能与过时的 DNS 缓存有关。

简而言之,当你怀疑由于域名解析问题导致网络连接出现异常时,清除 DNS 缓存是一个简单且有效的故障排除手段。

第三部分:在不同操作系统上清除 DNS 缓存

清除操作系统级别的 DNS 缓存是最彻底的本地 DNS 缓存清理方式,它会影响到所有使用系统 DNS 服务的应用程序。以下是在主流操作系统上的操作步骤:

1. 在 Windows 上清除 DNS 缓存

Windows 使用 ipconfig 命令来管理网络配置,包括 DNS 缓存。这个命令在几乎所有现代 Windows 版本(Windows 11, 10, 8, 7, Vista, XP)中都是通用的。

步骤:

  1. 打开命令提示符(以管理员身份运行):

    • 点击屏幕左下角的“开始”按钮。
    • 在搜索栏中输入 cmd命令提示符
    • 在搜索结果中找到“命令提示符”应用,右键点击它。
    • 选择“以管理员身份运行”。
    • 如果出现用户账户控制(UAC)提示,点击“是”允许程序运行。
    • 为什么要以管理员身份运行? 清除系统级的 DNS 缓存需要管理员权限。
  2. 输入并执行清除缓存的命令:

    • 在打开的命令提示符窗口中,会看到一个黑色的窗口,光标在闪烁。
    • 输入以下命令,然后按下回车键(Enter):
      bash
      ipconfig /flushdns
  3. 确认清除成功:

    • 执行命令后,如果操作成功,你将看到如下所示的输出消息:
      “`
      Windows IP Configuration

      Successfully flushed the DNS Resolver Cache.
      “`
      * 这表示你的 Windows 系统 DNS 缓存已经成功清除。

相关命令(可选):

  • ipconfig /displaydns: 在清除缓存之前或之后,你可以使用这个命令来查看当前的 DNS 缓存内容。执行这个命令后,系统会将缓存中的所有记录列出来,通常会非常长。这有助于你确认缓存是否被清除(清除后再次执行此命令,列表应该为空或包含极少数基本记录)。
  • ipconfig /registerdns: 刷新所有 DHCP 租约并重新注册 DNS 名称。在某些 DNS 解析问题无法通过 flushdns 解决时可以尝试。
  • ipconfig /releaseipconfig /renew: 释放并重新获取 IP 地址。这通常用于解决 IP 地址相关的网络问题,有时也间接影响 DNS 配置的更新。

清除后的注意事项:

  • 清除缓存后,第一次访问某些网站可能会感觉稍慢,因为系统需要重新执行完整的 DNS 查询过程。但随后的访问就会恢复正常速度。
  • 如果问题仍然存在,请检查你的 Hosts 文件(位于 C:\Windows\System32\drivers\etc\hosts)。Hosts 文件中的记录会优先于 DNS 缓存和外部 DNS 查询。

2. 在 macOS 上清除 DNS 缓存

macOS 清除 DNS 缓存的命令会根据 macOS 版本有所不同。这是因为苹果在不同版本中使用了不同的 DNS 缓存服务。以下是针对近期 macOS 版本的常用命令。

步骤:

  1. 打开终端 (Terminal):

    • 前往“应用程序”文件夹,然后进入“实用工具”文件夹。
    • 找到并双击“终端”应用。或者使用 Spotlight 搜索(按下 Command + Space,输入 终端Terminal)。
  2. 输入并执行清除缓存的命令(根据你的 macOS 版本):

    • 在终端窗口中,输入适用于你的 macOS 版本的命令。请注意,这些命令通常需要管理员权限,因此需要使用 sudo,并在提示时输入你的用户密码(输入时密码不会显示)。

    • macOS Ventura (13) 及更高版本, Monterey (12), Big Sur (11):
      这是目前最常见的命令组合,它会停止并重启负责 DNS 缓存的服务 mDNSResponderUniversalAccessMIGServer
      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):
      这个版本需要刷新 mDNSResponderlookupd 服务:
      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

      输入此命令后按回车,然后输入用户密码并按回车。

  3. 确认清除成功:

    • macOS 的终端在执行这些命令后通常不会显示“成功”的消息。如果命令执行时没有出现错误提示,且返回了新的命令行提示符,通常就表示命令已成功执行。

提示: 如果你不确定自己的 macOS 版本,可以点击屏幕左上角的苹果菜单,选择“关于本机”来查看。选择适用于你版本的命令即可。

3. 在 Linux 上清除 DNS 缓存

Linux 清除 DNS 缓存的方法差异较大,因为它取决于你使用的 Linux 发行版以及该发行版配置的 DNS 缓存服务。一些发行版默认不开启系统级 DNS 缓存,而另一些则使用 nscddnsmasqsystemd-resolved 等服务。

步骤:

  1. 打开终端 (Terminal):

    • 通常可以在应用程序菜单中找到“终端”或使用快捷键(如 Ctrl + Alt + T)。
  2. 确定你使用的 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 的方法
    • 输入这些命令后按回车,并输入你的用户密码(如果提示)。如果服务正在运行,你会在输出中看到其状态信息。
  3. 根据识别的服务执行清除或重启命令:

    • 对于 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

  4. 确认清除成功:

    • 类似 macOS,Linux 终端执行这些命令后通常不会有明确的“成功”消息。没有错误输出通常意味着命令成功执行。

Linux 的复杂性: Linux 的灵活性意味着配置差异很大。上述是最常见的几种情况。如果你不确定如何操作,可以查阅你的 Linux 发行版的文档,或者在相关的社区/论坛寻求帮助,说明你的发行版和遇到的具体问题。

第四部分:在常见浏览器中清除 DNS 缓存

除了操作系统,一些浏览器也会维护自己的 DNS 缓存。清除浏览器缓存通常不会影响到其他应用程序,只影响该浏览器。

1. Google Chrome 和 Microsoft Edge

由于 Edge 现在基于 Chromium 内核,Chrome 和 Edge 清除 DNS 缓存的方法是相同的。

步骤:

  1. 打开浏览器。
  2. 在地址栏输入特定的内部 URL:
    • 对于 Chrome:输入 chrome://net-internals/#dns
    • 对于 Edge:输入 edge://net-internals/#dns
    • 按下回车键(Enter)。
  3. 清除缓存:

    • 页面加载后,你会看到一个关于网络内部信息和测试的界面。
    • 在左侧菜单中(或顶部),选择 “DNS”。
    • 在 DNS 部分,你会看到当前缓存的 DNS 条目列表(如果存在)。
    • 点击列表上方的 “Clear host cache”(清除主机缓存) 按钮。
  4. 确认清除:

    • 点击按钮后,按钮旁边的列表会清空。这表示浏览器的 DNS 缓存已成功清除。

注意: 这个界面还提供了其他网络相关的调试工具,请小心操作,不要随意点击其他按钮,以免影响浏览器设置。

2. Mozilla Firefox

Firefox 处理 DNS 缓存的方式与 Chrome/Edge 不同。它更多地依赖于操作系统的 DNS 缓存。Firefox 自身的 DNS 缓存大小可以通过 about:config 进行配置,但没有一个直接的按钮来“刷新”它。

如何影响 Firefox 的 DNS 缓存:

  1. 重启浏览器: 关闭并重新打开 Firefox 是清除其内部 DNS 缓存的最简单方法。
  2. 清除浏览器缓存(包含网络缓存): 清除 Firefox 的普通浏览器缓存通常也包括网络相关的缓存数据,这间接影响 DNS 查找。
    • 点击菜单按钮(通常是右上角的三条横线)。
    • 选择“设置”(或“选项”)。
    • 在左侧菜单选择“隐私与安全”。
    • 在“Cookie 和站点数据”或“缓存的 Web 内容”部分,点击“清除数据”。
    • 确保勾选了“缓存的 Web 内容”。你也可以选择清除其他项目,但至少要勾选这个。
    • 点击“清除”按钮。
  3. 修改 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 的方法:

  1. 清除 macOS 系统 DNS 缓存: 这是最有效的方法。
  2. 清除 Safari 历史记录和网站数据:
    • 打开 Safari。
    • 点击菜单栏的“Safari”。
    • 选择“清除历史记录…”。
    • 选择清除的时间范围,然后点击“清除历史记录”。
    • 或者,点击菜单栏的“Safari”,选择“偏好设置”,进入“隐私”标签页,点击“管理网站数据”,然后点击“移除所有”。
      虽然这主要清除 Cookie、缓存文件等,但也可能间接影响一些与网站连接相关的临时数据。
  3. 重启 Safari 浏览器。

第五部分:当清除 DNS 缓存无效时怎么办?

如果你清除了操作系统和浏览器的 DNS 缓存后问题依然存在,这说明问题可能不在你的本地缓存。以下是一些可能的后续排查方向:

  1. 检查 Hosts 文件: Hosts 文件中的记录会优先于 DNS 查询。如果 Hosts 文件中有一个错误的条目指向了你无法访问的域名,它会阻止正常的 DNS 解析。

    • Windows: 文件位于 C:\Windows\System32\drivers\etc\hosts,需要管理员权限才能修改。
    • macOS 和 Linux: 文件位于 /etc/hosts,需要管理员权限才能修改。
      使用文本编辑器(以管理员身份)打开 Hosts 文件,检查是否有关于目标域名的条目,删除或注释掉(在行首添加 #)任何可疑或错误的条目。
  2. 重启路由器: 你的家庭或办公室路由器也可能缓存 DNS 信息。简单地重启路由器(拔掉电源等待几十秒再插上)可以清除路由器的缓存,并可能从 ISP 获取最新的 DNS 配置。

  3. 尝试使用不同的 DNS 服务器: 你的 ISP 提供的 DNS 服务器可能存在问题,或者缓存了旧的记录。你可以尝试将设备的 DNS 设置更改为公共 DNS 服务器,例如:

    • Google Public DNS: 8.8.8.88.8.4.4
    • Cloudflare DNS: 1.1.1.11.0.0.1
    • 阿里云公共 DNS: 223.5.5.5223.6.6.6
      更改 DNS 服务器的设置通常在操作系统的网络适配器设置中完成。
  4. 使用 nslookupdig 命令诊断: 这些命令行工具可以直接查询 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.8dig @8.8.8.8 www.example.com)。
  5. 检查防火墙或安全软件: 防火墙、杀毒软件或安全代理有时会阻止或篡改网络连接,包括 DNS 查询。尝试临时禁用它们进行测试(请注意安全风险)。

  6. 联系网站管理员或服务提供商: 如果只有特定网站或服务有问题,可能是服务器端的问题,联系服务提供商确认。

  7. 联系你的 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 问题引起的网络访问障碍。

掌握这些技能,可以让你更有效地管理自己的网络连接,解决常见的上网难题。希望这篇完整的教程对你有所帮助!


发表评论

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

滚动至顶部