几乎所有现代浏览器和路由器都具有DNS 缓存,它可以临时存储最近访问的域的 IP 地址,从而避免重复的 DNS 查找,从而实现更快的访问。
但是如果它们不匹配会发生什么?如果一个域名指向浏览器和路由器上的不同 IP 地址。谁优先?
- 是否优先使用浏览器的缓存?
- 是否优先使用路由器的缓存?
几乎所有现代浏览器和路由器都具有DNS 缓存,它可以临时存储最近访问的域的 IP 地址,从而避免重复的 DNS 查找,从而实现更快的访问。
但是如果它们不匹配会发生什么?如果一个域名指向浏览器和路由器上的不同 IP 地址。谁优先?
两者都不真正“优先”。浏览器级 DNS 缓存的存在是为了避免询问 DNS 服务器。如果在浏览器的缓存中找到 DNS 记录,则路由器(或其他 DNS 服务器)根本不会发挥作用。
链上每个 DNS 服务器基本上都是如此。如果服务器缓存中有结果,它将使用缓存中的结果进行回答,否则将向上游 DNS 服务器查询答案。此过程一直持续到有人缓存了记录或您到达给定域的权威 DNS 服务器为止。
由于这些缓存不是并行使用的,因此不存在优先级。这些缓存是“串联”的,也就是说,路由器的 DNS 解析器是浏览器解析器的上游(就像 ISP 的解析器用作路由器的上游一样)。
浏览器首先发起查询,因此其解析器将先检查其内部缓存,然后再发送到网络(因为本地缓存可以比网络查询更快地给出答案)。
缓存的意义在于,如果缓存中有数据,则根本不会查询上游,因此默认情况下缓存会获胜。因此,如果您的浏览器已经缓存了答案,那么它只会使用该答案 - 它根本不会查询路由器,也不会进行比较。
否则(即从缓存中获取结果,然后查询上游以检查它们是否匹配)基本上会否定浏览器首先拥有缓存的意义,因为它将花费与浏览器不进行任何缓存相同的时间(甚至可能更长)。
在典型情况下,浏览器缓存会被首先使用 - 尽管这个缓存(如果存在的话 - 并非所有浏览器都有)的寿命很短 - 通常为 1 分钟左右。