O comando traceroute no Linux é uma ferramenta valiosa para diagnosticar problemas de rede e identificar gargalos na comunicação. Vamos explorar como usá-lo para rastrear a jornada de um pacote de dados.
Entendendo o Funcionamento do Traceroute
Para interpretar os resultados do traceroute com precisão, é crucial entender como ele opera. Quanto mais complexa a trajetória que um pacote de rede precisa percorrer, mais difícil se torna a identificação de pontos de lentidão.
Em uma rede local (LAN) de pequena escala, a estrutura é geralmente simples, com um ou dois roteadores e um servidor. No entanto, em uma rede de longa distância (WAN), a complexidade aumenta, especialmente quando a comunicação ocorre através de diferentes locais ou via Internet. Nesses casos, o pacote de dados passa por uma variedade de equipamentos, incluindo roteadores e gateways.
Cada pacote de dados possui um cabeçalho com metadados que detalham seu tamanho, origem, destino e o protocolo utilizado. A especificação do protocolo define a estrutura desse cabeçalho, permitindo identificar o início e o fim de cada campo e, assim, ler os metadados.
O traceroute se baseia no conjunto de protocolos TCP/IP e envia pacotes do Protocolo de Datagrama do Usuário (UDP). O cabeçalho inclui o campo Tempo de Vida (TTL), que contém um valor inteiro de oito bits. Este valor representa uma contagem de saltos, não uma duração de tempo.
Quando um pacote passa por um roteador, o contador TTL é diminuído. Se o valor TTL chega a um, o roteador que recebe o pacote o reduz para zero e descarta o pacote, evitando que ele avance para o próximo nó da rede, pois ele “expirou”.
O roteador envia uma mensagem de Protocolo de Controle de Mensagem da Internet (ICMP) do tipo Tempo Excedido de volta para a origem do pacote, notificando que ele expirou. Essa mensagem inclui o cabeçalho original e os primeiros 64 bits dos dados do pacote original, conforme especificado no RFC 792.
Portanto, se o traceroute enviar um pacote com TTL definido como um, ele chegará apenas ao primeiro roteador antes de ser descartado. O traceroute receberá uma mensagem ICMP de tempo excedido e registrará o tempo gasto nessa viagem de ida e volta.
O processo é repetido com TTL igual a dois, depois três, e assim por diante, até que o destino seja alcançado ou o limite máximo de saltos (30, por padrão) seja atingido.
Comportamentos Anômalos de Roteadores
Alguns roteadores apresentam falhas, tentando encaminhar pacotes com TTL zero em vez de descartá-los e enviar uma mensagem ICMP de tempo excedido.
Segundo a Cisco, alguns provedores de internet (ISPs) limitam a taxa de envio de mensagens ICMP por seus roteadores.
Outros dispositivos são configurados para nunca enviar pacotes ICMP, geralmente para evitar participar involuntariamente de ataques de negação de serviço distribuída, como um ataque smurf.
O traceroute tem um tempo limite padrão de cinco segundos para respostas. Se uma resposta não for recebida dentro desse prazo, a tentativa é abandonada, ignorando as respostas de roteadores muito lentos.
Instalação do Traceroute
O traceroute já está instalado no Fedora 31, mas precisa ser instalado no Manjaro 18.1 e no Ubuntu 18.04. Para instalar o traceroute no Manjaro, utilize o seguinte comando:
sudo pacman -Sy traceroute
Para instalar no Ubuntu, use:
sudo apt-get install traceroute
Utilizando o Traceroute
O traceroute busca obter respostas de roteadores em cada etapa do caminho até o destino. Alguns roteadores podem não responder, enquanto outros fornecerão informações detalhadas.
Vamos executar um traceroute para o site do Castelo de Blarney na Irlanda, que abriga a famosa Pedra de Blarney. A lenda diz que beijar a pedra confere o “dom da palavra”.
Digitamos o seguinte comando:
traceroute www.blarneycastle.ie
A primeira linha fornece:
- O destino e seu endereço IP.
- O número máximo de saltos que o traceroute tentará.
- O tamanho dos pacotes UDP enviados.
Cada linha subsequente detalha um dos saltos. Vemos que existem 11 saltos entre nosso computador e o site do Castelo de Blarney, com o salto 11 representando o destino final.
O formato de cada linha de salto é:
- O nome do dispositivo (se disponível) ou o endereço IP.
- O endereço IP.
- O tempo de ida e volta para cada um dos três testes. Um asterisco indica a falta de resposta para um teste. Se o dispositivo não responder, três asteriscos aparecerão sem nome de dispositivo ou endereço IP.
Analisando os resultados:
- Salto 1: O roteador DrayTek Vigor da rede local, o primeiro ponto de saída da nossa rede.
- Salto 2: Este dispositivo não respondeu, possivelmente configurado para não enviar ICMP ou com tempo limite expirado.
- Salto 3: Um dispositivo respondeu com o endereço IP, mas sem nome. Há um asterisco indicando perda de pacote.
- Saltos 4 e 5: Mais saltos anônimos.
- Salto 6: Um salto com informações detalhadas, mostrando que três dispositivos diferentes manipularam nossas solicitações UDP. Isso ocorre em redes com grande volume de tráfego.
- Salto 7: A saída da rede do ISP.
- Salto 8: Um endereço IP sem nome. Todos os testes foram bem-sucedidos.
- Saltos 9 e 10: Mais saltos anônimos.
- Salto 11: O destino final, o site do Castelo de Blarney, localizado em Londres, segundo dados de geolocalização de endereço IP.
Obtivemos respostas variadas, com alguns dispositivos respondendo com nomes, outros apenas com IPs e outros permanecendo anônimos.
Concluímos que o destino está a 11 saltos e o tempo de ida e volta foi de 13,773 e 14,715 milissegundos.
Ocultando Nomes de Dispositivos
Para simplificar a visualização dos resultados, a opção -n (sem mapeamento) pode ser usada para ocultar os nomes dos dispositivos.
Exemplo:
traceroute -n blarneycastle.ie
Com esta opção, os resultados ficam mais claros, facilitando a identificação de possíveis gargalos.
O salto 3 parece ser problemático, respondendo apenas uma vez nesta execução, o que pode indicar problemas na rede. Em uma rede corporativa, isso mereceria uma investigação mais profunda.
Configurando o Tempo Limite do Traceroute
Aumentar o tempo limite padrão de cinco segundos pode gerar mais respostas. Usamos a opção -w (tempo de espera) para ajustá-lo para sete segundos:
traceroute -w 7.0 blarneycastle.ie
O aumento do tempo limite não fez grande diferença, indicando que as respostas estão realmente expirando ou sendo ocultadas.
Definindo o Número de Testes
O traceroute envia três pacotes UDP por salto. Podemos usar a opção -q (número de consultas) para alterar esse número. Para acelerar o teste, podemos reduzir o número de pacotes enviados para um:
traceroute -q 1 blarneycastle.ie
Dessa forma, apenas uma sonda é enviada por salto.
Definindo o Valor Inicial do TTL
Podemos alterar o valor inicial do TTL para um valor diferente de um e pular alguns saltos. Se definirmos o valor inicial para cinco, o primeiro teste tentará obter o salto cinco, pulando os saltos de um a quatro.
Sabendo que o site do Castelo de Blarney está a 11 saltos, podemos usar o comando:
traceroute -f 11 blarneycastle.ie
Isso fornece um relatório conciso do estado da conexão com o destino.
Considerações Finais
O traceroute é uma ferramenta poderosa para investigar o roteamento de redes, verificar a velocidade de conexão e identificar gargalos. O Windows também possui o comando tracert com funcionalidade semelhante.
Evite sobrecarregar dispositivos desconhecidos com muitos pacotes UDP. Utilize o traceroute com moderação, especialmente em scripts ou trabalhos automatizados.
O uso excessivo do traceroute pode afetar o desempenho da rede, sendo aconselhável usá-lo fora do horário de pico, a menos que a situação exija uma correção imediata.