Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

03 - Type 0 - Echo Reply (Ping)

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

A mensagem ICMP Type 0 (Echo Reply) é a resposta automática enviada por um host ou roteador em resposta a uma mensagem Echo Request (Type 8). Juntas, essas duas mensagens formam a base do mecanismo conhecido universalmente como Ping (Packet Internet Groper).

Se o Echo Request (Type 8) é a pergunta "Você está aí?", o Echo Reply (Type 0) é a resposta afirmativa "Sim, estou aqui". Esta mensagem é essencial para a verificação de alcançabilidade (reachability) de um host na rede e para medições de latência.

1. O Mecanismo de "Eco" (Echo)

O funcionamento do Type 0 depende de um princípio de espelhamento (mirroring). Quando um dispositivo recebe um Echo Request válido, o sistema operacional (kernel) gera um Echo Reply contendo, essencialmente, os mesmos dados que recebeu.

  • Troca de Identificadores: O processo envolve inverter os papéis de origem e destino. O endereço IP de origem do Echo Request torna-se o endereço de destino do Echo Reply, e vice-versa.
  • Preservação de Dados: O protocolo exige que o payload (carga útil) recebido no Echo Request seja devolvido inteiramente no Echo Reply. Isso é crucial para que o remetente possa validar a integridade do caminho de ida e volta.

2. Estrutura e Campos Específicos

Para que o host de origem possa associar a resposta à sua pergunta, o cabeçalho ICMP do Echo Reply deve espelhar os identificadores contidos no Echo Request:

  • Type: 0 (Define a mensagem como uma Resposta de Eco).
  • Code: 0 (Sempre zero para Echo Reply).
  • Checksum (16 bits): Verifica a integridade da mensagem ICMP inteira (cabeçalho + dados).
  • Identifier (Identificador - 16 bits): Um valor arbitrário (geralmente o PID do processo que enviou o ping) que é copiado do request para o reply. Permite que o sistema operacional distinga entre múltiplas instâncias de ping rodando simultaneamente.
  • Sequence Number (Número de Sequência - 16 bits): Um contador incremental que começa em 0. É copiado do request para o reply. Permite ao remetente identificar se algum pacote foi perdido ou chegou fora de ordem (ex: se recebo a sequência 5 antes da 4).
  • Data (Dados Variáveis): O conteúdo enviado no Echo Request (geralmente preenchido com letras do alfabeto como abcdefghijklmnopqrstuvw ou um timestamp). A devolução exata destes dados no Echo Reply permite calcular o RTT (Round Trip Time) com precisão, pois o remetente sabe exatamente quando os dados saíram e quando voltaram.

Diagrama da Mensagem ICMP Echo Reply

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type = 0  |     Code = 0  |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |       Sequence Number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Data (Variável)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

A mensagem ICMP inteira é encapsulada em um datagrama IP, com o campo Protocol = 1 (ICMP) no cabeçalho IPv4.

3. Processamento no Nível do Kernel

Diferente de serviços como o HTTP que rodam em aplicações de usuário (no User Space), o tratamento do Echo Reply (e Request) é geralmente realizado pelo Kernel do sistema operacional (no Kernel Space).

  • Eficiência: Como não há necessidade de subir para a camada de aplicação, o Echo Reply é gerado com latência extremamente baixa. O interruptor (interrupt) de rede avisa o kernel, que monta o pacote ICMP e o devolve ao fio quase instantaneamente.
  • Interrupção de Serviço: Se o "stack" de rede do kernel estiver quebrado ou a máquina estiver travada, o Echo Reply não será enviado, o que indica uma falha crítica na máquina mesmo que a placa de rede esteja fisicamente conectada.
  • Configuração via sysctl (Linux): A resposta ao Echo Request pode ser controlada via /proc/sys/net/ipv4/icmp_echo_ignore_all (0 = responde, 1 = ignora silenciosamente). Para ignorar broadcasts (/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts), o padrão moderno é 1 para evitar ataques Smurf.

4. Utilidade e Diagnóstico

A análise do Echo Reply fornece informações vitais sobre o estado da rede:

  • Verificação de Vida: Se o remetente receber um Type 0, ele sabe que o host de destino está ativo, seu stack de rede está funcional e o endereço IP está correto.
  • Medição de Latência (RTT): Ao marcar o tempo de envio do Echo Request e o tempo de chegada do Echo Reply, calcula-se o tempo de ida e volta. Variações no RTT (Jitter) podem indicar congestionamento na rede.
  • Detecção de Perda: Se o remetente enviar 10 Echo Requests (sequências 1 a 10) e receber apenas 9 Echo Replies (falta a sequência 5), sabe-se que houve uma perda de pacote de 10% naquele caminho.

Exemplo de Saída do Comando ping

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=12.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=11.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=119 time=13.1 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 11.9/12.4/13.1/0.5 ms

Cada linha 64 bytes from corresponde a um Echo Reply recebido. A diferença entre o timestamp de envio e de recepção é o RTT exibido em time=.

5. Considerações de Segurança e Firewalls

Embora o Echo Reply seja uma ferramenta de diagnóstico vital, ele também pode ser usado para "fingerprinting" de redes e ataques de negação de serviço (ex: Smurf Attack).

  • Bloqueio de Entrada/Saída: Muitos firewalls de borda são configurados para bloquear o tráfego Echo Request (Type 8) entrante (para evitar varreduras de rede) e, às vezes, o Echo Reply (Type 0) sainte. Se um firewall bloquear o Echo Reply de volta, a ferramenta ping reportará "Request Timed Out", mesmo que o host de destino esteja vivo e funcionando.
  • Echo Request Bloqueado, Reply Enviado: Se um host configurar seu firewall para aceitar Echo Requests, mas o firewall do remetente bloquear Echo Replies, o ping falhará. Portanto, um "ping falhando" não significa necessariamente que o destino está morto; pode significar apenas que o diagnóstico está sendo bloqueado em algum ponto do caminho.
  • Smurf Attack: Ataque clássico de amplificação em que o atacante envia Echo Requests com endereço de origem forjado (spoofed) igual ao endereço da vítima para o endereço de broadcast de uma rede. Todos os hosts da rede respondem com Echo Replies simultaneamente, inundando a vítima. A mitigação se dá bloqueando respostas a Echo Requests dirigidos a broadcasts (BCP 38 / RFC 2827).

6. ICMP Echo em IPv6

No IPv6, o equivalente ao ICMPv4 Echo Request/Reply é definido pela RFC 4443:

  • ICMPv6 Type 128: Echo Request.
  • ICMPv6 Type 129: Echo Reply.

A estrutura é praticamente idêntica (Type, Code, Checksum, Identifier, Sequence, Data), com a diferença de que o Checksum do ICMPv6 abrange também um pseudo-cabeçalho IPv6 (origem, destino, comprimento), reforçando a integridade. A ferramenta ping6 é usada para enviar esses pacotes em redes IPv6.

7. Boas Práticas de Operação

Em ambientes corporativos, recomenda-se:

  • Permitir Echo Request/Reply na LAN interna para diagnóstico de equipe técnica.
  • Bloquear Echo Request vindos da Internet para servidores públicos (ou limitar a fontes confiáveis via ACL).
  • Permitir Path MTU Discovery ICMP (Type 3 Code 4) sempre, pois bloqueá-lo causa problemas em conexões TCP (black hole connections).
  • Monitorar quedas de Echo Reply em ferramentas de monitoramento (Nagios, Zabbix, Prometheus) como indicador de saúde de rota.

8. Variações e Extensões

Alguns sistemas operacionais e ferramentas implementam extensões sobre o Echo Request/Reply básico:

  • Timestamp ICMP (Type 13/14): Variação que solicita e retorna timestamps, permitindo sincronização aproximada de relógios (hoje obsoleto, substituído por NTP).
  • Ping com payload customizado: O utilitário ping permite definir o padrão de preenchimento (-p no Linux) e o tamanho do pacote (-s), útil para testar MTU e detectar fragmentação.
  • Flood ping: ping -f envia Echo Requests o mais rápido possível, exibindo um . para cada envio e um backspace para cada reply. Útil para testes de stress, mas deve ser usado com cautela em redes de produção.
  • MPLS Echo Request/Reply: Definido na RFC 4379, é uma variação usada para validar LSPs (Label Switched Paths) em redes MPLS, com estrutura similar mas escopo distinto.

9. Resumo de Campos ICMP Echo

Campo Tamanho Função
Type 8 bits 0 (Echo Reply)
Code 8 bits 0 (sempre)
Checksum 16 bits Integridade da mensagem ICMP
Identifier 16 bits Espelha o do Echo Request
Sequence Number 16 bits Espelha o do Echo Request
Data Variável Espelha o payload do Echo Request

O Echo Reply, em conjunto com o Echo Request, representa a ferramenta de diagnóstico mais onipresente em redes IP, sendo implementado em praticamente qualquer dispositivo com stack TCP/IP, desde sensores IoT até roteadores de backbone.