Domain IP Lookup

同一个域名返回不同答案的三个原因

地理路由

每个地区对应不同的边缘服务器

缓存

TTL 各自独立,缓存各自独立

分割视图

刻意设计的不同答案

实用指南

如何在 Android 上刷新 DNS

6 分钟阅读作者: Domain IP Lookup Team

一个周二的晚上,我把一个站点搬到了新主机,更新了 DNS,看着检查器一个解析器接一个解析器地变绿——而我的手机一直加载旧站点,直到周四。换作台式机,只要三十秒:打开提示符,刷新缓存,完事。手机就待在那里,自鸣得意,加载着昨天的互联网。那一周我学到了所有 Android 用户最终都会学到的事:根本没有刷新按钮。没有藏起来,也没有埋在开发者菜单里。它压根不存在。

这并不意味着你束手无策。这意味着 Android 的 DNS 缓存和台式机的工作方式不一样,而真正能清掉它的办法有点间接。有些值得做,有些是民间传说。还有一个——最有名的那个——多年前就基本失效了。

为什么没有可按的按钮

在 Windows 或 macOS 上,一个系统服务为几乎所有东西回答查询,所以一条命令就能清空它的缓存。Android 从来没有真正长成那个形状。应用通过共享的系统服务解析名称,浏览器在上面又有自己的缓存,制造商再在上面加上自己的修改。结果是几个装答复的小藏处,而不是一个可以放干的水箱。

一个答复会停留多久,也不由你的手机决定。每条记录都带有 TTL,那是站点所有者设定的生存时间,缓存理应遵守它。这正是 DNS 变更对你的邻居像瞬间完成、对你却像没更新的安静原因:你的手机在一个不走运的时刻问过,还拿着一个尚未过期的答复。如果你想要,我们的DNS 传播如何工作一文会跟完整条链。

真正有帮助的办法

  1. 开关飞行模式(有时有效)

    把飞行模式打开二十或三十秒,再关掉,会迫使手机重建网络连接,并向你的运营商重新注册。在许多版本上,这会顺带把缓存的答复抖掉;在另一些版本上,它根本碰不到它们。这不花一分钱,只要半分钟,所以值得试一次——但别把失败当意外。说实话,在较新的版本上,这一招更多是希望,而不是机制。

  2. 重启手机

    那件钝器,也是可靠有效的那个。彻底重启会清掉系统保存在内存中的易失缓存,重置网络栈,让查询从头开始。如果一个站点在其他办法都试过之后还向你显示旧地址,先重启手机,再想更聪明的招。是的,这是技术支持界最老的建议。在这里,它也是对的那个。

  3. 如果是你的 Wi-Fi,重启路由器

    问题可能根本不在手机。你家的路由器也会缓存答复,你的手机会不断收到它那份过期的副本。重启路由器清掉那个缓存,附带的好处是你会弄清:全家的设备都看到旧站点,还是只有你这台。

Chrome 自己的缓存呢?

Android 上的 Chrome 过去有自己的内部页面来做这件事——许多老指南至今还让你去 chrome://net-internals 按刷新按钮。那个页面已经退役了。在现在的版本上,那个地址不再提供那些 DNS 工具;老说明还在流传,只是因为互联网从不删除任何东西。如果有指南让你去那里,过时的是它,不是你的手机。

Chrome 里还活着的是它的站点数据。清掉那一个行为异常的站点的缓存图片和文件,或者从 Android 的应用设置里强制停止 Chrome、让它冷启动,可以把浏览器自己拿着的答复抖掉。它清不掉系统级的缓存——任何应用做的事都清不掉——但许多“站点不更新”的抱怨最后发现是浏览器的问题,而不是网络的问题,这是诚实地排除它的方法。

专用 DNS:是绕行,不是刷新

大多数 Android 手机的网络设置里埋着专用 DNS,它通过一条加密连接把你的查询路由到你选定的解析器。如果你现在的解析器——通常是运营商的或路由器的——拿着一个过期的答复,换到另一个解析器会给你一个完全不同的缓存,一个可能已经有新记录的缓存。

注意它做了什么、没做什么。它什么也不清空;它绕过那个满架子,而不是清掉它。这仍然有用——如果你一换,站点就正确加载,你就知道了问题出在旧解析器的缓存上,而解药其实只是时间。我们的更改你的 DNS 服务器指南诚实地涵盖了如何选一个,以及隐私上的取舍,包括你把查询交给了别人这个事实。

弄清是哪一处缓存攥着那个答案

在重启其他任何东西之前,先花两分钟缩小范围:那个过期答案到底归哪个缓存所有。测试很无聊。确定性很美妙。

  1. 换一个浏览器试试

    用另一个浏览器打开这个网站——Firefox、三星浏览器,随便哪个已经装好的。如果它显示的是新网站,说明你的网络和手机系统都没问题,是你的第一个浏览器攥着旧答案。清掉那个浏览器里该站点的数据,或者把它强制停止,就完事了。

  2. 对比 Wi-Fi 和移动数据

    关掉 Wi-Fi,重新加载页面。如果新网站在移动数据下出现了,那么你家里的这条路径就被判了刑——路由器的缓存,或者它背后的运营商解析器。如果两个网络下都是旧网站,那么过期答案要么在手机本身上,要么还在互联网上旅行,下一个测试会判定是哪一种。

  3. 问问不欠你任何东西的解析器

    把域名放到在线传播检查工具里跑一遍。如果好几个国家的解析器都已经显示新地址,说明世界已经向前走了,只有你的缓存们不同意。如果他们显示的也是旧地址,就别再重启任何东西了:变更本身还在传播之中,手机上的任何设置都够不着它。

有些开发者指南会提到通过连接电脑和使用调试工具来改变 DNS 行为。那条路确实存在,但它是为测试应用而设的,对于一部你每天依赖的手机来说,这不成比例:它能对过期答案做的任何事,重启都做得更简单。我提它只是为了让你在遇到这条建议时,能认出那是一件车间工具,而不是那张缺失的设置页面。

撒谎的应用,和无辜的手机

还有一个藏处要知道:单个应用。行为良好的应用使用系统的解析器,继承它的答复,但有些应用自己做解析,或者钉住连接,在系统早已往前走之后还一直用一个地址。经典的情形是:浏览器显示新站点,而某个银行或购物应用还显示旧站点——或者报错。强制停止那个应用,或者在应用设置里清掉它的缓存,就是针对单个应用的重启等价物。

在怪手机之前先变换测试:如果三个浏览器和五个应用都显示旧站点,过期的答复在应用的上游。如果恰好只有一个应用和其余一切不一致,那个应用就是你的罪魁祸首。

没人想听的答案:等 TTL

这里我必须对你直说。如果一个站点以长 TTL 改了它的 DNS——比如一天——而你的手机或你路由器的解析器恰好在变更之前缓存了旧答复,可能没有任何可按的东西能提前产生新答复。我们的刷新 DNS 缓存 指南涵盖台式机命令和同样的缓存逻辑,而这逻辑在这里无可击败:缓存按记录的日程过期,不按你的。

你能做的是确认这确实是你的处境。用移动数据而不是 Wi-Fi 加载站点。通过专用 DNS 试新解析器。如果独立的网络都显示新站点、只有你惯常的路径显示旧站点,你是在看一个缓存排空,它会排完的。如果任何地方的任何人都看不到新站点,那就是变更本身还没落地——同样不是你手机的错。

如果你是搬网站的那个人

到目前为止,这一切都是从等待一次 DNS 变更的那一侧写的。如果你将来成为做变更的那个人,你可以让你的访客免去其中大部分麻烦。在搬迁整整一天之前,调低你即将更改的那些记录的 TTL。一条以前告诉全世界“把这个答案留一天”的记录,现在会说“留五分钟”,各处的缓存迅速刷新,到了搬迁那晚,新地址几分钟内就传播开来,而不是拖拖拉拉一直到星期四——读者也许还记得,这篇文章正是这样开头的。

等尘埃落定,再把 TTL 调回去,让缓存做它们正常的工作,并且在切换之后至少让旧主机再运行一个旧 TTL 的时长。某个地方,某个人的一部手机,还攥着那个旧答案,当它来敲门时,它值得见到一个能用的网站。

需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。

常见问题