03 - Type 0 - Echo Reply (Ping)
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
abcdefghijklmnopqrstuvwou 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
pingreportará "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
pingpermite definir o padrão de preenchimento (-pno Linux) e o tamanho do pacote (-s), útil para testar MTU e detectar fragmentação. - Flood ping:
ping -fenvia 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.