【dig】DNSの名前解決速度を測る
Cloudflareの1.1.1.1というDNSリゾルバのツイートが目に入り、DNSの速度を測定してみたくなりました。
そもそもDNSとは
DNSとは、Domain Name Systemの略です。
全てのコンピュータには、IPアドレスという住所のようなものが割り当てられています。
例えば、google.comのIPアドレスは”142.251.46.174"です。これをアドレスバーに入力すると、Googleの検索ページに飛ぶことができます。
しかし、私たちはIPアドレスを覚えてられません。そこで、IPアドレスの代わりにドメイン、もしくはURLを入力します。(今の時代、URLを入力することも少ない気がしますが...)
この入力されたドメインをIPアドレスに変換する役割を持っているのがDNSです。
ドメインからIPアドレスを調べる
ドメインからIPアドレスを調べることができるサイトがあるので、貼っておきます。
DNSリゾルバとは
DNSは、ドメインからIPアドレスへの変換(名前解決と呼ばれる)を行うためのシステムでした。このシステムの中には、いくつかの構成要素があり、そのうちの一つがDNSリゾルバです。
DNSリゾルバとは、名前解決を行うためのリクエストが最初に到達するサーバーのことです。再帰リゾルバとも呼ばれます。
また、DNSはルートサーバーやTLDサーバーなど複数のサーバーで構築されています。DNSリゾルバは、そのたくさんのサーバーにリクエストを送る役割を持っています。(DNSの中で一番忙しそう)
DNSリゾルバの確認方法
Macの場合
「アップルメニュー 」>「システム設定」>「ネットワーク」。 次に、右側でネットワークサービスを選択。「詳細」>「DNS」で確認できます。
コマンド
scutil --dns | grep 'nameserver\[[0-9]*\]'
cat /etc/resolv.conf
DNSの速度
digコマンドを使うことで、名前解決の速度を計ることができます。
dig @リゾルバのIPアドレス ドメイン名
zenn.dev
に対して、1.1.1.1の速度を測ってみました。
色々と出力が出ていますが、速度は最後のブロックのQuery timeというところです。
❯ dig @1.1.1.1 zenn.dev
; <<>> DiG 9.10.6 <<>> @1.1.1.1 zenn.dev
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62385
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;zenn.dev. IN A
;; ANSWER SECTION:
zenn.dev. 78986 IN A 35.190.77.180
;; Query time: 29 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sun Jan 08 12:08:08 JST 2023
;; MSG SIZE rcvd: 53
29 msecですね。
これだけだと、どれくらい早いのか分からないので、筆者のPCにリゾルバとして設定されていたルーターのIPアドレスを渡して、速度を測ってみます。
;; Query time: 0 msec
0 msec...早すぎる!!
これは、筆者がzenn.devがキャッシュされているのが原因ですね。
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
キャッシュをクリアしたので、もう一度やってみます。
Query time: 0 msec
...おかしい。
それでは、日本から遠そうなブラジルのサイトのドメインで試してみます。
❯ dig @1.1.1.1 www.ibge.gov.br
; <<>> DiG 9.10.6 <<>> @1.1.1.1 www.ibge.gov.br
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31081
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.ibge.gov.br. IN A
;; ANSWER SECTION:
www.ibge.gov.br. 1800 IN A 170.84.40.26
;; Query time: 1004 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sun Jan 08 12:23:17 JST 2023
;; MSG SIZE rcvd: 60
1秒もかかってますね!
それでは、自宅のルータに変えてやってみます。
;; Query time: 307 msec
??????????
おそらく、自分が何か大きな勘違いをしているのでしょう。
答えがすぐに見つからなそうなので、最後にDNSのベンチマークをするコマンドを紹介して終わります。
DNSのベンチマーク
dnsperftestというコマンドです。
Macで使う場合は、次をインストールしておいてください。brew install bc bind
さて、どうなるか...
❯ git clone --depth=1 https://github.com/cleanbrowsing/dnsperftest/
❯ cd dnsperftest
❯ bash ./dnstest.sh |sort -k 22 -n
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 Average
192.168.50.1 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1 ms 1.00
norton 33 ms 29 ms 29 ms 34 ms 33 ms 29 ms 28 ms 28 ms 33 ms 34 ms 31.00
cloudflare 35 ms 32 ms 34 ms 27 ms 27 ms 27 ms 34 ms 32 ms 34 ms 31 ms 31.30
nextdns 30 ms 31 ms 31 ms 29 ms 34 ms 32 ms 35 ms 30 ms 30 ms 34 ms 31.60
cleanbrowsing 32 ms 28 ms 33 ms 35 ms 32 ms 34 ms 32 ms 36 ms 32 ms 33 ms 32.70
google 32 ms 25 ms 29 ms 69 ms 29 ms 26 ms 21 ms 64 ms 26 ms 26 ms 34.70
comodo 60 ms 59 ms 60 ms 57 ms 53 ms 63 ms 60 ms 60 ms 60 ms 60 ms 59.20
opendns 71 ms 35 ms 106 ms 119 ms 33 ms 200 ms 25 ms 27 ms 30 ms 33 ms 67.90
neustar 73 ms 72 ms 102 ms 75 ms 108 ms 76 ms 78 ms 74 ms 102 ms 133 ms 89.30
quad9 94 ms 88 ms 92 ms 92 ms 89 ms 91 ms 95 ms 87 ms 89 ms 92 ms 90.90
level3 26 ms 30 ms 34 ms 26 ms 28 ms 27 ms 29 ms 30 ms 30 ms 1000 ms 126.00
adguard 186 ms 174 ms 179 ms 183 ms 179 ms 174 ms 182 ms 185 ms 178 ms 176 ms 179.60
freenom 91 ms 1000 ms 99 ms 96 ms 1000 ms 95 ms 177 ms 96 ms 90 ms 99 ms 284.30
yandex 317 ms 308 ms 297 ms 312 ms 336 ms 311 ms 357 ms 328 ms 303 ms 301 ms 317.00
我がルーターが最強。
References
Discussion
推測になりますが自宅のルーター側でDNSの返答をキャッシュ済みだと思われます。また、物理的にどのサーバーよりもルーターが近いからキャッシュ後は1msで提供できてると思います。
コメントありがとうございます。