Traceroute

De Wiki BPF
Ir para navegação Ir para pesquisar

O traceroute é uma das mais famosas ferramentas para pesquisa de falhas em redes IP. Praticamente todo sistema operacional já vem com ele embarcado de alguma forma e além disso existem dezenas de sites na Internet que você pode utilizar para realizar um "trace" para algum destino, inclusive de formal visual.

É uma ferramenta simples, mas, contudo, veja bem, poucas pessoas sabem realmente como usar e interpretar o resultado de um comando de traceroute. Nesse artigo tentaremos detalhar como ele funciona e esclarecer como interpretar corretamente o resultado.

Autor: Tiago Setti

Como funciona

Basicamente você digita um endereço IP de destino e é mostrado uma lista de nós "hops" desde o primeiro roteador até o último no destino, e de vez em quando aparecem alguns asteriscos *

$ traceroute google.com
traceroute to google.com (74.125.236.132), 30 hops max, 60 byte packets
1 220.224.141.129 (220.224.141.129) 89.174 ms 89.094 ms 89.054 ms
2 115.255.239.65 (115.255.239.65) 109.037 ms 108.994 ms 108.963 ms
3 124.124.251.245 (124.124.251.245) 108.937 ms 121.322 ms 121.300 ms
4 * 115.255.239.45 (115.255.239.45) 113.754 ms 113.692 ms
5 72.14.212.118 (72.14.212.118) 123.585 ms 123.558 ms 123.527 ms
6 72.14.232.202 (72.14.232.202) 123.499 ms 123.475 ms 143.523 ms
7 216.239.48.179 (216.239.48.179) 143.503 ms 95.106 ms 95.026 ms
8 bom03s02-in-f4.1e100.net (74.125.236.132) 94.980 ms * 104.954 ms

Por trás desse resultado existe uma explicação técnica importante, de como a ferramenta traceroute utilizada de envio de dezenas de pacotes ICMP ou UDP para montar descobrir esse caminho do pacote.

Atenção: O comando de traceroute descobre o caminho unidirecional, ou seja, somente no sentido do host → para o → destino. 

TTL

Para entender o funcionamento do traceroute é importante antes entender o conceito de TTL (Time To Live).

"TTL é um acrónimo do inglês Time to Live, que significa o número de saltos entre máquinas que os pacotes podem demorar numa rede de computadores antes de serem descartados (máximo de 255).

Qualquer router está programado para descontar uma unidade do TTL aos pacotes que o atravessam. Esta é uma forma de evitar que os pacotes permaneçam na rede por tempo infinito, caso o routing não esteja a ser feito devidamente, como no caso de looping." [ref: https://pt.wikipedia.org/wiki/Time_to_Live]

Detalhamento o passo a passo

Basicamente o funcionamento do traceroute pode ser explicado assim:

  1. Um pacote ICMP ou UDP é enviado ao IP de destino com o cabeçalho contendo TTL = 1
  2. Todos os roteadores do caminho decrementam o TTL do pacote em 1
  3. Quando o pacote IP alcança o TTL = 0 , o pacote é descartado pelo roteador e uma mensagem de ICMP TTL Exceeded é enviada com destino a origem
  4. A origem recebendo esse pacote, está formada a primeira linha do resultado do comando traceroute mostrando o primeiro nó "hop"
  5. Repita a operação 1. com um TTL = 2 , e vai incrementando o TTL até que...
  6. O pacote alcançando o destino, é gerado um ICMP Unreachable (para traceroute com UDP) ou ICMP Echo Reply (para traceroute com ICMP) com destino a origem e o comando é concluído.

Traceroute.png



Diferenças do traceroute no Windows e no UNIX

As implementações mais comuns do comando utilizam pacotes UDP (UNIX) ou ICMP (Windows) para realizar um traceroute. Eventualmente é possível encontrar ferramentas que utilizam o TCP, mas são utilizadas para casos específicos.

UDP

Traceroute no UNIX usando UDP

ICMP

Traceroute no Windows usando ICMP

Detalhamento de implementação

A maioria das implementações do traceroute utiliza esses recursos:

  • Ao enviar o pacote para o destino, são enviados 3 cópias iguais do mesmo pacote
    • Por isso o resultado de latência em cada nó "hop" aparece três vezes, ou são visualizados três asteriscos * quando não há resposta
  • Cada pacote enviado tem um identificado único, assim a origem sabe exatamente qual referência baseado no pacote que voltou
    • Nas soluções com UDP é utilizado uma porta Camada 4 diferente para cada nó
    • Nas soluções ICMP é utilizado o campo SEQ (Sequence Number)
  • Equipamentos de rede no caminho que implementam balanceamento ECMP podem enviar os diferentes pacotes do traceroute por caminhos alternativos.
    • Balanceamento de camada 2 (ex.: LACP) não são visualizados pela origem
    • Balanceamento de camada 3 (ECMP) são visualizados pela origem, pois cada um dos pacotes recebe uma resposta ICMP TTL Exceeded diferente

Entendendo a latência

A ferramenta de traceroute consegue medir a latência de ida-e-volta "roundtrip" de cada pacote enviado. Registrando o tempo exato que o pacote saiu e calculando a diferença do tempo que o pacote retornou é possível deduzir a latência de cada interface que o pacote de traceroute atravessar.

Atenção para a palavra "roundtrip", ou seja, a latência medida é sempre do caminho de ida + volta, e como o traceroute não tem visibilidade sobre o caminho de volta, qualquer atraso grande nesse caminho vai afetar o resultado mensurado.

Entendendo as interfaces dos roteadores no caminho "hops"

A ferramenta de traceroute envia pacotes que são recebidos pelos diversos roteadores no caminho do pacote, e a lógica para entender o IP de cada nó "hop" é essa:

  • O pacote de traceroute com TTL=1 entra pela interface de entrada do roteador
  • O roteador decrementa o TTL para 0, descarta o pacote e gera um ICMP Time Exceeded de retorno
  • Esse pacote ICMP Time Exceeded tem como IP de destino o endereço do host que gerou o traceroute
  • E mais importante, esse pacote ICMP tem como IP de origem o endereço da interface de entrada do roteador
  • A ferramenta irá representar cada nó "hop" pelo endereço de origem do pacote ICMP Time Exceeded recebido
Nesse exemplo de traceroute o resultado vai mostrar:
hop 1: 192.0.2.100 * * *
hop 2: 203.0.113.200 * * *

Esse comportamento de enviar o IP com origem o endereço da interface de entrada é o mais comum, mas eventualmente pode-se encontrar roteadores que enviam como IP de origem o endereço da Loopback ou pior, o endereço da interface de saída. Confundido o resultado do traceroute.

Interpretando o DNS reverso

A maioria das implementações do traceroute mostra o endereço IP do nó e também o DNS Reverso desse IP. O correto uso do DNS reverso para endereço IP pode ajudar muito o troubleshooting na Internet e saber interpretar esses nomes é essencial para um bom entendimento daquele caminho.

Algumas informações que geralmente estão disponíveis no nome do IP:

  • Localização geográfica do roteador
  • Tipo de interface e mídia
  • Função do roteador ou nó
  • Pontos de interconexão de redes

Paris Traceroute

https://paris-traceroute.net/about/