Tópico 03 · Camada de Rede

Protocolo ICMP

O mensageiro da Internet: erros e diagnóstico da camada de rede — RFC 792

Serviços de Redes

O que é o ICMP

O Internet Control Message Protocol é o protocolo de controle e diagnóstico que acompanha o IP, reportando erros e testando a rede.

  • Não transporta dados de aplicação: serve à própria infraestrutura.
  • Reporta problemas: destino inalcançável, TTL esgotado, pacote grande demais.
  • Diagnostica: é a base do ping e do traceroute.

Um "complemento" do IP

O IP é de melhor esforço e não avisa quando algo dá errado. O ICMP preenche essa lacuna, devolvendo mensagens de controle à origem — sem, contudo, tornar o IP confiável.

Onde o ICMP vive na pilha

Apesar de ser uma "ajuda" ao IP, as mensagens ICMP viajam dentro de datagramas IP — é o protocolo nº 1 no campo Protocolo do IPv4.

Quadro de enlace (Ethernet / Wi-Fi) Cab. Enl. Datagrama IP (Protocolo = 1) Cab. IP Mensagem ICMP (Tipo, Código, Checksum, Dados)

O ICMP é processado pela camada de rede, mas precisa do IP para chegar ao destino.

Estrutura da mensagem ICMP

Toda mensagem começa com 3 campos fixos (Tipo, Código e Checksum). Cada linha = 32 bits:

0 8 16 31 Tipo (8) Código (8) Checksum (16) Resto do cabeçalho (32) — varia por tipo (ex.: Identificador + Sequência; MTU) Dados (variável) nas mensagens de erro: cabeçalho IP + 8 bytes do datagrama original

Incluir o início do pacote original permite à origem saber qual conexão gerou o erro.

Duas famílias: erro e consulta

Mensagens de erro

Reportam que algo impediu a entrega de um datagrama: destino inalcançável, tempo excedido, problema de parâmetro. Sempre carregam um trecho do pacote que falhou.

Mensagens de consulta

Servem a testes e diagnósticos em pares pergunta/resposta: o clássico Echo Request/Reply (ping).

Regra importante: o ICMP não gera mensagem de erro sobre outra mensagem de erro ICMP, nem sobre fragmentos não iniciais ou tráfego multicast/broadcast — para evitar tempestades de mensagens.

Principais tipos e códigos

TipoMensagemCódigos / uso típico
0Echo ReplyResposta do ping.
3Destination Unreachable0=rede, 1=host, 2=protocolo, 3=porta, 4=fragmentação necessária e DF (PMTUD).
5RedirectIndica uma rota melhor ao host.
8Echo RequestPergunta do ping.
11Time Exceeded0=TTL chegou a 0 (traceroute); 1=tempo de remontagem esgotado.
12Parameter ProblemErro em um campo do cabeçalho IP.
Tipos hoje obsoletos/desencorajados: 4 (Source Quench), 13/14 (Timestamp), 15/16 (Information), 17/18 (Address Mask).

Echo Request/Reply: o ping

Host A origem (ping) Host B destino Echo Request (Tipo 8) → ← Echo Reply (Tipo 0) o tempo entre o envio e a resposta é o RTT (round-trip time)

Os campos Identificador e Número de sequência casam cada resposta com seu pedido.

O que o ping informa: se o host está acessível, a latência (RTT) e a perda de pacotes — métricas básicas de saúde da rede.

Time Exceeded: o traceroute

O traceroute explora a regra do TTL: envia pacotes com TTL crescente e usa as respostas Time Exceeded para mapear o caminho.

Cada roteador que zera o TTL devolve um ICMP Tipo 11, revelando seu endereço — um salto de cada vez.
# TTL aumenta a cada rodada
TTL=1 → R1 responde Time Exceeded
TTL=2 → R2 responde Time Exceeded
TTL=3 → R3 responde Time Exceeded
...
TTL=n → destino responde Echo Reply
# a lista de roteadores = a rota

Destination Unreachable e o Path MTU Discovery

Path MTU Discovery

O host envia pacotes com o bit DF (não fragmentar). Se algum enlace tem MTU menor, o roteador descarta e responde Tipo 3, Código 4 — informando a MTU permitida. O host então reduz o tamanho dos pacotes.

Porta inalcançável

Quando um datagrama UDP chega a uma porta sem serviço, o destino responde Tipo 3, Código 3 (port unreachable) — mecanismo usado, inclusive, pelo traceroute baseado em UDP.

Cuidado ao filtrar ICMP: bloquear cegamente o Tipo 3 Código 4 quebra o PMTUD e cria "buracos negros" — conexões que travam ao enviar pacotes grandes.

Verificação de integridade (checksum)

O ICMP tem seu próprio checksum, calculado por complemento de um sobre toda a mensagem ICMP (não apenas o cabeçalho, como no IPv4).

1. zera o campo checksum
2. soma em complemento de um todas as palavras de 16 bits da mensagem
3. checksum = complemento de um da soma
no receptor: soma total = 0xFFFF → mensagem íntegra
Garante que a mensagem de controle não chegou corrompida — afinal, agir sobre um erro falso seria pior que ignorá-lo.

ICMPv6: muito mais que diagnóstico

No IPv6, o ICMPv6 (RFC 4443) é essencial e assume papéis que no IPv4 eram de outros protocolos:

  • NDP (descoberta de vizinhos) — substitui o ARP.
  • SLAAC — autoconfiguração via Router Advertisement.
  • MLD — gestão de grupos multicast.
  • Packet Too Big (Tipo 2) — base do PMTUD no IPv6.
MensagemICMP (v4)ICMPv6
Echo Request8128
Echo Reply0129
Dest. Unreachable31
Pacote grande demais3/42
Time Exceeded113
Diferença-chave: filtrar todo ICMPv6 quebra o IPv6 — sem ele não há NDP nem autoconfiguração.

Segurança: usos indevidos do ICMP

Inundação (flood)

Excesso de Echo Requests (ping flood) ou o antigo Smurf (eco para broadcast com origem forjada) sobrecarregam o alvo — ataques de DoS.

Pacotes malformados

O histórico Ping of Death usava pacotes ICMP fragmentados gigantes para travar sistemas vulneráveis.

Reconhecimento e túnel

Ping sweeps mapeiam hosts ativos; o ICMP tunneling esconde dados na carga para exfiltração furtiva.

O equilíbrio: filtrar ICMP demais quebra diagnóstico e PMTUD; de menos, expõe a rede. A prática é limitar a taxa (rate-limit) e permitir os tipos essenciais.
Síntese

Em resumo

O ICMP é o protocolo de controle que acompanha o IP, reportando erros (destino inalcançável, tempo excedido) e habilitando diagnóstico (ping e traceroute). Sua mensagem traz Tipo, Código e Checksum, e nos erros inclui parte do pacote original. No IPv6, o ICMPv6 vai além: sustenta NDP e SLAAC. Ele deve ser filtrado com critério — nem demais, nem de menos.

Voltar aos Tópicos