Traceroute é uma ferramenta que permite descobrir o caminho feito pelos pacotes desde a sua origem até o seu destino. Ele é usado para testes, medidas e gerenciamento da rede.
O traceroute pode ser utilizado para detectar falhas como, por exemplo, gateways intermediários que descartam pacotes ou rotas que excedem a capacidade de um datagrama IP. Com esta ferramenta, o atraso da “viagem” do pacote entre a origem e gateways intermediários são reportados, permitindo determinar a contribuição de cada gateway para o atraso total da “viagem” do pacote desde a origem até o seu destino.
Versões melhoradas do traceroute permitem a especificação de “rotas livres da origem” para os datagramas. Isto permite investigar qual o caminho de retorno que as máquinas remotas fazem até o host local.
MECANISMO
O comando traceroute envia pacotes de pesquisa UDP (UDP probe packets) com um pequeno “time-to-live” máximo (variável Max_ttl), e então, espera por pacotes de resposta “ICMP TIME_EXCEEDED” dos gateways que estão no caminho. Os pacotes UDP começam com um valor Max_ttl de 1 hop, que é incrementado de 1 hop a cada vez, até que uma mensagem “ICMP PORT_UNREACHABLE” é retornada. Esta mensagem indica que o host destino foi localizado ou que o comando traceroute atingiu o valor máximo de hops permitido para o “trace”.
O traceroute envia três “probes” a cada Max_ttl indicando:
O valor Max_ttl
O endereço do gateway
O tempo de ida e volta (round trip) de cada “probe” bem sucedido.
Se as respostas ao “probe” vêm de gateways diferentes, o traceroute imprime o endereço IP de cada um deles. Se não houver resposta ao “probe” dentro de um intervalo de “time-out” de três segundos, um *(asterisco) é impresso.
Um ponto de exclamação ! é impresso depois do tempo de ida e volta (round trip time) do pacote se o valor Max_ttl é um hop ou menos. Um “time-to-live” máximo de um hop ou menos normalmente indica uma incompatibilidade na forma como as respostas ICMP são tratadas pelos diferentes softwares da rede. A incompatibilidade pode, normalmente, ser solucionada duplicando o valor do último Max_ttl usado e tentando novamente.
Outras anotações possíveis depois da indicação do tempo (round trip) são:
!H Host inacessível
!N Rede inacessível
!P Protocolo inacessível
!S Falha na rota de origem
!F Necessidade de fragmentação
Se a maioria das pesquisas (probes) resultam em um erro, o comando traceroute encerra a execução.
SINTAXE
traceroute [-m Max_ttl] [-n] [-p Port] [-q Nqueries] [-r] [-s SRC_Addr] [-t TypeOfService] [-v] [-w WaitTime] Host [PacketSize]
O único parâmetro obrigatório para o comando traceroute é o nome ou o número IP do host destino. O tamanho do pacote UDP (UDP probe packet) é de 38 bytes, mas pode ser aumentado especificando o tamanho do pacote (em bytes) após o nome ou número IP do destino.
OPÇÕES
-m Max_ttl Especifica um “time-to-live” máximo (número máximo de hops) usado nos pacotes de pesquisa UDP. O default é 30 hops (o mesmo dafault utilizado para conexões TCP).
-n Mostra o endereço IP de cada gateway encontrado no caminho (da origem ao destino).
-p Port Especifica o número base da porta UDP utilizada na pesquisa do traceroute. O default é 33434. O comando traceroute depende de um intervalo de portas UDP abertas de “base a base + número de hops – 1” no host destino. Se uma porta UDP não está disponível, esta opção pode ser usada para pegar um intervalo de portas não utilizadas.
-q Nqueries Especifica o número de pacotes UDP (UDP probes) que o comando traceroute envia a cada Max_ttl. O default é três pacotes.
-r Desvia das tabelas de roteamento e envia os pacotes de pesquisa diretamente a um host. Se este host não está na rede, um erro é retornado. Esta opção pode ser usada para “dar” um comando ping em um host local através de uma interface que não está registrada nas tabelas de roteamento.
-s SRC_Addr Usa o endereço especificado (SRC_Addr) como o endereço de origem dos pacotes UDP enviados. Em hosts com mais de um endereço IP, a opção “-s” pode ser usada para forçar o endereço de origem a ser uma interface específica e não, necessariamente, aquela de onde o pacote foi enviado. Se o endereço IP especificado não for válido, um erro é retornado e nada é enviado.
-t TypeOfService Atribui um valor entre 0 e 255 para a variável TypeOfService do pacote de pesquisa UDP. O default é 0 (zero). Esta opção pode ser utilizada para descobrir se diferentes tipos de serviços resultam em diferentes caminhos.
-v Recebe pacotes diferentes de TIME-EXCEEDED e PORT-UNREACHABLE.
-w WaitTime Especifica o tempo (em segundos) a esperar pela resposta a um pacote de pesquisa UDP. O default é 3 segundos.
Host Especifica o host destino, pelo nome ou pelo seu número IP. Este parâmetro é obrigatório.
PacketSize Especifica o tamanho (em bytes) do pacote UDP de pesquisa (probe). O default é 38 bytes.
“CAVEATS”
Algumas implementações IP enviam para outro endereço pacotes com o “ttl” (time-to-live) igual a 0 (zero), escapando, desta forma, da identificação.
Outras usam o campo “ttl” do pacote que chega, como o “ttl” do pacote de resposta ICMP, o que atrasa a identificação. Enviar datagramas com a opção de “rota da origem” pode causar “crash” em alguns gateways. Não é recomendável enviar pacotes com esta opção.
LIMITAÇÕES
A maioria das versões do UNIX têm erros no código IP bruto, que requer funções do “kernel” para executar a versão padrão do traceroute. Existe uma versão do traceroute que “roda” sem as funções do “kernel” sob SunOS 3.5, mas ela só opera em interface ethernet.
Saída (Output)
Exemplo 1. [yak 71]% traceroute nis.nsf.net. traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 56 byte packet 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms 8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms 11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms Linhas 2 e 3 sao as mesmas devido a um erro no "Kernel" no segundo hop (lbl-csma.arpa) que envia para outro endere‡o pacotes com um ttl (time- to-live) igual a zero. Os nomes dos host nao sao impressos nas linhas 6 a 10 porque a NFSNet (National Science Foundation Network, 129.140) nao prove traducoes de enderecos-para-nomes para os seus nos. Exemplo 2. [yak 72]% traceroute rip.Berkeley.EDU (128.32.131.22) traceroute to rip.Berkeley.EDU (128.32.131.22), 30 hops max 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms 6 csgw/Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms 7 * * * 8 * * * 9 * * * 10 * * * 11 * * * 12 * * * 13 rip.Berkeley.EDU (128.32.131.22) 59 ms! 39 ms! 39 ms! Neste exemplo, exatamente a metade dos doze gateways (13 contando com o destino final) estao "faltando". No entanto, estes "hops" nao eram exatamente gateways. O host destino, uma Sun-3 executando Sun OS3.5, usou o ttl dos pacotes que chegavam como o ttl dos pacotes ICMP de resposta; por isso, a resposta gerou um timeout no retorno. Como nao sao enviadas mensagens ICMP para pacotes ICMP, nenhuma notificacao foi recebida. O ! (ponto de exclamacao) depois da indicacao do tempo de ida e volta do pacote (round trip) indica algum tipo de problema de incompatibilidade de software. (A causa foi diagnosticada depois do comando traceroute ser executado e identificar um pacote de pesquisa (probe) com o dobro do caminho. O destino estava a apenas sete hops).