Зачем нужен
Когда твой пинг до сайта медленный - где затык? Где-то у тебя дома, у провайдера, на магистрали, у дата-центра удалённого сервера? Без traceroute это слепое гадание. С ним - видишь каждый роутер по пути и время ответа на каждом.
Как работает (трюк с TTL)
Каждый IP-пакет имеет поле TTL (Time To Live) - счётчик хопов. Каждый роутер декрементирует TTL на 1; если стало 0 - пакет дропается и отправителю летит icmp type 11 (time exceeded).
Traceroute эксплуатирует это:
- Шлёт пакет с TTL=1. Первый же роутер декрементирует до 0, дропает, шлёт ICMP time-exceeded. Мы получили адрес первого роутера
- Шлёт пакет с TTL=2. Первый роутер декрементирует до 1, форвардит. Второй декрементирует до 0, дропает, шлёт ICMP. Мы получили второй роутер
- И так далее, увеличивая TTL пока не получим ответ от самого хоста
Каждый шаг повторяется обычно 3 раза, чтобы увидеть разброс задержки.
Реализации различаются
- Linux
tracerouteпо умолчанию шлёт UDP на «непонятный» высокий порт. Для tcp используется флаг-T, для icmp --I - Windows
tracertшлёт ICMP echo-request (как ping) - macOS - UDP по умолчанию (как Linux)
Это важно: фаерволы могут пропускать ICMP, но дропать UDP - тогда
traceroute показывает звёздочки, хотя ping работает. Решение: попробовать
traceroute -I (ICMP) или tcptraceroute (использует TCP к открытому
порту).
Чтение вывода
$ traceroute google.com
1 192.168.1.1 0.5 ms ← домашний роутер
2 10.10.0.1 5.2 ms ← провайдер
3 * * * ← дропает или скрывается
4 72.14.234.1 12.5 ms ← magistral
5 142.250.46.225 15.0 ms ← google
* * *на конкретном хопе - роутер не отвечает на ICMP (часто это политика безопасности). Не значит что путь не работает- Резкий скачок задержки между двумя соседними хопами - там лежит «бутылочное горлышко»
- Неравномерная задержка в одном хопе ([1ms, 100ms, 1ms]) - обычно rate-limit на ICMP-ответы у роутера, не реальная задержка
mtr - лучше чем traceroute
MTR = traceroute + ping в одном - постоянно прозванивает каждый хоп и показывает % потерь и стабильность задержки. Незаменим для дебага «иногда тупит».
mtr google.com # интерактивный, обновляется в реалтайме
mtr -rwc 100 google.com # 100 проб, отчёт-режим, для логов