【发布时间】:2018-12-06 20:01:30
【问题描述】:
我一直在尝试使用 PowerShell 测量 DNS 延迟。
我想检查 DNS 响应时间并想跳过本地解析器缓存,所以我使用了 nslookup,它工作正常,除非我将结果与 Resolve-DnsName cmdlet 的响应进行比较。
(Measure-Command { Resolve-DnsName www.google.com -DnsOnly }).TotalMillisecond
注意:我使用 -DnsOnly 参数来确保 Resolve-DnsName 仅将 DNS 协议用于名称解析。
Resolve-DnsName 在大约 10 毫秒内返回响应,而 nslookup 在 >100 毫秒后返回响应
我不确定Resolve-DnsName 在内部是如何工作的,但我不确定要依赖哪个结果。
【问题讨论】:
-
我相信 Resolve-DnsName 正在使用缓存结果,而 nslookup 实际上是在向 DNS 服务器发出请求。
-
我最初也是这么想的,但后来
Resolve-DnsName文档表明传递-DnsOnly参数会强制它向DNS 服务发送请求,这意味着它会跳过缓存。 -
它暗示了这一点,但谁知道该选项是否真的有效。我可能会尝试刷新您的 DNS 并看看会发生什么。也许尝试在两个命令中指定 DNS 服务器。
-
所以我刷新了我的 DNS 缓存,只增加了大约 9 毫秒到我的 Resolve-DnsName。我能够复制这种行为。
-
我认为您观察到的时间差异是因为
nslookup您正在生成一个新进程,而Resolve-DnsName并非如此。
标签: powershell nslookup