Certamente que já se deparou com uma situação em que a Internet no seu computador se interrompe subitamente. Este comportamento pode ser observado quando se utilizam modems ADSL, Wifi de longa distância, GSM e outras tecnologias semelhantes não fiáveis. Pode descobrir rapidamente se o seu computador tem Internet utilizando o utilitário ping.
No entanto, o âmbito da sua aplicação é muito mais vasto: é utilizado pelos administradores de rede para verificar a disponibilidade de um nó remoto na rede, é utilizado em vários guiões e em muitos outros locais. Neste artigo, vamos analisar o comando ping no Linux, falaremos sobre como usar o utilitário, como ele funciona, veremos suas opções e recursos.
O utilitário ping é uma ferramenta simples de resolução de problemas de rede. Ele permite verificar se um host remoto está disponível ou não e é isso. Para isso, o utilitário verifica se o host pode responder a solicitações de rede usando o protocolo ICMP. Espero não precisar de vos dizer que todos os dados na rede são transmitidos sob a forma de pequenos pacotes. O programa transmite um pequeno pacote de dados ICMP e espera receber um pacote de resposta; se isso acontecer, considera-se que o anfitrião remoto está contactável. O ICMP ou Internet Control Message Protocol é um complemento do protocolo IP utilizado para transmitir mensagens de serviço e de erro.
O protocolo ICMP só pode transmitir dois tipos de pacotes - mensagens de comunicação de erros e mensagens de pedido. Por sua vez, as mensagens de pedido dividem-se em:
Mensagem de pedido de eco;
Mensagem de resposta de eco.
De seguida, vamos perceber o que faz o comando ping. Depois de enviar um pedido de ping para um host remoto, o utilitário define um identificador exclusivo para cada pacote, bem como o TTL e a hora em que o pacote foi enviado. Se o host estiver acessível, ele envia uma resposta; com base no tempo de envio, o utilitário pode calcular o tempo de ida e volta do pacote. Em seguida, o próximo pacote é enviado. No final, é calculado o número total de pacotes enviados e recebidos, a percentagem de perda e outros dados.
Agora resta-nos um pouco de prática. Mas antes de entrarmos na prática, vamos ver a sintaxe do comando e suas opções. A sintaxe é bastante simples:
$ ping [options] host_address
O formato do comando ping é muito simples. Pode passar um endereço ip ou um nome de domínio como endereço do anfitrião. As opções configuram o comportamento do utilitário. Vamos considerar as principais:
-4 - usa apenas ipv4 (padrão);
-6 - usa apenas ipv6;
-A - modo adaptativo, o tempo entre o envio de um pacote é adaptado ao tempo de transmissão e receção do pacote, mas não inferior a 200 milissegundos;
-b - permitir o ping do endereço de difusão;
-c - número de pacotes a enviar;
-D - tempo de saída como carimbo de data/hora UNIX;
-f - modo de inundação, neste modo os pacotes são transmitidos sem atraso, ele pode ser usado para ataques DoS em nós individuais. O número de pontos que o utilitário produz indica o número de pacotes perdidos;
-i - o intervalo em segundos entre o envio de pacotes;
-I - usa esta interface de rede para enviar pacotes;
-l - modo de sobrecarga, são enviados muitos pacotes e o sistema não monitoriza os pacotes de resposta;
-n - não obter domínios para endereços ip;
-r - ignora as tabelas de roteamento e envia o pacote para a interface especificada;
-s - tamanho de um pacote;
-t - define o TTL manualmente;
-v - saída mais detalhada.
Agora que já cobrimos os parâmetros básicos do comando ping e sua sintaxe, é hora de praticar, a seguir falaremos sobre como executar o ping em um host específico no Linux.
Para verificar o desempenho da rede é muito utilizado o ping de algum site que esteja sempre disponível, como o google.com ou até mesmo o mais simples e curto ya.ru. Só precisa de passar este endereço ao utilitário nos parâmetros, ele próprio encontrará o ip e fará tudo o que for necessário:
$ ping ya.ru

Cada pacote recebeu um identificador único icmp_seq, o número de nós até ao nó alvo ttl e o tempo gasto para entregar o pacote time. Para parar o ping, prima o atalho de teclado Ctrl+C. No final, o utilitário apresenta estatísticas gerais:
packets transmitted (pacotes transmitidos) - pacotes enviados;
received - pacotes recebidos;
perda de pacotes - percentagem de pacotes perdidos;
tempo - tempo total de trabalho;
rtt min/avg/max/mdev - tempo mínimo/tempomédio/tempo máximo/desvio quadrático.
Se o comando ping não for interrompido, os pacotes podem ser enviados durante muito tempo, o que cria uma carga adicional no servidor e, por conseguinte, não é desejável. É possível limitar o número de pacotes enviados imediatamente na chamada do comando usando a opção -c:
$ ping -c 3 ya.ru

Tal como fazemos ping para um domínio, pode especificar diretamente o endereço IP. Isto permite-lhe verificar se existe uma rede quando os servidores DNS estão mal configurados. Por exemplo:
$ ping -c 3 8.8.8.8
O próximo tipo de envio de mensagens ping é o ping flood. Com a ajuda destes pacotes, pode efetuar testes de carga do canal ou mesmo desligar a ligação à Internet de uma das máquinas. Mas estas funções só podem ser utilizadas com direitos de superutilizador. Para organizar uma inundação de ping, especifique a opção -f:
$ ping -f losst.ru
Por defeito, no modo normal, cada pacote seguinte é enviado quando é recebida uma resposta ao anterior. Mas pode definir o intervalo entre o envio de pacotes -i:
$ ping -i 0.2 losst.ru

Aqui o programa ping executa uma chamada inundação configurável, especificando a intensidade com que deseja enviar os pacotes. Com a opção -D pode ver o Unix Timestamp de cada mensagem:
$ ping -D losst.ru

Vimos o que é o comando ping no Linux, como usá-lo, parâmetros básicos e métodos de aplicação. Esta ferramenta muito simples pode ser usada para testar problemas de rede e corrigi-los. Neste aspeto, o utilitário pode tornar-se indispensável.