【问题标题】:nslookup response is a lot slower compared to Resolve-DnsName cmdlet's responsenslookup 响应比 Resolve-DnsName cmdlet 的响应慢很多
【发布时间】: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


【解决方案1】:

我会使用Resolve-DnsName 而不是nslookup

请参阅:The new nslookup: Resolve-DnsName

您看到了速度的提升,因为Resolve-DnsName 是一个全新的本机 PowerShell 命令,加载后会在 PowerShell 实例中运行。 nslookup 是一个可执行文件,必须在新线程等中加载和运行。这允许Resolve-DnsName 运行得更快,并且开销更少。此外,由于Resolve-DnsName 是一个原生 PowerShell 命令,它比nslookup 提供了更多的选项。

【讨论】:

  • 我要测量的是 DNS 响应时间。有什么方法可以衡量吗?
  • 我认为Resolve-DnsName 会为您提供您正在寻找的最接近、正确的响应时间。从概念上讲,两个命令的 DNS 响应应该几乎相同,因为 nslookup 慢了 90 毫秒以上,这都是由运行命令的开销引起的。当我运行一些测试时,Resolve-DnsName 非常接近 ping 响应时间,这在概念上应该非常接近。
【解决方案2】:

Nslookup 不查看 NRPT 表:Get-DnsClientNrptRule

-Resolve-DnsName 确实会查看表格

-来自客户端机器查询 NRPT 的 DNS 查询

-出于这个原因,应该使用Resolve-DNS而不是nslookup

-另一种解决方案是使用DIG而不是nslookup

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    相关资源
    最近更新 更多