Por que demora mais para pingar por hostname do que por endereço IP?

7

Eu notei que o ping pelo nome do host é mais lento do que usar o endereço IP. Por exemplo, na linha de comando do Linux:

$ time ping google.com -c 1
PING google.com (150.101.213.160) 56(84) bytes of data.
64 bytes from 150.101.213.160: icmp_seq=1 ttl=61 time=14.4 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 14.425/14.425/14.425/0.000 ms

real    0m5.251s
user    0m0.003s
sys 0m0.005s

$ time ping 150.101.213.160 -c 1
PING 150.101.213.160 (150.101.213.160) 56(84) bytes of data.
64 bytes from 150.101.213.160: icmp_seq=1 ttl=61 time=14.5 ms

--- 150.101.213.160 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 14.537/14.537/14.537/0.000 ms

real    0m0.019s
user    0m0.001s
sys 0m0.004s

Eu pensei que no início era o servidor DNS demorando um pouco para resolver, mas quando eu ping pelo nome do host, a primeira linha aparece quase imediatamente, mostrando que o endereço IP já foi determinado. A pausa de cinco segundos é após essa resolução de DNS, pouco antes do (primeiro) ping ser recebido.

    
por Sparhawk 15.05.2014 / 14:39

1 resposta

13

O atraso é causado por ping tentando resolver o endereço IP de volta para um nome 1 , pesquisando 160.213.101.150.in-addr.arpa ( DNS reverso ).

Normalmente, a resposta (seja sucesso ou nxdomain) deve ser instantânea, mas pode ser que ela não tenha sido armazenada em cache pelo seu ISP e pelos servidores autorizados por 213.101.150.in-addr.arpa estavam com problemas naquele momento.

Também pode ser causado por configuração incorreta ou apenas por bugs em determinados servidores DNS. Se você vir esse atraso acontecendo toda vez, pode ser que o seu resolvedor de DNS não esteja armazenando as respostas corretamente no cache quando necessário (até as respostas negativas podem ser armazenadas em cache).

Ao usar o ping de iputils, adicione a opção -n para evitar pesquisas de DNS reverso.

1 É um nome de domínio ou um nome de host, não um URL; ele não especifica nenhum protocolo ou recurso específico. http://google.com seria um URL. http://150.101.213.160 seria um URL também.

    
por 15.05.2014 / 15:06