Чем tracepath отличается от traceroute
Tracepath решает две задачи одновременно: показывает узлы на пути и определяет наименьший MTU на маршруте (Path MTU, сокращённо PMTU). Главное его удобство в том, что он не требует прав суперпользователя: для отправки UDP-пакетов на высокие порты специальные привилегии не нужны.
Утилита входит в набор iputils, как и ping, поэтому в большинстве дистрибутивов Linux она уже установлена или ставится вместе с этим набором. В некоторых системах она называется tracepath6 для IPv6, а в современных версиях достаточно ключа -6.
Traceroute показывает только последовательность узлов, а вопрос о размере пакета он не решает. Если вы подозреваете проблему с MTU (страницы частично загружаются, соединения зависают на больших передачах), tracepath отвечает на этот вопрос прямо и без ручного подбора размера, как в проверке командой ping.
Практическое отличие в целях: traceroute отвечает на вопрос «через какие узлы идут пакеты», а tracepath дополнительно на вопрос «какого размера пакеты по этому пути проходят целиком». Когда проблема выглядит как «мелкое работает, крупное зависает», вторая информация полезнее первой, и начинать диагностику стоит именно с неё.
Основные ключи и пример запуска
Запуск в простейшем виде: tracepath -n example.com. Ключ -n отключает поиск имён и ускоряет вывод. Ниже параметры, в которых мы уверены.
| Ключ | Что делает |
|---|---|
| -n | Показывает только числовые адреса |
| -b | Показывает и имена, и адреса |
| -m число | Ограничивает максимальное число переходов |
| -l число | Задаёт начальную длину пакета |
| -p порт | Задаёт начальный порт назначения |
| -4, -6 | Выбирают IPv4 или IPv6 |
Начальная длина пакета задаёт верхнюю границу зондирования: если вы укажете значение больше реального MTU, tracepath обнаружит предел и уменьшит размер. Порт менять требуется редко, обычно при попытке пройти узел, который фильтрует конкретные порты.
Так как утилита опирается на UDP, на маршруте с жёсткой фильтрацией она может не дойти до цели. В таком случае сочетайте её с другими способами трассировки.
Для IPv6 запускайте tracepath -6 example.com. В отличие от IPv4, в IPv6 маршрутизаторы не фрагментируют пакеты, поэтому определение PMTU там критично: узел, который отбрасывает ICMPv6-сообщения о слишком большом пакете, ломает связь для больших передач. Минимально допустимый MTU в IPv6 составляет 1280 байт.
Как читать вывод tracepath
Пример (пример, адреса из блока документации):
1?: [LOCALHOST] pmtu 1500 1: 192.0.2.1 0.512ms 1: 192.0.2.1 0.430ms 2: 198.51.100.1 3.106ms 3: no reply 4: 203.0.113.9 12.010ms pmtu 1492 5: 203.0.113.50 25.204ms reached Resume: pmtu 1492 hops 5 back 5
Разберём строки по частям.
- Первая строка показывает локальный MTU, с которого начинается зондирование.
- Значение pmtu, появившееся на переходе, означает, что начиная с этого места MTU стал меньше. В примере он снизился до 1492.
- Строка no reply значит, что узел не ответил. Как и в traceroute, это не всегда обрыв.
- Слово reached показывает, что цель достигнута.
- В строке Resume приведены итоговый pmtu, число переходов туда и число переходов обратно (back).
Если значения hops и back заметно различаются, обратный путь отличается от прямого. В некоторых случаях вместо back показывается несколько значений или пометка asymm, что тоже говорит об асимметрии маршрута.
Что делать с найденным значением PMTU
Итоговый pmtu важен, если он оказался меньше 1500 и вы не знали об этом. Тогда стоит проверить, что на вашем роутере и компьютере выставлен подходящий размер MTU и что не блокируются ICMP-сообщения о необходимости фрагментации. Если эти сообщения фильтруются, отправитель не узнаёт о лимите, и крупные пакеты пропадают без объяснений. Такую ситуацию называют «чёрной дырой PMTU».
Порядок действий такой.
- Запустите tracepath -n к нескольким узлам и запишите итоговые значения pmtu.
- Найдите переход, на котором значение уменьшилось. Это часто узел на стороне провайдера или ваш собственный роутер с подключением PPPoE.
- Сравните результат с проверкой ping с запретом фрагментации. Они должны совпадать.
- При расхождении с настройками уточните значение у провайдера и скорректируйте MTU на своей стороне.
Подробнее понятие описано в словаре на странице про MTU, а настройка на роутере на странице про MTU и MSS.
После правки настроек повторите tracepath: значение pmtu должно совпасть с ожидаемым, а страницы и передачи крупных файлов перестать зависать. Если картина не изменилась, вернитесь к исходным настройкам и проверьте, нет ли фильтрации ICMP на вашем роутере или брандмауэре.
Ограничения tracepath
Утилита не заменяет полноценные средства диагностики. В отличие от mtr, она не собирает статистику потерь, а в отличие от traceroute, не умеет переключать протокол зондирования на ICMP или TCP.
Также в macOS штатного tracepath нет, поэтому для проверки MTU там используют ping с ключом -D и подбор размера вручную. В Windows аналога нет, применяют ping с ключом -f.
Отдельно стоит помнить о том, что результаты зависят от момента: маршруты меняются, и значение pmtu в разное время может различаться. Повторяйте измерение перед выводами. Проверяйте только свои сети и узлы, на которые у вас есть разрешение, и не запускайте утилиту в цикле по чужим адресам.
Если tracepath недоступен, но нужна проверка MTU, воспользуйтесь методом с ping: выберите размер данных 1472 и уменьшайте его, пока ответы не пойдут. Оба метода дают близкие значения, и расхождение в один-два байта чаще всего объясняется разной трактовкой заголовков в утилитах, а не проблемой сети.