При поиске адреса для localhost , nslookup localhost занимает ~ 15 секунд:

$ /usr/bin/time nslookup localhost
;; connection timed out; no servers could be reached

Command exited with non-zero status 1
0.00user 0.00system 0:15.00elapsed 0%CPU (0avgtext+0avgdata 4072maxresident)k
0inputs+0outputs (0major+1121minor)pagefaults 0swaps

dig localhost немедленно.

$ /usr/bin/time dig localhost

; <<>> DiG 9.9.5-3ubuntu0.17-Ubuntu <<>> localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20936
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;localhost.         IN  A

;; ANSWER SECTION:
localhost.      0   IN  A   127.0.0.1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed May 09 08:53:37 UTC 2018
;; MSG SIZE  rcvd: 43

0.00user 0.00system 0:00.07elapsed 6%CPU (0avgtext+0avgdata 4244maxresident)k
320inputs+0outputs (1major+1164minor)pagefaults 0swaps

Почему dig намного быстрее, чем nslookup? Что делает nslookup / dig не занимает так много времени?

Кстати:

$ grep localhost /etc/hosts
127.0.0.1 localhost

Факт сбоя nslookup с проблемой конфигурации: /etc/resolv.conf содержит дополнительный суффикс search , который пересылается несуществующему преобразователю.

Мой вопрос: почему разница?

1 ответ1

0

В вашем конкретном случае это происходит потому, что nslookup истекает, что обычно занимает очень много времени по сравнению с получением правильного ответа.

Как немного дальнейшего фона:

  • dig - это в основном низкоуровневый инструмент отладки. Он не выполняет рекурсию сам по себе, требует, чтобы вы указали сервер для запроса, и позволяет запрашивать произвольные типы RR (или просто ANY чтобы получить все записи). Обычно это будет немного быстрее, чем просто nslookup. потому что он имеет все данные, необходимые для командной строки.
  • nslookup разработан для того, чтобы быть интерактивным инструментом для запросов к инфраструктуре DNS, а не выполнять поиск по месту, как dig . Это случается, чтобы обеспечить неинтерактивный режим (который вы используете выше), но это в основном просто сокращение. Хотя вы можете указать ему использовать определенный сервер, он по умолчанию будет использовать серверы, настроенные в /etc/resolv.conf , и, таким образом, запуск без указанного сервера будет немного медленнее, чем dig (потому что он должен искать в файле).
  • host , о котором вы не упомянули, но который стоит упомянуть здесь для полноты, - это команда, предоставляемая библиотекой C для поиска имени хоста. Он использует подпрограммы разрешения имен в библиотеке C, что означает, что он /etc/resolv.conf , но также учитывает настройки в /etc/nsswitch.conf , что означает, что он может искать имена хостов в /etc/hosts , через NIS или NIS+, через LDAP, через mDNS (если вы используете для этого правильный TLD), через LLMNR или любым другим способом. В результате он медленнее по сравнению с dig и nslookup , но также показывает точно что увидит программа, использующая настройки разрешения имен системы вместо собственной DNS.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .