DNS缓存和TTL的最终用户客户端软件的一项调查

那么,不同的客户端软件,如web浏览器,在内部缓存DNS响应多久?从2秒到无穷!

DNS记录配备了时间生存(TTL)暗示,以秒为暗示缓存多久才能考虑反应是新鲜的,并且重用它不必刷新之前回答后续查询。不同的DNS客户端不同的方式对待这个提示:,要么完全忽略它有利于自己的政策,或对记录执行最小或最大持续时间。

下表显示了包含a或AAA记录的积极DNS响应在不同的常见DNS客户端实现中的缓存时间:

履行 TTL荣幸 闵-TTL Max-TTL
安卓 没有 2秒 2秒 16
镀铬/鎓 没有 1分钟 1分钟 1000
dnsmasq 是的 0 * 68年 150 *
Java的 没有 会话 会话 150 *
mDNSResponder 是的 15秒 48天 512 +简约
Mozilla的Necko 没有 2分钟* 2分钟* 400 *
Necko的(Win32) 是* 1分钟* 68年 400 *
systemd-resolved 是的 0 2小时 4096
三叉戟 没有 30分钟 30分钟 128
WebKit的 没有 1分钟 1分钟 400
Windows DNS 是的 0 2天* 2 MIB *

*可配置的。

在这个表中有很多东西需要解释,至少不包括这些客户机是什么以及您可能在哪里遇到它们。我将依次快速地一一介绍。

注意,可能涉及多个DNS缓存。例如,一个单一的响应可以缓存在Firefox, Windows DNS缓存,并在dnsmasq在终端用户路由器上的附加ISP的DNS缓存。链中的每一步都可以增强它们自己的策略,甚至重写原始的DNS响应。

安卓

Android平台(不包括Chromium的WebView) 4.1和更新版本一次存储最多16个地址,时间精确到2秒。当缓存已满时,最旧的地址将被丢弃。Android 4.0及更老版本可以存储相同数量的地址长达10分钟。TTL值被忽略。应用程序可以覆盖这些值并维护它们自己的缓存。

基于Chrome的浏览器,即使是在Android上,包括Chrome OS,可以在60秒内存储1000个地址。当缓存已满时,最旧的地址将被丢弃。

dnsmasq

的dnsmasq是第一次执行,支持TTL字段,它不强制默认最小TTL值。它可以被配置为执行至少长达1小时,但是。

您可以在Linux桌面设置中找到的dnsmasq,边缘路由器里面,甚至在一些Android设备的Android开源项目的一个标准组件运行。我检查了六种不同的生成和品牌的Android设备,并且它们都具有它安装,但没有运行。

Java的

带有安全策略的Java运行时(Android除外)会在会话期间缓存DNS响应——可能会无限缓存。缺省情况下,没有安全策略运行的Java不会缓存任何内容。对于运行时策略,默认缓存持续时间是可配置的。Java总是忽略TTL。

mDNSResponder(也称为mdnsd)

你会发现mDNSResponder负责DNS缓存在iOS和macOS设备,以及一些网络设备。它也作为Android开源项目的一部分分发,但它不是作为缓存运行在我的任何测试设备上。Safari/WebKit没有内部DNS缓存,完全依赖于系统范围的mDNSResponder。

更新():Safari浏览器/ WebKit的现在又增加了自己的DNS缓存。它拥有高达400个地址1分钟。此缓存除了任何操作系统级高速缓存,诸如mDNSResponder使用。

mDNSResponder是第二次执行支持TTL。然而,强制执行15秒的最小TTL,并且可以存储的有效使用的DNS响应的数量不受限制。它将开始异步如有要求,如果有小于留下了他们的TTL的15%的更新记录。这就是为什么其他研究表明,mDNSResponder的最低TTL为12.5,而不是15秒。

Mozilla的Necko

Firefox和Thunderbird中使用的Mozilla Gecko网络库(Necko)将缓存多达400个DNS响应,缓存时间至少为1分钟到2分钟。如果在第一分钟后处理一个请求,它将得到一个缓存的响应,同时Necko异步更新缓存的记录并将缓存延长2分钟。

在Windows中,Necko表现完全不同。它会缓存最少1分钟,并到TTL的持续时间条目。

Mozilla的2018年试验了从400所记录的高速缓存800点的记录翻了一番,但只看到在缓存命中率小于1%的改善。实验结论和Mozilla决定坚持现有的400限制。

关闭所有私有窗口后,整个DNS缓存被重置。

systemd-resolved

系统解析在Ubuntu 16.04及以后版本以及派生的Linux发行版中是默认启用的。如果我知道它将作为默认DNS缓存出现在未来的许多消费级边缘路由器中,我不会感到惊讶。

它可以存储多达4096个DNS响应长达2小时。它尊重TTL领域,尽管在线声称相反,系统解决不强制最小TTL,除非对消极的反应。

三叉戟

Internet Explorer的三叉戟引擎的超过现实世界的关注历史的好奇心。然而,三叉戟仍在使用Windows的某些组件内部和第三方浏览器和其他程序。

三叉戟存储多达30分钟,128个地址。这是最长强迫最小TTL和1400%大于第二最长的最小TTL更长。

的Windows DNS客户端

的Windows DNS客户端,可以互换称为Microsoft DNS客户端或简单的dnscache,最多可存储2兆缓存的数据为2天。

有几乎没有在最近版本的Windows DNS客户端的可用信息。除了测试只需几秒钟时,也表现不一致,甚至在同一台计算机上。两天是在最大TTL是我最好的猜测,但它可以更长和更短。

三叉戟和Windows DNS是在此列表中只有两个专利的实施和仅有的两个任意音符。其他实现了双方的测试和源代码审查确认。然而,微软的两种实现方式主要基于测试 - 这主要是返回不一致的结果。似乎有参与,其行为不可预测的需求或基于内存的限制。

奖励:公共DNS解析器

谷歌产品,包括谷歌Chrome网络浏览器和Chromecast,将默认,而不是系统配置的DNS提供商(通常通过DHCP发现)使用谷歌公共DNS解析服务。正因为如此,我认为这将是有趣的,看看一些促进自称是速度更快或更安全,比传统的DNS提供商,全球免费DNS解析器。

服务提供者 闵-TTL Max-TTL
谷歌公共DNS 0 6个小时
OpenDNS 0 7天
Quad9 0 12个小时

谷歌记录了TTL的6小时最大值。OpenDNS的声称支持“全TTL”这显然意味着它的1周封顶。

我试图确定这些服务是否有一个透明的最小TTL和执行异步更新它们的高速缓存。这有助于解释他们是如何管理,以提供更快的DNS比其他服务的响应。然而,检测结果已经为所有服务完全定论。请让我知道通过下面的,如果你设法得到一个更明确的回答这个问题的反馈链接。