Warum ist "dig localhost" so viel schneller als "nslookup localhost"?

722
Roger Lipscombe

Wenn Sie die Adresse zum Nachschlagen localhost, nslookup localhostnimmt ~ 15 Sekunden:

$ /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 ist unmittelbar.

$ /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 

Warum ist digso viel schneller als nslookup? Was macht das nslookupTun / digNicht-Tun so lange?

Übrigens:

$ grep localhost /etc/hosts 127.0.0.1 localhost 

Die Tatsache, dass dies nslookupfehlschlägt, ist auf ein Konfigurationsproblem zurückzuführen: /etc/resolv.confEnthält ein zusätzliches searchSuffix, das an einen nicht vorhandenen Resolver weitergeleitet wird.

Meine Frage ist: Warum der Unterschied?

0
In Ihrer eigenen Ausgabe schlägt nslookup fehl, daher ist dies kein aussagekräftiger Vergleich. Für mich sind beide Befehle fast augenblicklich. jdwolf vor 6 Jahren 0
`dig` und` nslookup` benötigen für mich ca. 10ms. Wie @jdwolf darauf hinweist, zeigt Ihre Ausgabe, dass "nslookup" ein Zeitlimit überschreitet, was auf ein Konfigurationsproblem hinweist. Attie vor 6 Jahren 0
Ich weiß, es ist ein Konfigurationsproblem. Meine Frage ist warum der Unterschied? Ich habe die Frage aktualisiert. Roger Lipscombe vor 6 Jahren 0

1 Antwort auf die Frage

0
Austin Hemmelgarn

In Ihrem speziellen Fall handelt es sich nslookupum ein Zeitlimit, das im Vergleich zu einer gültigen Antwort normalerweise sehr lange dauert.

Als weiteres Hintergrundwissen:

  • digist meistens ein einfaches Debugging-Tool. Es führt keine Rekursion selbst aus, Sie müssen einen Server angeben, der abgefragt werden soll, und Sie können beliebige RR-Typen abfragen (oder einfach ANYalle Datensätze abrufen). Im Allgemeinen ist die Suche geringfügig schneller als nslookup, einfach weil Es enthält alle erforderlichen Daten in der Befehlszeile.
  • nslookupist als interaktives Tool zum Abfragen der DNS-Infrastruktur konzipiert, anstatt Spot-Lookups von Haus aus durchzuführen dig. Es gibt einen nicht interaktiven Modus (den Sie oben verwenden), aber das ist meistens nur eine Kurzform. Sie können zwar /etc/resolv.confangeben, dass ein bestimmter Server verwendet werden soll, es wird jedoch standardmäßig der Server verwendet, der in konfiguriert ist. Daher ist der Start ohne einen angegebenen Server geringfügig langsamer als dig(da er in einer Datei suchen muss).
  • host, die Sie nicht erwähnt haben, aber der Vollständigkeit halber hier erwähnt werden sollten, ist ein Befehl, der von der C-Bibliothek für die Suche nach Hostnamen bereitgestellt wird. Es verwendet die Namensauflösungsroutinen in der C-Bibliothek, was bedeutet, dass es die /etc/resolv.confEinstellungen berücksichtigt, aber es wird auch die Einstellungen /etc/nsswitch.confberücksichtigen /etc/hosts, dh es kann Hostnamen über NIS oder NIS +, über LDAP und über mDNS suchen (wenn Sie das Recht verwenden) TLD für dieses Programm ), über LLMNR oder auf eine andere Weise. Daher ist es im Vergleich zu digund langsam nslookup, aber es zeigt Ihnen auch genau, was ein Programm verwendet, das die Namensauflösungseinstellungen des Systems verwendet, anstatt sein eigenes DNS zu sehen .