quarta-feira, 18 de outubro de 2017

Entendendo o funcionamento do comando PING

Durante uma das fases (entrevista técnica) do processo seletivo para PFE na Microsoft, me foi solicitado explicação sobre o funcionamento do comando ping.

O que ocorre "por baixo dos panos" quando disparamos um ping de um host para outro?

Felizmente eu sabia responder e tive que fazê-lo de forma "resumida". Vamos lá ...

O ping é um comando utilizado para testes de conectividade entre dois hosts, que utiliza o protocolo ICMP (Internet Control Message Protocol), que por sua vez atua na camada 3 do modelo OSI (Rede).

Quando "disparamos" um ping de um host para outro, é enviado uma mensagem ICMP do tipo "Echo Request" (tipo 8) e espera-se receber uma mensagem Echo Reply (Tipo 0).

Quando a mensagem do tipo Echo Reply é recebida, é exibido o calculo do TTL (Time to Live), RTT (Round Trip Time), erros e perda de pacotes.

O TTL é responsável por impor limites à transmissão de um pacote, de modo a não permitir que esse trafegue indefinidamente. Ele define o tempo máximo de vida de um pacote.

A cada roteador pelo qual o pacote passa em busca de seu destino, o valor de TTL sofre um decréscimo. Ao chegar a zero, o pacote é descartado enviando um pacote ICMP "Time Exceeded".

Conforme abaixo, cada sistema operacional possui um valor de TTL padrão. Isso nos permite inclusive identificar qual sistema operacional está respondendo ao ping.

Sistemas operacionais Microsoft => TTL 128
Sistemas operacionais Linux => TTL 64
Sistemas operacionais Unix => TTL 255

OBS: Ao menos em sistemas operacionais Microsoft é possível alterar o valor de TTL padrão através da inserção da chave de registro do tipo DWORD denominada  "DefaultTTL" com valor decimal em  HKLM\System\CurrentControlSet\Services\tcpip\Parameters. Para que a alteração surta efeito, é necessário reiniciar o Sistema Operacional.

Abaixo um exemplo do comando ping com destino a google.com.br.


Resultado do comando ping

Partindo do pressuposto de que o valor de TTL do servidor que respondeu ao ping acima evidenciado não tenha sido alterado, podemos deduzir que:

1-) Trata-se de um servidor Linux (TTL 64, mais próximo de 56);
2-) Para chegar ao destino, o pacote passou por 08 roteadores (64-56)

O cálculo do RTT é efetuado armazenando a hora de envio do pacote Echo Request na área de dados da mensagem ICMP. Quando o Echo Reply é recebido, ocorre a subtração (Echo Reply - Echo Request).

Com essa breve explicação, espero ter contribuído para o enriquecimento técnico e conceitual de vocês.

Um abraço e até a próxima postagem.