Por que “dig localhost” é muito mais rápido que “nslookup localhost”?

0

Ao pesquisar o endereço de localhost , nslookup localhost demora ~ 15 segundos:

$ /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 é imediato.

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

Por que dig é muito mais rápido que nslookup ? O que é nslookup fazendo / dig não fazer isso demora tanto?

Incidentalmente:

$ grep localhost /etc/hosts
127.0.0.1 localhost

O fato de que nslookup está falhando é devido a um problema de configuração: /etc/resolv.conf contém um sufixo search extra, que está sendo encaminhado para um resolvedor inexistente.

Minha pergunta é: por que a diferença?

    
por Roger Lipscombe 09.05.2018 / 10:58

1 resposta

0

No seu caso particular, é porque nslookup está expirando, o que geralmente leva um tempo muito longo comparado a obter uma resposta válida.

Como um pouco de conhecimento adicional:

  • dig é principalmente uma ferramenta de depuração de baixo nível. Ele não faz recursão por si só, requer que você especifique um servidor para consultar e permite que você consulte tipos arbitrários de RR (ou apenas ANY para obter todos os registros). Geralmente, ele será marginalmente mais rápido fazendo a pesquisa real do que nslookup simplesmente porque tem todos os dados necessários na linha de comando.
  • nslookup foi projetado para ser uma ferramenta interativa para consultar a infra-estrutura do DNS, em vez de fazer inerentemente pesquisas pontuais como dig . Isso acontece para fornecer um modo não interativo (que você está usando acima), mas isso é principalmente apenas uma forma abreviada. Enquanto você pode dizer que para usar um servidor específico, o padrão será usando os configurados em /etc/resolv.conf , e assim o arranque sem um servidor especificado é ligeiramente mais lento do que dig (porque tem que olhar em um arquivo).
  • host , que você não mencionou, mas vale a pena mencionar aqui para conclusão, é um comando fornecido pela biblioteca C para fazer pesquisas de nome de host. Ele usa as rotinas de resolução de nomes na biblioteca C, o que significa que homenageia /etc/resolv.conf , mas que também irá honrar configurações /etc/nsswitch.conf , o que significa que ele pode olhar para cima nomes nas /etc/hosts , via NIS ou NIS +, via LDAP , via mDNS (se você usar o TLD certa para isso), via LLMNR, ou através de qualquer número de outros meios, Como resultado, ele é lento em comparação com dig e nslookup , mas também mostra exatamente waht um programa que está usando as configurações de resolução de nome do sistema em vez de fazer seu próprio DNS verá.
por 09.05.2018 / 20:58