Почему " dig localhost "намного быстрее, чем"nslookup localhost"?

при поиске по адресу 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 doing/dig не делает, что занимает так много времени?

кстати:

$ grep localhost /etc/hosts
127.0.0.1 localhost

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

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

5
задан Roger Lipscombe
источник

1 ответов

в вашем конкретном случае, потому что 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, но он также показывает вам точно waht программа, которая использует настройки разрешения имен системы вместо того, чтобы делать это собственный DNS будет видеть.
0
отвечен Austin Hemmelgarn 2018-05-09 18:58:20
источник

Другие вопросы dig localhost nslookup