O mensageiro da Internet: erros e diagnóstico da camada de rede — RFC 792
O Internet Control Message Protocol é o protocolo de controle e diagnóstico que acompanha o IP, reportando erros e testando a rede.
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.
Apesar de ser uma "ajuda" ao IP, as mensagens ICMP viajam dentro de datagramas IP — é o protocolo nº 1 no campo Protocolo do IPv4.
O ICMP é processado pela camada de rede, mas precisa do IP para chegar ao destino.
Toda mensagem começa com 3 campos fixos (Tipo, Código e Checksum). Cada linha = 32 bits:
Incluir o início do pacote original permite à origem saber qual conexão gerou o 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.
Servem a testes e diagnósticos em pares pergunta/resposta: o clássico Echo Request/Reply (ping).
| Tipo | Mensagem | Códigos / uso típico |
|---|---|---|
| 0 | Echo Reply | Resposta do ping. |
| 3 | Destination Unreachable | 0=rede, 1=host, 2=protocolo, 3=porta, 4=fragmentação necessária e DF (PMTUD). |
| 5 | Redirect | Indica uma rota melhor ao host. |
| 8 | Echo Request | Pergunta do ping. |
| 11 | Time Exceeded | 0=TTL chegou a 0 (traceroute); 1=tempo de remontagem esgotado. |
| 12 | Parameter Problem | Erro em um campo do cabeçalho IP. |
Os campos Identificador e Número de sequência casam cada resposta com seu pedido.
O traceroute explora a regra do TTL: envia pacotes com TTL crescente e usa as respostas Time Exceeded para mapear o caminho.
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.
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.
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).
No IPv6, o ICMPv6 (RFC 4443) é essencial e assume papéis que no IPv4 eram de outros protocolos:
| Mensagem | ICMP (v4) | ICMPv6 |
|---|---|---|
| Echo Request | 8 | 128 |
| Echo Reply | 0 | 129 |
| Dest. Unreachable | 3 | 1 |
| Pacote grande demais | 3/4 | 2 |
| Time Exceeded | 11 | 3 |
Excesso de Echo Requests (ping flood) ou o antigo Smurf (eco para broadcast com origem forjada) sobrecarregam o alvo — ataques de DoS.
O histórico Ping of Death usava pacotes ICMP fragmentados gigantes para travar sistemas vulneráveis.
Ping sweeps mapeiam hosts ativos; o ICMP tunneling esconde dados na carga para exfiltração furtiva.
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