Ping e TTL

Todos conhecem ping e sabem como usá-lo para testar conectividade entre computadores e outros dispositivos que usam IP. Mas qual a função do parâmetro TTL que o comando ping mostra?

TTL é um acrônimo para “Time to Live”. Numa rede IP, ele é usado para evitar que um pacote de dados (tecnicamente, um datagrama) vague indefinidamente de um ponto a outro na rede, caso ocorra algum problema de rotas. O computador que envia o datagrama define um valor inicial de TTL (para Linux, é 64); cada roteador que encaminha o datagrama subtrai 1 (TTL-1) antes de transmiti-lo. Quando TTL chegar a zero, o datagrama é descartado.

Deparei recentemente com um mistério, ao ativar um novo firewall Linux corporativo. Conexões TCP com Internet estavam “congelando” a cada 2 a 3 minutos, e voltava a funcionar depois de 30 a 40 segundos – aparente indicação clara de perda de datagramas. Isto, obviamente, inutilizava o firewall na prática. Mas o teste com ping, de um outro ponto da Internet ao novo firewall, não indicava nenhuma queda ou perda de dados. Depois de muitas verificações com o provedor (trocar cabos, trocar porta do roteador/switch, setar velocidade mais baixa para interface de rede, ser questionado se o firewall Linux estava corretamente configurado – rsrs), reparei em algo extremamente incomum:

64 bytes from aaa.bbb.ccc.12: icmp_req=237 ttl=52 time=26.6 ms
64 bytes from aaa.bbb.ccc.12: icmp_req=238 ttl=52 time=33.6 ms
64 bytes from aaa.bbb.ccc.12: icmp_req=239 ttl=41 time=27.6 ms
64 bytes from aaa.bbb.ccc.12: icmp_req=240 ttl=41 time=33.5 ms

Coincidentemente, nos instantes de mudança de valor TTL, as conexões TCP do novo firewall congelavam. Ou seja, o endereço IP designado pelo provedor ao novo firewall estava em uso por algum outro dispositivo obscuro na rede! Mistério resolvido (descobriu-se depois que o IP em questão estava em uso por um dispositivo esquecido numa VLAN da rede interna…).

Conclusão: o ping, mesmo sendo uma ferramenta básica de debug, fornece informações de grande valia quando interpretadas da forma correta.