Curso de Redes – Como funciona o programa ping
O programa ping
O programa ping, escrito por Mike Muus em 1983, é um utilitário que permite testar a conectividade entre dois hosts em uma rede. Ele funciona enviando uma mensagem ICMP do tipo Echo Request a um host, e espera o recebimento de uma mensagem ICMP do tipo Echo Reply em retorno.
No geral, se você não conseguir “pingar” um host, significa que não há conectividade entre as máquinas envolvidas no processo. É um dos primeiros passos que tomamos para determinar qual o problema que afeta uma rede onde um ou mais hosts não conseguem se comunicar entre si, ou com a rede externa.
Na figura a seguir podemos ver o formato das mensagens ICMP Echo Request e Echo Reply. O que as diferencia é o tipo – a mensagem Echo Request possui o tipo 8 e a Echo Reply, o tipo 0, ambas com código 0:
O Número de Sequência se inicia em 1 e é incrementado cada vez que uma nova mensagem Echo Request é enviada. o ping então mostra o número de sequência de cada datagrama retornado, de modo que podemos verificar se os pacotes se perderam, estão fora de ordem, ou ainda foram duplicados. Como sabemos, o protocolo IP é um serviço de entrega de datagramas do tipo “melhor esforço”, de modo que qualquer uma dessas condições citadas pode vir a ocorrer.
Além de mostrar o número de sequência, quando a mensagem de retorno Echo Reply é recebida, também são mostrados o TTL e o RTT (Round Trip Time) calculado. O ping calcula o RTT armazenando a hora na qual o pacote Echo Request é enviado na área de dados da mensagem ICMP. Então, quando a resposta Echo Reply é recebida, ele simplesmente subtrai esse valor de hora da hora atual (momento em que o datagrama é recebido). Erros e perda de pacotes também são relatados pelo comando ping.
Veja na figura a seguir um exemplo do comando ping emitido para testar a conectividade com o host www.planetaunix.com.br (usando uma estação com Kali Linux) :
Veja o mesmo comando sendo emitido a partir do prompt de comandos em uma estação com Windows 7:
Em ambos os casos emitimos o ping para uma URL (www.planetaunix.com.br), podemos perceber que o endereço IP é resolvido e então utilizado para o envio das mensagens. Quando emitimos um comando ping, alguns segundos podem se passar antes da primeira linha de informações com o IP do host aparecer, sendo esse o tempo necessário para que o DNS determine o IP que corresponda ao hostname usado. Obviamente podemos pingar um endereço IP diretamente, se ele for conhecido.
Note também que a saída padrão no Linux mostra o número de sequência de cada datagrama (campo icmp_seq=), ao passo que no prompt do Windows essa informação não é mostrada por padrão.
As colunas time= e tempo= mostram o RTT do datagrama enviado (em milissegundos), ao passo que o TTL (43 no exemplo) é mostrado na coluna TTL (mesmo nome em ambos os sistemas).
Já o campo bytes=32 mostra o tamanho da mensagem enviada – no caso, 32 bytes. Esse tamanho pode ser alterado por meio de opções do comando ping, que veremos mais adiante. Alterar a quantidade de bytes enviados pode ser muito útil para realização de testes específicos de conectividade.
São mostradas também as estatísticas de envio dos pacotes, com dados sobre número de pacotes transmitidos, número de pacotes recebidos, pacotes perdidos e porcentagem de perda. Os RTTs mínimo, máximo e médio também são calculados e exibidos.
Sintaxe do comando ping
ping [opções] hostname ou endereço ip
Opções comuns do programa ping no Windows:
Exemplo:
1. Pingar o host www.bosontreinamentos.com.br enviando seis requisições de eco:
ping -n 6 www.bosontreinamentos.com.br
2. Capturar os pacotes de ping no Wireshark. Vamos pingar o endereço www.bosontreinamentos.com.br e capturar os pacotes ICMP trocados usando o analisador de pacotes Wireshark:
ping www.bosontreinamentos.com.br
Veja os oito pacotes capturados na figura a seguir (4 mensagens Echo Request e 4 mensagens Echo Reply):
Vamos abrir uma das mensagens Echo Request para ver seu conteúdo:
Note os valores dos campos Tipo (8), Código (0), Checksum (ox4d56 [correct]), Identificador e Número de Sequência (ambos nas representações Big Endian e Little Endian), e o conteúdo da mensagem, que consiste em uma sequência de caracteres (no caso, letras do alfabeto).
Opções comuns do programa ping no Linux:
Exemplos
1. Enviar 8 pacotes de ping para o endereço 192.168.1.1 e sair:
# ping -c 8 192.168.1.1
2. Enviar 20 pacotes de ping para o endereço 192.168.1.1, com saída silenciosa:
# ping -c 20 -q 192.168.1.1
3. Enviar dois pacotes com tamanho de 100 bytes cada:
# ping -c 2 -s 100 192.168.1.1
4. Enviar pacotes por 4 segundos antes de encerrar. Como o tempo padrão entre cada pacote é de 1 segundo, espera-se que 4 pacotes sejam enviados e recebidos:
# ping -w 4 192.168.1.1
5. Enviar 16 pacotes, com intervalo de 0,5 segundo entre cada um:
# ping -c 16 -i 0.5 192.168.1.1
6. Enviar pacotes de flood ping por 5 segundos:
# ping -f -w 5 192.168.1.1
Note que com a opção de flood (-f), 2896 pacotes foram enviados em apenas 5 segundos.
Vimos neste artigo o funcionamento do programa ping, com vários exemplos de sua utilização. Trataremos no próximo artigo de um outro comando que faz uso de pacotes ICMP, o traceroute (ou tracert).
Excelente artigo Fábio!
Obrigado Danilo!