O Protocolo ICMP (Internet Control Message Protocol) cumpre suas funções na Camada de Rede através da transmissão de dois tipos fundamentais de mensagens: Mensagens de Erro e Mensagens de Consulta (ou Controle). Esta divisão de categorias permite que a rede reporte falhas na entrega de dados e realize diagnósticos ativos da conectividade.

Como o protocolo IP subjacente opera de forma assíncrona e não confiável (sem confirmações de entrega), o ICMP atua como o mecanismo de feedback necessário para manter a integridade operacional da internet. Ele fornece os “sentidos” para a “cegueira” do encaminhamento de pacotes IP.

1. Mensagens de Erro

As mensagens de erro são geradas reativamente. Elas são disparadas por roteadores intermediários ou pelo host de destino quando ocorre um problema que impede o processamento ou a entrega bem-sucedida de um datagrama IP original.

O objetivo principal dessas mensagens é notificar a origem do problema, permitindo que a aplicação ou o protocolo de transporte (como o TCP) tome as medidas cabíveis, como retransmitir o dado ou encerrar a conexão.

A. Princípios do Relatório de Erro

  • Retorno à Origem: As mensagens de erro são sempre enviadas de volta ao endereço IP de origem do datagrama que causou o erro. Roteadores não geram mensagens de erro para os seus vizinhos, mas sim para o emissor original.
  • Não Correção: O ICMP não corrige o erro na rede. Ele apenas relata. O pacote original é descartado. É responsabilidade da origem tentar novamente se necessário.
  • Carga Útil do Pacote Ofensor: A mensagem de erro ICMP geralmente contém no seu payload o cabeçalho IP (e os primeiros 64 bits) do datagrama que causou o erro. Isso permite que o remetente identifique qual fluxo de dados falhou (quais portas TCP/UDP, qual sequência).

B. Tipos Principais de Mensagens de Erro

As mensagens de erro são categorizadas pelo Campo Type no cabeçalho ICMP. As mais comuns incluem:

  1. Destination Unreachable (Tipo 3): O roteador ou host de destino não consegue entregar o pacote.
    • Códigos comuns: Rede inalcançável, Host inalcançável, Porta inalcançável (comum quando um firewall bloqueia ou nenhum serviço está escutando), ou necessidade de fragmentação mas o bit DF está ativado.
  2. Time Exceeded (Tipo 11): O pacote não chegou ao destino dentro do tempo permitido.
    • Código 0 (TTL Exceeded): O campo TTL do datagrama chegou a zero. O roteador descartou o pacote. Isso é fundamental para ferramentas como traceroute.
    • Código 1 (Fragment Reassembly Time Exceeded): O destino não conseguiu remontar todos os fragmentos de um datagrama dentro do tempo limite.
  3. Redirect (Tipo 5): O roteador informa ao host de origem que existe um “próximo salto” (next-hop) melhor e mais direto para chegar ao destino, sugerindo que o host atualize sua tabela de roteamento. Geralmente usado em redes locais onde um host usa um roteador padrão incorreto.
  4. Parameter Problem (Tipo 12): O roteador ou host encontrou um problema na estrutura do cabeçalho IP (ex: IHL inválido, opção desconhecida crítica), impedindo o processamento. O campo “Pointer” indica qual byte do cabeçalho está errado.
  5. Source Quench (Tipo 4 - Obsoleto): Historicamente, o roteador enviava essa mensagem para pedir ao remetente que reduzisse a velocidade de envio em caso de congestionamento. Foi descontinuado porque criava ataques de negação de serviço e o controle de congestionamento foi movido para o TCP.

2. Mensagens de Consulta e Controle

Diferente das mensagens de erro, as mensagens de consulta (também chamadas de informativas) são geradas proativamente. Elas não são respostas a falhas, mas sim solicitações deliberadas enviadas por um host para investigar o estado da rede ou obter informações de outro dispositivo.

Essas mensagens operam geralmente no par Request (Solicitação) e Reply (Resposta).

A. Tipos Principais de Mensagens de Controle

  1. Echo Request e Echo Reply (Tipo 8 e Tipo 0):
    • É a base da ferramenta ping. Um host envia um Echo Request (pedido de eco), e o dispositivo de destino, se estiver ativo e configurado para responder, envia um Echo Reply imediatamente.
    • Usado para testar a alcançabilidade (o host está vivo?) e medir a latência (Round Trip Time).
  2. Timestamp Request e Timestamp Reply (Tipo 13 e 14):
    • Permite que um host solicite a hora atual do relógio de outro host.
    • Usado para sincronização de relógios e medição precisa de tempo de viagem da rede, embora o NTP seja mais preciso para sincronização.
  3. Router Solicitation e Router Advertisement (RS/RA):
    • No IPv6 (e em versões modernas de ICMPv4 em sistemas configuráveis), isso permite que hosts descubram roteadores na rede local automaticamente sem configuração manual, facilitando o SLAAC (Stateless Address Autoconfiguration).
  4. Address Mask Request e Reply (Tipo 17 e 18):
    • Usado em redes IPv4 mais antigas onde um host pode não saber sua máscara de sub-rede e a pergunta para o roteador. Hoje em dia, isso é geralmente fornecido via DHCP.

3. Regras de Geração e Prevenção de Tempestades

Para evitar que as mensagens ICMP causem congestionamento adicional ou loops infinitos na rede (especialmente durante falhas em massa), existem regras estritas para sua geração:

  • Sem Erros sobre Erros: Um roteador ou host nunca deve gerar uma mensagem de erro ICMP em resposta a outra mensagem de erro ICMP. Se um pacote ICMP falhar, o erro é silencioso. Isso evita “tempestades de feedback” (feedback storms).
  • Sem Erros para Broadcast/Multicast: Mensagens de erro não são geradas em resposta a datagramas que tenham endereço de destino de Broadcast ou Multicast. Se assim fosse, um único pacote ruim para uma rede inteira poderia gerar milhares de respostas de erro simultaneamente.
  • Apenas o Primeiro Fragmento: Mensagens de erro são geradas apenas para o primeiro fragmento de um datagrama IP fragmentado. Se um fragmento intermediário causar erro, nenhuma mensagem é enviada para evitar sobrecarga.
  • Descarte Silencioso: Se as regras acima proíbem o envio de uma mensagem de erro, o pacote é simplesmente descartado sem aviso.