07 - Type 11 - Tempo Excedido (TTL=0)
video: https://youtu.be/... no frontmatter da nota.ICMP Type 11 - Tempo Excedido (TTL=0)
A mensagem ICMP Type 11 (Time Exceeded) é um sinal de erro crítico gerado por um roteador (ou o host de destino) para notificar a origem de que um datagrama IP foi descartado porque seu tempo de vida expirou.
Este mecanismo é a implementação do sistema de "autodestruição" de pacotes da internet. Ele é fundamental para manter a saúde da rede, impedindo que pacotes corrompidos ou mal roteados circulem eternamente, consumindo largura de banda e recursos de processamento. O valor no campo Code define especificamente como o tempo foi excedido, sendo o Code 0 (TTL Exceeded during Transit) o mais comum e o foco deste tópico.
1. Contexto Técnico e RFCs
| Atributo | Valor |
|---|---|
| RFC | RFC 792 (1981) |
| Type ICMP | 11 |
| Codes possíveis | 0 (TTL em trânsito), 1 (Reassembly timeout) |
| Resposta esperada | Nenhuma (origem apenas descobre o erro) |
| Tipo | Mensagem de erro (não-query) |
2. O Mecanismo do TTL e o Disparo da Mensagem
Para entender o Type 11, é necessário recapitular o funcionamento do campo TTL (Time to Live) no cabeçalho IP (RFC 791):
- Origem: O host de origem define um valor inicial para o TTL. Valores típicos: 64 (Linux/macOS), 128 (Windows), 255 (roteadores Cisco).
- Trânsito: Cada vez que um datagrama passa por um roteador (um "hop"), o roteador decrementa o valor do TTL em 1.
- Verificação: O roteador verifica o novo valor antes de encaminhar o pacote.
- Se TTL > 0: O roteador encaminha o pacote para o próximo salto.
- Se TTL = 0: O roteador não pode encaminhar o pacote. Ele é obrigado a descartá-lo.
Ocorrendo o descarte por TTL = 0, o roteador gera e envia uma mensagem ICMP Type 11 de volta ao endereço IP de origem.
No IPv6: Hop Limit
No IPv6, o campo equivalente chama-se Hop Limit (8 bits) e funciona de forma idêntica. Quando atinge 0, o roteador envia um ICMPv6 Type 3, Code 0 (Hop Limit Exceeded in Transit, RFC 4443).
3. Códigos de Mensagem (Dentro do Type 11)
O campo Type define que é um erro de tempo excedido, mas o campo Code especifica a causa exata. Existem dois códigos relevantes:
| Code | Nome | Cenário |
|---|---|---|
| 0 | Time to Live Exceeded in Transit | TTL zerou em roteador intermediário (mais comum) |
| 1 | Fragment Reassembly Time Exceeded | Timeout na remontagem de fragmentos no host destino |
- Code 0 - Time to Live Exceeded in Transit: Significa que o contador de saltos chegou a zero em um roteador intermediário. O pacote não chegou ao destino final; ele "morreu" no caminho.
- Code 1 - Fragment Reassembly Time Exceeded: Ocorre no host de destino. Se um datagrama IP for fragmentado em vários pedaços, e o receptor receber o primeiro fragmento mas os outros não chegarem dentro de um tempo limite (geralmente 60 segundos, definido por
IPTTLem SOs), ele descarta os fragmentos que tem e envia um ICMP Type 11, Code 1 para a origem. Este código é raro na prática moderna devido ao PMTUD e à fragmentação apenas na origem no IPv6.
4. Função Primária: Prevenção de Loops de Roteamento
A razão de existência do Type 11 Code 0 é combater Loops de Roteamento.
- O Problema: Em redes complexas, erros de configuração ou convergência lenta de protocolos de roteamento dinâmico (OSPF, BGP, IS-IS) podem fazer com que dois roteadores apontem um para o outro como o melhor caminho para um destino. Um pacote entraria nesse ciclo infinito (Roteador A envia para Roteador B, B envia de volta para A).
- A Solução: Como o TTL é decrementado a cada passagem, eventualmente ele chegará a zero.
- O Resultado: O roteador detecta o loop (implícito pelo TTL zerado), mata o pacote e notifica a origem via ICMP Type 11. Isso impede que a internet fique congestionada com "pacotes zumbis" dando voltas eternamente.
Cenário de Loop Clássico
Roteador A → Roteador B → Roteador A → Roteador B → ... (loop infinito)
Sem TTL: cada pacote consumiria banda infinitamente.
Com TTL: após N hops (TTL inicial), pacote é descartado + ICMP Type 11 enviado à origem.
5. Função Secundária e Prática: O Traceroute
A mensagem ICMP Type 11 é o componente chave que permite o funcionamento da ferramenta de diagnóstico traceroute (ou tracert no Windows). O traceroute explora deliberadamente o mecanismo de TTL para mapear o caminho da rede.
Funcionamento Passo a Passo
- TTL = 1: A ferramenta envia um pacote (geralmente UDP porta 33434+ no Linux/macOS, ou ICMP Echo no Windows) com TTL = 1. O primeiro roteador decrementa para 0, descarta o pacote e envia um ICMP Type 11 de volta. O remetente aprende o IP do 1º salto e o RTT até ele.
- TTL = 2: A ferramenta envia um pacote com TTL = 2. O primeiro roteador decrementa para 1 e passa adiante. O segundo roteador decrementa para 0, descarta e envia o ICMP Type 11. O remetente aprende o IP do 2º salto.
- Iteração: O processo se repete incrementando o TTL até atingir o destino ou o limite máximo (geralmente 30 hops).
- Sucesso: Quando o pacote finalmente chega ao destino, o host não envia um "Time Exceeded", mas sim uma resposta específica:
- Se foi enviado UDP: o host responde com ICMP Type 3, Code 3 (Destination Port Unreachable), pois a porta UDP usada não tem serviço escutando.
- Se foi enviado ICMP Echo (Windows): o host responde com ICMP Type 0 (Echo Reply).
- Isso sinaliza o fim da rota.
Sem o ICMP Type 11, seria impossível mapear visualmente a rota que os pacotes tomam através da internet.
Exemplo Prático
$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 192.168.1.1 0.451 ms 0.421 ms 0.401 ms
2 100.64.0.1 8.123 ms 7.981 ms 8.012 ms
3 10.0.0.1 15.234 ms 15.121 ms 15.001 ms
4 * * * ← Roteador silencioso (firewall dropou ICMP Type 11)
5 8.8.8.8 22.001 ms 21.987 ms 22.012 ms
Cada linha representa um salto, e os três valores de tempo correspondem a três sondagens independentes para aquele hop.
6. Estrutura da Mensagem ICMP Type 11
Quando o roteador gera esta mensagem, ela contém informações vitais para a origem entender o erro:
| Offset | Campo | Tamanho | Conteúdo |
|---|---|---|---|
| 0 | Type | 8 bits | Valor 11 |
| 1 | Code | 8 bits | 0 ou 1 |
| 2-3 | Checksum | 16 bits | Soma de verificação ICMP |
| 4-7 | Unused | 32 bits | Zerados |
| 8+ | Internet Header + 64 bits of Original Data | Variável | Cabeçalho IP completo + 8 bytes de payload do pacote original |
A inclusão do cabeçalho IP original + 64 bits de payload permite que o host de origem identifique exatamente qual processo ou conexão (baseado nas portas TCP/UDP dentro desses 64 bits) gerou o pacote que morreu, permitindo que o sistema operacional notifique a aplicação correta sobre o erro.
Importância dos 64 Bits de Payload
Os 64 bits (8 bytes) iniciais do payload do pacote original contêm, em TCP/UDP:
- Porta de origem (16 bits)
- Porta de destino (16 bits)
- Parte do Sequence Number (TCP) ou Length (UDP)
Isso é suficiente para o SO da origem correlacionar o pacote morto com uma conexão ativa e notificar a aplicação dona da conexão.
7. Causas Comuns de Recebimento de Type 11
| Causa | Sintoma | Diagnóstico |
|---|---|---|
| Loop de roteamento | TTL pequeno mesmo para destinos próximos | Verificar tabelas de roteamento dos roteadores |
| Rota muito longa | Apenas destinos distantes falham | Verificar traceroute para identificar hop limite |
| TTL inicial muito baixo | Pacotes grandes falham mas pequenos passam | Aumentar TTL na origem (sysctl net.ipv4.ip_default_ttl) |
| Atividade de traceroute | Spike periódico de Type 11 em monitoramento | Normal, ignorar como erro |
| Ataque DoS (TTL exhaustion) | Milhares de Type 11/segundo | Mitigação via rate limiting ICMP |
8. Segurança e Mitigações
Embora o Type 11 seja essencial para diagnóstico, ele também é explorado em ataques:
- Network Reconnaissance: Atacantes usam variações de traceroute para mapear topologia interna de redes corporativas (descobrir IPs de roteadores internos).
- Amplification (histórico): Em redes mal configuradas, roteadores enviavam Type 11 para endereços forjados, permitindo amplificação. Mitigado por RFC 1812 (roteadores validam origem antes de gerar ICMP).
- Covert Channel: Type 11 pode ser usado para exfiltrar dados encapsulando informação no cabeçalho IP original retornado (técnica de tunneling ICMP).
Mitigações Comuns em Firewalls
# Linux iptables: rate limitar ICMP Type 11 (evitar DoS)
iptables -A INPUT -p icmp --icmp-type time-exceeded \
-m limit --limit 5/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j DROP
# Bloquear Type 11 externo (apenas interno diagnóstico)
iptables -A INPUT -p icmp --icmp-type time-exceeded -i eth0 -j DROP
9. Conclusão
A mensagem ICMP Type 11 (Time Exceeded) é um mecanismo de proteção essencial que impede loops infinitos na Internet, além de ser a base funcional da ferramenta traceroute, indispensável para diagnóstico de rotas. Embora a maioria dos usuários finais nunca veja essa mensagem explicitamente (é processada internamente pelo SO), ela é parte do "sistema imunológico" da Internet que mantém a rede saudável. Para engenheiros de redes, entender Type 11 e sua relação com TTL/Hop Limit é fundamental para diagnosticar desde loops de roteamento sutis até problemas de fragmentação, além de interpretar corretamente saídas de traceroute que identificam firewalls invisíveis (hops marcados com * * * indicam roteadores que silenciosamente dropam Type 11).