Curso de Redes – Como funciona o utilitário traceroute

Utilitário Traceroute

O utilitário traceroute, que foi escrito por Van Jacobson em 1987, é uma ferramenta de diagnóstico que nos permite ver a rota que datagramas IP seguem quando são enviados de um host a outro. O traceroute faz uso do protocolo ICMP e do campo TTL no cabeçalho IP do datagrama. O campo TTL (Time to Live) é um campo de 8 bits que o dispositivo de origem inicializa com um valor específico. O valor a ser usado neste campo varia entre os sistemas operacionais, sendo comuns os valores 128 para sistemas Windows e 64 para sistemas baseados em Unix, como o Linux (em pacotes normais; o traceroute utiliza valores totalmente diferentes).

Toda vez que um datagrama chega a um roteador, seu TTL é decrementado em um antes de ser encaminhado adiante. O propósito do TTL é evitar que datagramas entrem em um loop de roteamento, o que pode ocorrer devido a algum tipo de falha durante o roteamento dos pacotes. Quando um roteador recebe um datagrama cujo TTL é igual a 0 (zero), ele não o encaminhará mais. Em vez disso, o roteador irá descartar o pacote e enviar de volta ao host que o originou uma mensagem ICMP do tipo Tempo Excedido. Essa mensagem contém o endereço IP do roteador como endereço de origem – e esse é o segredo do traceroute.

Funcionamento do traceroute

O traceroute envia um datagrama com um TTL igual a 1 ao host de destino. Ao chegar ao primeiro rotador no caminho, o TTL é decrementado, ficando com o valor zero, de modo que o datagrama é descartado e a mensagem ICMP “Tempo Excedido” é enviada de volta à origem. Desta forma, o primeiro roteador no caminho é identificado. Então, o traceroute endia um novo datagrama, desta vez com o TTL igual a 2, que passará pelo primeiro roteador, que decrementa o TTL para 1, e então será descartado no segundo roteador –  e assim, descobrimos o endereço IP deste roteador também. Esse processo continua até que um datagrama chegue ao host de destino.

Porém, ao chegar no host de destino, mesmo que o TTL do datagrama seja igual a 1, ele não será descartado e, portanto, a mensagem ICMP Tempo Excedido não será gerada. Neste caso, como sabemos que o pacote chegou a seu destino? Isso vai depender do sistema operacional utilizado (mais precisamente, do utilitário presente); No Unix e derivados, o traceroute envia pacotes UDP, escolhendo portas de um valor elevado, que muito provavelmente não são utilizadas por nenhuma aplicação no host de destino. Desta forma, o host de destino irá gerar um erro ICMP do tipo “Porta Inalcançável” – e, então, tudo o que o traceroute tem a fazer é diferenciar o recebimento de mensagens Tempo Excedido da mensagem Porta Inalcançável para saber quando parar.

Já no Windows, são enviados datagramas ICMP do tipo Echo Request – o famoso ping – e quando o dispositivo de origem recebe uma resposta Echo Reply, ele sabe que o pacote chegou a seu destino.

Vejamos alguns exemplos

1. Comando tracert no prompt do Windows

tracert www.bosontreinamentos.com.br

Comando tracert no Windows

No Windows usamos a palavra “tracert” em vez de “traceroute” para executar o utilitário. São mostrados os endereços dos roteadores por onde os pacotes passaram até chegar ao destino especificado. A primeira coluna da saída mostrada contém o número do salto, e as três colunas seguintes mostram os RTTs (Round Trip Times) das mensagens enviadas – o traceroute envia três mensagens por padrão para cada salto. A última coluna mostra os endereços IP dos roteadores descobertos na rota. Veja a captura desses pacotes no Wireshark:

Tracert no Windows - Captura com Wireshark

Note que o primeiro pacote é enviado com TTL igual a 1, sendo uma mensagem ICMP do tipo Echo Request (ping), e seu conteúdo é uma sequência de zeros perfazendo 64 bytes de dados.

2. Comando traceroute no Linux

Como vou usar o Linux Ubuntu para fazer o teste, primeiramente preciso instalar o pacote do traceroute. Para isso, use o comando a seguir:

$ sudo apt-get install traceroute

Sintaxe do traceroute no Linux:

traceroute [opções] destino

Opções mais comuns:

-f TTL, –first=TTL
Definir o valor de TTL inicial da sondagem, em vez de 1.
-n
Exibir endereços numéricos em vez de nomes
-I, –icmp
Usar mensagens de eco ICMP para sondagem
-T, –tcp
Usar segmentos TCP SYN para sondagem
-m TTL_MAX, –max-hops=TTL_MAX
Especificar o número máximo de saltos (hops), ou o valor máximo do TTL que o traceroute irá sondar. O padrão são 30 saltos.
-V
Imprimir versão e sair
-w segundos
Definir o timeout (tempo de espera de uma resposta) para pacotes ICMP retornados em segundos, em vez do padrão, que são 5 segundos.
-q número
Definir o número de consultas por salto.

Rodarei o utilitário para descobrir a rota até o destino www.bosontreinamentos.com.br:

$ traceroute www.bosontreinamentos.com.br

Utilitário traceroute no Linux Ubuntu

Note que foram enviados pacotes com 60 bytes de tamanho, para no máximo 30 saltos (hops). Se usarmos endereçamento IPv6 os pacotes terão tamanho de 80 bytes. Perceba que os saltos de números 12 em diante mostram apenas o caractere * (asterisco), o que indica que não houve resposta naquele ponto em um período de 5 segundos (padrão). Isso pode ser ocasionado por problemas na rede, uso de firewalls que filtram portas UDP improváveis ou ainda respostas de eco ICMP.

3. Traceroute mostrando os endereços IP dos saltos em vez dos nomes (hostnames):

$ traceroute -n www.bosontreinamentos.com.br

Tracert no ubuntu linux numérico

 

4. Traceroute usando segmentos TCP SYN para efetuar a sondagem. Para este exemplo, precisarei usar o sudo, pois somente usuário root ou com privilégios administrativos pode executá-lo.

$ traceroute –tcp www.bosontreinamentos.com.br

Tracert no Ubuntu Linux com segmentos TCP

O processo foi bem mais rápido neste exemplo. Veja na figura a seguir a captura do processo no Wireshark, com um filtro de TCP aplicado. Note a flag SYN destacada:

Tracert - filtrando TCP SYN con Wireshark no Linux Ubuntu

Em resumo, usamos o utilitário traceroute (tracert no Windows) para descobrir a rota entre dois hosts em uma rede (local ou remota). Há diversas outras ferramentas que podem ser utilizadas para efetuar diagnóstico de redes, como o ping, pathping, MTR / WinMTR, entre muitas outras, que serão abordadas em nossos artigos aqui na Bóson Treinamentos.

Sobre Fábio dos Reis (1278 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*