几乎所有现代浏览器和路由器都具有,它可以临时存储最近访问的域的 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 是关键 – 它是缓存超时)以获取支持证据。
–
|
|