几乎所有现代浏览器路由器都具有,它可以临时存储最近访问的域的 IP 地址,从而避免重复的 DNS 查找,从而实现更快的访问。

但是如果它们不匹配会发生什么?如果一个域名指向浏览器和路由器上的不同 IP 地址。谁优先?

  • 是否优先使用浏览器的缓存?
  • 是否优先使用路由器的缓存?


最佳答案
3

两者都不真正“优先”。浏览器级 DNS 缓存的存在是为了避免询问 DNS 服务器。如果在浏览器的缓存中找到 DNS 记录,则路由器(或其他 DNS 服务器)根本不会发挥作用。

链上每个 DNS 服务器基本上都是如此。如果服务器缓存中有结果,它将使用缓存中的结果进行回答,否则将向上游 DNS 服务器查询答案。此过程一直持续到有人缓存了记录或您到达给定域的权威 DNS 服务器为止。

由于这些缓存不是并行使用的,因此不存在优先级。这些缓存是“串联”的,也就是说,路由器的 DNS 解析器是浏览器解析器的上游(就像 ISP 的解析器用作路由器的上游一样)。

浏览器首先发起查询,因此其解析器将先检查其内部缓存,然后再发送到网络(因为本地缓存可以比网络查询更快地给出答案)。

缓存的意义在于,如果缓存中有数据,则根本不会查询上游,因此默认情况下缓存会获胜。因此,如果您的浏览器已经缓存了答案,那么它只会使用该答案 – 它根本不会查询路由器,也不会进行比较。

否则(即从缓存中获取结果,然后查询上游以检查它们是否匹配)基本上会否定浏览器首先拥有缓存的意义,因为它将花费与浏览器不进行任何缓存相同的时间(甚至可能更长)。

4

  • 是的,这确实更有意义。也许我只是误解了你的答案,但我的意思不是路由器有实际的解析器(例如查询主流解析器,如谷歌),而是与浏览器/操作系统相同的缓存。是这样吗?


    – 

  • 1
    “实际的解析器(例如查询主流解析器,如谷歌)”是自相矛盾的——实际的解析器不会查询“另一个主流解析器”,而是直接查询权威服务器。具体来说,依赖查询另一个解析器的基本“路由器/浏览器/操作系统”缓存……但是,是的,大多数路由器只有一个基本的缓存“代理”,而不是一个完整的“解析器”(除了 pfSense/OPNsense)——尽管这对答案没有太大影响。


    – 

  • 谢谢,这回答了我的问题。抱歉,评论中的技术语言选择有点令人困惑,但你明白我的意思。


    – 

  • 尽管操作系统工具通常称为“存根解析器”——即它发出 DNS 查询,因此它仍然是一种特定类型的“解析器”,即使它依赖另一个(完整)解析器来完成工作。(这与它是否缓存无关。例如,Linux 有一个缓存的存根解析器,总是查询网络服务器。)


    – 


在典型情况下,浏览器缓存会被首先使用 – 尽管这个缓存(如果存在的话 – 并非所有浏览器都有)的寿命很短 – 通常为 1 分钟左右。

2

  • 谢谢 – 这是我猜的。你有任何资料来支持这个说法吗?还是只是先验知识?


    – 

  • 主要是先前的知识 – 我的一些工作需要修改 DNS / 本地缓存以准备迁移网站 – 但请查看谷歌“网络浏览器 dns 缓存 ttl”(TTL 是关键 – 它是缓存超时)以获取支持证据。


    –