Как определить длительность DNS-запроса

После открытия Google Public DNS многие пользователи заметно озаботились ускорением своих DNS запросов. При этом лишь немногие задают себе вопрос — «а оно мне надо?», — что не может не огорчать. Не спорю, иногда гугловский днс нужен не столько для скорости, сколько для стабильности (у моего бывшего провайдера заметная часть «поломок» интернета составляли именно падения DNS), но я также уверен, что в большинстве случаев у провайдера есть отличный кеширующий прокси (который, к тому же, по-любому ближе к Вам, чем любой внешний DNS). Но если вам всё же хочется определить целесообразность перехода на другой DNS, прочтите эту заметку.

Недавно ко мне по RSS прилетела ссылочка на статью под названием «Faster Browsing In Linux With Local DNS Cache». Материал сам по себе довольно интересный, но я в первую очередь почерпнул оттуда название замечательной утилитки dig, способной показать время DNS запроса. В Debian утилита эта расположена в пакете dnsutils, который совсем нетрудно поставить штатными средствами дистрибутива:

sudo aptitude install dnsutils

После этого говорим нечто вроде

dig google.com

и наблюдаем результат:

; <<>> DiG 9.7.0-P1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28785
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com.   IN A

;; ANSWER SECTION:
google.com.  168 IN A 74.125.87.103
google.com.  168 IN A 74.125.87.147
google.com.  168 IN A 74.125.87.99
google.com.  168 IN A 74.125.87.104
google.com.  168 IN A 74.125.87.105
google.com.  168 IN A 74.125.87.106

;; AUTHORITY SECTION:
google.com.  110951 IN NS ns3.google.com.
google.com.  110951 IN NS ns1.google.com.
google.com.  110951 IN NS ns2.google.com.
google.com.  110951 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns3.google.com.  107156 IN A 216.239.36.10
ns1.google.com.  107156 IN A 216.239.32.10
ns4.google.com.  107156 IN A 216.239.38.10
ns2.google.com.  107156 IN A 216.239.34.10

;; Query time: 8 msec
;; SERVER: 195.95.171.2#53(195.95.171.2)
;; WHEN: Mon May  3 17:10:01 2010
;; MSG SIZE  rcvd: 260

Основной интерес представляет строка Query time (можно дописать после dig нечто вроде | grep “Query time”, чтобы не засорять терминал лишним выводом) — из неё-то мы и узнаём время, затраченное на наш DNS запрос. Итак, теперь каждый из нас может объективно сравнить пользу от перехода на Google Public DNS (или любой другой DNS сервис) — достаточно просто прогнать dig пару сот раз и посчитать среднее время:

x=0; server=8.8.8.8; host="yandex.ru"; queries=128; for i in `seq $queries`; do \
let x+=`dig @${server} $host | grep "Query time" | cut -f 4 -d " "`; \
done && echo "scale=3;($x/${queries})" | bc

В переменной server — IP (хотя можно и имя, но это наверняка повлияет на результат теста); в host — проверяемый хост; queries — количество запросов (чем больше, тем лучше, естественно).

Спокойной ночи! :)

Comments (migrated from Blogger)

On 2009-12-14T08:52:11.394+02:00, Анонимный wrote:

Надо в начале обнулить переменную Х, а то результат суммируется.

x=0; server=8.8.8.8; host='yandex.ru'; queries=128; for i in `seq $queries`; do let x+=`dig @${server} $host | grep 'Query time' | cut -f 4 -d ' '`; done && echo 'scale=3;($x/${queries})' | bc
Андрей

On 2009-12-14T12:26:29.127+02:00, puzan wrote:

А в gentoo dig в каком пакете никто не знает?

On 2009-12-14T14:33:48.012+02:00, Programmaster wrote:

Андрей комментирует:

>Надо в начале обнулить переменную Х, а то результат суммируется.

Да, точно. Спасибо, исправлено!

puzan комментирует:

>А в gentoo dig в каком пакете никто не знает?

Gentoo-Portage Search говорит, что в net-dns/bind-tools

Drop me a line! (wonder where’s the comments form?)