DNS查询时间和Windows DNS缓存

4

为了进行DNS解析测试...我想在Windows 7中禁用所有DNS缓存。

尽管如此,我仍然看到对同一域的连续请求的"DNS Lookup: 0 ms"

我已经尝试了明显的"ipconfig /flushdns",还停止了完全服务:

net stop dnscache

同时,这个命令也会产生相同的效果:

 net stop "DNS Client"

我知道浏览器会缓存 DNS 查询结果,时间很短。所以我要清除它们的缓存,重新打开浏览器,或者在不同的浏览器(Firefox、Chrome、Chrome 无痕模式、IE)中打开相同的域名来绕过 DNS 缓存。
第一次进行 DNS 查询需要 25 毫秒(使用 8.8.8.8),但是下一次 DNS 查询会被缓存在系统的某个地方,查询时间为 0 毫秒。只有等待3 到 5 分钟后才能再次进行请求,缓存才会消失。
我该怎么办才能强制系统每一次都解析 DNS,即使在相同的 DNS 请求之间只有 5 秒钟的时间?
这是否与 Windows 通过 keep-alive 或某种 TCP 连接的重用有关?不应该,因为我重新打开了浏览器。但我已经没有主意了。
您能否解决这个问题?
谢谢
1个回答

6
似乎你的目标是模拟一个不存在于实际环境中的配置(因为所有客户端都有DNS缓存)。不太清楚为什么要测试这种有趣的配置,但是确实可以这样做。
正如你所提到的,所有的浏览器都有DNS缓存。Windows的DNS客户端本身也有一个缓存。任何上游代理您可能使用的也都有DNS缓存。
在这种情况下,您会遇到两个问题:首先,Fiddler本身维护着一个DNS缓存。其次,无论您是否关闭浏览器客户端,Fiddler都会保持与服务器的长连接。
如《Fiddler指南》所述,您可以使用首选项fiddler.network.timeouts.dnscache来控制Fiddler DNS缓存。默认值为150000(以毫秒为单位,即2.5分钟)。您可以将此值设置为0以防止DNS缓存。
为了防止连接的重用,您可以在Fiddler会话列表中按CTRL + X,或根据需要调用FiddlerApplication.oProxy.PurgeServerPipePool方法。

非常感谢Eric的快速回答,这解释了很多问题。 我为什么觉得这很有趣? 首先因为我正在努力理解在请求Web文档时所有DNS缓存级别是如何工作的。而且我正在测试Bind作为DNS缓存。还测试了将请求转发到Google DNS的速度与从根服务器解析它的速度,并最终发现当您想要多次测试第一次冷缓存页面加载的性能时(应包括DNS查找时间),这可能很有用作为Web开发人员。 - corbacho
1
顺便说一下,我发现你的这篇文章对了解更多关于Fiddler DNS缓存很有用http://blogs.msdn.com/b/fiddler/archive/2010/05/05/peeking-at-fiddler-internals-about-cache-and-about-config.aspx - corbacho
我知道这是一篇旧帖子,但将fiddler.network.timeouts.dnscache设置为0并没有起作用。Fiddler DNS查找仍然被缓存。 - François
fiddler.network.timeouts.dnscache 看起来运行良好。您能详细说明为什么认为它不起作用吗?您确定没有重复使用先前使用过的(和池化的)连接吗? - EricLaw
OP没有提到Fiddler。我有同样的问题,但我不使用Fiddler。在about:config中没有"fiddler"条目。那么是什么导致Windows 10 Home,Firefox 69.0.1上看不到hosts文件更改的延迟? - David Spector
如果您遇到问题并且不是关于Fiddler的,请提出一个新的问题。 - EricLaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接