traceroute e mtr: Rastreando Caminhos de Rede e Encontrando o Salto Lento
O Que Você Vai Aprender
- Como usar
traceroutepara mapear o caminho (quais roteadores seus pacotes atravessam) - Como usar
mtrpara medir continuamente perda e latência por salto e isolar o segmento problemático - Como ler
* * *e perda em saltos intermediários corretamente em vez de julgá-los erroneamente
Resumo Rápido
- Ver o caminho e o destino uma vez ->
traceroute - Ver onde a perda ou latência ocorre ->
mtr - Ignorar perda apenas em saltos intermediários (limitação de taxa ICMP). Perda que chega ao salto final é o problema real
Premissas
- SO: Ubuntu / Linux geral
tracerouteemtrsão pacotes separados. Instale comsudo apt install traceroute mtr-tiny
O Que o traceroute Realmente Faz?
Conclusão: Ele envia pacotes com TTL crescente a partir de 1 e reconstrói o caminho um salto por vez a partir das mensagens ICMP Time Exceeded que cada roteador retorna.
Todo pacote IP carrega um contador TTL (Time To Live): quantos roteadores mais ele pode cruzar. Cada roteador decrementa o TTL em 1, e um pacote cujo TTL chega a 0 é descartado - o roteador envia uma mensagem ICMP Time Exceeded de volta ao remetente.
O traceroute explora isso.
- Envie um pacote com TTL=1 -> o primeiro roteador descarta e responde -> salto 1 revelado
- Envie TTL=2 -> o segundo roteador responde -> salto 2 revelado
- Continue aumentando o TTL até alcançar o destino
Ele envia 3 sondas por salto por padrão, então cada linha mostra três tempos de ida e volta (RTT).
$ traceroute example.com
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets 1 _gateway (192.168.1.1) 0.512 ms 0.498 ms 0.471 ms 2 10.0.0.1 (10.0.0.1) 4.231 ms 4.118 ms 4.090 ms 3 * * * 4 93.184.216.34 (93.184.216.34) 12.043 ms 11.998 ms 12.110 ms
* * * Significa que Algo Está Quebrado?
Conclusão: Normalmente não. Um roteador simplesmente escolheu não responder; se saltos além dele ainda respondem, o caminho está funcionando.
* * * significa "sem resposta a nenhuma das 3 sondas." As causas comuns são:
- O roteador suprime respostas de TTL-exceeded (firewall / política)
- Ele bloqueia sondas UDP (traceroute no Linux usa UDP por padrão)
- Atingiu um limite de taxa de resposta
Regra prática: se saltos após o * * * respondem, o caminho está funcionando. Só suspeite de alcançabilidade quando * continua até o salto final (o destino).
Se você suspeita que UDP está sendo bloqueado, mude o método de sondagem.
# ICMP Echo (mesmo tipo de pacote que ping) $ sudo traceroute -I example.com # TCP SYN para porta 443 (mais proximo do trafego HTTPS real) $ sudo traceroute -T -p 443 example.com
-I (ICMP) e -T (TCP) usam raw sockets e precisam de root (sudo). O modo UDP padrão funciona como usuário regular.
Quais Opções do traceroute Importam?
Conclusão: Comece com
-n(pular DNS para velocidade),-T -p(sondar via TCP) e-m(max hops).
| Opção | Significado |
|---|---|
-n |
Não resolver IPs para nomes (mais rápido) |
-I |
Sondar com ICMP Echo |
-T |
Sondar com TCP SYN (use -p para a porta) |
-p PORT |
Porta de destino (com -T, ex. 443) |
-m N |
Máximo de saltos (padrão 30) |
-q N |
Sondas por salto (padrão 3) |
-w SEC |
Timeout de espera de resposta em segundos |
# Numerico, max 20 saltos, uma sonda por salto - varredura rapida $ traceroute -n -m 20 -q 1 example.com
Se as resoluções DNS reversas estão tornando o processo lento, adicione -n primeiro.
Como o mtr É Diferente do traceroute?
Conclusão: traceroute é um snapshot único do caminho; mtr continua fazendo ping em cada salto do caminho e atualiza estatísticas de perda e latência em tempo real.
Problemas de rede oscilam. Um único traceroute não consegue capturar o caso intermitente. O mtr combina traceroute (descoberta de caminho) com ping (medição continua) e monitora cada salto continuamente.
$ mtr example.com
Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. _gateway 0.0% 20 0.5 0.6 0.4 1.2 0.2 2. 10.0.0.1 0.0% 20 4.2 4.3 4.0 6.1 0.5 3. 203.0.113.1 10.0% 20 18.0 19.4 17.2 41.0 5.1 4. 93.184.216.34 0.0% 20 12.0 12.1 11.9 12.4 0.1
O significado das colunas:
- Loss%: proporção de sondas sem resposta naquele salto
- Snt: sondas enviadas
- Last / Avg / Best / Wrst: último / médio / mínimo / máximo RTT (ms)
- StDev: variação do RTT (maior = menos estável)
Como Você Lê a Perda no mtr?
Conclusão: Perda em um salto intermediário que volta a 0% no salto final é perda falsa da limitação de taxa ICMP. Apenas perda que persiste até o salto final é real.
Esta é a maior armadilha do mtr e sua lição mais importante. Na saída acima, o salto 3 mostra 10.0% de perda, porém o salto final 4 volta a 0.0%.
Roteadores frequentemente desprioritizam ou limitam as respostas de TTL-exceeded endereacadas a eles mesmos. Então os 10.0% do salto 3 significam apenas "salto 3 descartou algumas de suas próprias respostas" - o tráfego em si passa direto.
Regra de decisão
- Perda em salto intermediário -> ignore a menos que se propague até o salto final (falso positivo de limitação de taxa ICMP)
- Perda no salto final (destino) -> perda real de pacotes. O segmento onde a perda começa a subir e continua é o culpado
Em resumo, observe onde a perda começa e permanece até o fim. Descarte perda que desaparece depois.
Como Você Identifica o Segmento Lento?
Conclusão: Se o Avg salta em um salto e permanece alto pelo resto, esse segmento é a fonte de latência. Um pico que volta é apenas processamento atrasado de resposta, sem impacto real.
A latência se lê da mesma forma que a perda.
- Avg salta em um salto e permanece alto para cada salto posterior -> esse segmento (salto anterior -> este salto) é a fonte real de latência
- Apenas Wrst sobe em um salto enquanto Avg permanece baixo -> aquele roteador simplesmente atrasou sua resposta; não é latência real do caminho
# Modo relatorio: enviar 10 ciclos, depois imprimir resultados finais (para logs / tickets) $ mtr -rwzbc 10 example.com
Significado das opções:
-r/--report: imprimir resultados agregados uma vez em vez da tela interativa-w: saída ampla (não truncar hostnames)-z: mostrar o número AS de cada salto (qual rede de provedor é)-b: mostrar tanto hostname quanto IP-c N: número de ciclos a enviar (padrão 10)-n: pular resolução de nomes (mais rápido)
Ao enviar um relatório para seu ISP ou equipe de infra, anexe um relatório com mais ciclos, ex. mtr -rwzbc 100 host. Mais amostras tornam os números de perda mais confiáveis e aceleram a conversa.
traceroute vs mtr: qual usar
Conclusão: Use traceroute para verificar o caminho uma vez, e mtr para isolar continuamente onde a perda ou latência ocorre. Anexe a saída de relatório do mtr ao reportar um problema.
| Situação | Use |
|---|---|
| Ver o caminho para um host uma vez | traceroute -n |
UDP bloqueado, * * * continua |
traceroute -T -p 443 |
| Medir perda / latência continuamente | mtr host |
| Compartilhar resultados como relatório | mtr -rwzbc 100 host |
Interpretações erradas comuns
- Tratar um
* * *intermediário como uma falha - Acreditar em perda de salto intermediário que retorna a 0% no salto final
- Concluir "tudo certo" a partir de uma única execução de traceroute