如何对外部DNS查找的性能进行基准测试?


14

我正在考虑将Google的公共DNS服务器作为网络的外部DNS。目前,我正在使用来自ISP的DNS服务器。我过去也曾考虑过OpenDNS,但最终决定不跳楼。

我希望能够对各个服务器能够满足我们的DNS请求的速度进行基准测试。我在nslookup中看不到有任何帮助。

如何测试外部提供的DNS的往返时间?

Answers:


5

您可以使用数据包捕获程序(DNS过滤)来跟踪DNS查询\响应时间。您可以在计算机或内部DNS服务器(如果有)上运行此命令。万物都差不多,这应该使您大致了解Google DNS与ISP相比的速度。


5
Wireshark的DNS解析器确实请求/响应跟踪。“ dns.time”显示过滤器可用于查找响应时间。
Gerald Combs

40

你可以简单地diggrep

$ dig @8.8.8.8   www.rimuhosting.com | grep "Query time:"
;; Query time: 15 msec
$ dig @4.2.2.1   www.rimuhosting.com | grep "Query time:"
;; Query time: 289 msec

13

使用GRC的域名速度基准测试


我签出了这个工具...它震撼了!
Mike L

2
在运行Google的namebench之后,我尝试了GRC的Benchmark。Google表示自己的8.8.4.4比其他公司快21.1%。但是GRC的自定义列表(添加了8.8.4.4)显示,谷歌的搜索引擎是最慢的搜索引擎之一,仅比康卡斯特提供的当前DNS快一点。最快的都是Level 3 Communications。我现在信任Google GRC的DNS基准。GRC是用汇编语言编写的,并且从单个184k文件运行。令人印象深刻!
布莱恩·伯特赖特2012年

如果您不在美国,请对GRC保持警惕。它似乎无法测试许多(任何?)非美国托管的服务器。
NickG



2

用于Firefox和IE的Firebug插件具有一个“ net”选项卡,可为您提供每个文件请求的加载时间的图形表示。

它将其分解为活动,其中包括以绿色显示的DNS查找。


2

简单的shell脚本qtest.sh可以用于:

%qtest -n3“ A a.gtld-servers.net” 172.19.1.1 62.4.16.70 62.4.17.69 208.67.222.222 208.67.220.220 156.154.70.1 156.154.71.1  
3 172.19.1.1/172.19.1.1
49 62.4.17.69/62.4.17.69
61 208.67.222.222/208.67.222.222

在这里,172.19.1.1本地解析器更快,其次是ISP解析器,然后是OpenDNS。


2

我写了一些不错的脚本来评估与DNS服务器的连接:

cat >test_dns_list_speed.sh
#!/usr/bin/env ksh
site="www.google.com"
IPfile="$1"
samples=$2

if [ ! -f "$IPfile" ] || ! echo "$samples"|egrep -q "[0-9]+" ; then
  echo "test_dns_list_speed.sh <file-ip-list> <samples>"
  echo "<file-ip-list>       newline separated list of DNS server IP adresses"
  echo "<samples>            how many DNS resolution samples to take"
  echo "PURPOSE:"
  echo "          collect statistics about response times from list of DNS servers"
  exit 1
fi

typeset -i i

while [ $i -lt $samples ]; do
  i=$i+1
  for IP in `cat $IPfile`; do
    time=`dig @$IP $site| awk '/Query time:/ {print " "$4}'`
    IPtrans=`echo $IP|tr \. _`
    eval `echo result$IPtrans=\"\\$result$IPtrans$time\"`
  done
done

for IP in `cat $IPfile`; do
  IPtrans=`echo $IP|tr \. _`
  printf "%-15s " "$IP"; echo -e `eval "echo \\$result$IPtrans"`|tr ' ' "\n"|awk '/.+/ {rt=$1; rec=rec+1; total=total+rt; if (minn>rt || minn==0) {minn=rt}; if (maxx<rt) {maxx=rt}; }
             END{ if (rec==0) {ave=0} else {ave=total/rec}; printf "average %5i     min %5i     max %5i ms %2i responses\n", ave,minn,maxx,rec}'
done

./test_dns_list_speed server_list 20
202.93.142.10   average   949     min   523     max  2229 ms 20 responses
202.93.142.20   average   897     min   515     max  2017 ms 20 responses
208.67.222.222  average  1235     min   530     max  3362 ms 20 responses
8.8.8.8         average   759     min   529     max  1624 ms 20 responses

1

您可以使用ping来计算数据包在服务器和DNS服务器之间来回移动需要多长时间。一般规则:永远不要改变有效的方法。

OpenDNS的缺点是不存在的域可能会以指向OpenDNS搜索页面的A记录作为响应,因为它们倾向于这样做。Google目前还没有这样做,但是假设他们只是向DNS解析器提供任何好处,这是愚蠢的。


如果我可以分开一个答案,我会的。我喜欢ping测试,因为它很简单。我可以让它与所有人对抗,然后再看平均值。在这里,除了数据包的往返行程外,我还想查看查询本身的响应时间,因此我选择了数据包捕获。设置和测试需要做更多的工作,但是要更加严格地考虑外部服务器的真实性能。谢谢!
迈克L

1
使用ping的坏主意。并非所有服务器都对ping做出响应,并且无法保证DNS和ICMP的响应时间相同。
bortzmeyer

0

dnseval来自dnsdiag的软件在Windows linux和mac上就像一个魅力。(比过时的namebench好得多)在github上下载

要使用它,请首先编写一个文本文件,每个要测试的DNS都包含一行其IP地址 mylist.txt

8.8.8.8
192.168.178.1

然后运行

./dnseval -f mylist.txt yahoo.com     # latency for cached sites
./dnseval -m -f mylist.txt yahoo.com  # latency for sites not in cache

尽管这不会检查服务器的缓存大小,但它是一种更容易,更快捷的方法,我希望它与实际性能紧密相关。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.