O TTL (Time To Live) é um mecanismo de controle de tempo e vida presente no cabeçalho de cada datagrama IP (IPv4) ou campo “Hop Limit” (IPv6). Sua função primordial é atuar como um sistema de autodestruição para os pacotes, garantindo que eles não circulem indefinidamente pela rede.
A existência do TTL é uma resposta direta aos problemas de roteamento dinâmico. Em redes complexas, erros de configuração ou convergência lenta de protocolos de roteamento podem criar loops de roteamento, onde um pacote é passado de um roteador A para um B, e do B de volta para o A, incessantemente. Sem o TTL, esses pacotes “fantasmas” eventualmente consumiriam toda a largura de banda disponível e a memória dos roteadores, causando um colapso na rede.
1. O Campo no Cabeçalho
Tecnicamente, o TTL é um campo de 8 bits localizado no cabeçalho IP.
- Intervalo de Valores: Por ser um campo de 8 bits, seus valores variam de 0 a 255.
- Definição na Origem: O valor inicial do TTL é definido pelo sistema operacional do host de origem no momento da criação do datagrama.
- Sistemas como Windows tradicionalmente iniciam com 128.
- Sistemas como Linux/Unix tradicionalmente iniciam com 64.
2. Mecanismo de Decremento (Hop-by-Hop)
Embora o nome sugira “Tempo de Vida”, na prática, o TTL funciona como um contador de saltos (Hop Count). O processamento ocorre da seguinte maneira em cada roteador intermediário:
- O roteador recebe o datagrama e o processa.
- Antes de encaminhá-lo para a próxima interface, o roteador subtrai 1 do valor atual do campo TTL.
- O roteador recalcula o Header Checksum (soma de verificação do cabeçalho), pois o valor do TTL mudou.
3. Condição de Expiração e Descarte
O comportamento do roteador depende do resultado do decremento:
- Se TTL > 0: O roteador encaminha o datagrama normalmente para o próximo salto, conforme sua tabela de roteamento.
- Se TTL = 0: O datagrama atingiu o fim de sua vida útil. O roteador deve descartar imediatamente o pacote. Ele não é entregue ao destino e nem encaminhado para qualquer outro lugar.
4. Notificação de Erro (ICMP Time Exceeded)
O descarte silencioso de pacotes tornaria o diagnóstico de problemas de rede (como loops) extremamente difícil. Para mitigar isso, o protocolo IP define um procedimento de notificação:
- Quando um roteador descarta um datagrama porque o TTL chegou a zero, ele gera e envia uma mensagem de erro de volta ao endereço IP de origem do datagrama.
- Esta mensagem é um pacote ICMP (Internet Control Message Protocol) do Tipo 11 (Time Exceeded) e Código 0 (Time to Live exceeded in transit).
- A mensagem ICMP contém o cabeçalho IP e os primeiros 8 bytes do payload do datagrama descartado, permitindo que o host de origem identifique qual fluxo de dados falhou.
5. Aplicação Prática: O traceroute
O mecanismo de TTL é o princípio fundamental por trás da ferramenta de diagnóstico traceroute (ou tracert no Windows). Esta ferramenta mapeia o caminho que os pacotes tomam através da rede manipulando deliberadamente o TTL:
- 1º Pacote: A origem envia um datagrama com TTL = 1. O primeiro roteador decrementa para 0, descarta e envia o ICMP “Time Exceeded”. A origem aprende o IP do 1º salto.
- 2º Pacote: A origem envia com TTL = 2. O primeiro roteador passa (TTL vira 1), o segundo decrementa para 0, descarta e envia o ICMP. A origem aprende o IP do 2º salto.
- Iteração: O processo se repete com TTL incrementando (3, 4, 5…) até que o pacote alcance o host final, que responde com uma mensagem diferente (ICMP Port Unreachable ou Echo Reply).
6. Discrepância entre Nome e Função
Historicamente, no RFC 791, o TTL foi definido como o tempo em segundos que o datagrama seria permitido na rede. Se um roteador demorasse mais de 1 segundo para processar o pacote, ele deveria decrementar o TTL em mais de 1.
No entanto, na prática moderna, quase todos os roteadores processam pacotes em frações de segundo. Por convenção universal, todos os roteadores decrementam o TTL em exatamente 1, independentemente do tempo de processamento. Portanto, embora o nome permaneça “Time To Live” no IPv4, ele funciona estritamente como um limite de saltos.
No IPv6, esse campo foi renomeado para Hop Limit, corrigindo a discrepância terminológica para refletir com precisão seu comportamento real.