Сайт отвечает медленно, хотя ping показывает нормальные 20–40 мс: проблема не в доступности узла, а где-то на пути пакетов. traceroute показывает сам маршрут, а mtr превращает разовую трассировку в непрерывное измерение и помогает отделить реальные потери от особенностей фильтрации ICMP.

Как работают traceroute и mtr

Оба инструмента используют поле TTL в заголовке IP. Первый пакет уходит с TTL=1, на первом маршрутизаторе TTL истекает, и тот возвращает сообщение ICMP Time Exceeded. Затем TTL увеличивается на единицу, и так до получателя. В Linux traceroute по умолчанию отправляет UDP-датаграммы на высокие порты, а ключи -I и -T переключают его на ICMP Echo и TCP SYN соответственно. Для TCP полезно указать реальный порт сервиса, например 443: такой пакет чаще проходит через межсетевые экраны.

mtr объединяет трассировку и ping: он постоянно опрашивает все обнаруженные хопы и накапливает статистику. По умолчанию mtr тоже использует ICMP, но умеет UDP и TCP. Для сырых сокетов обычно нужны права root, поэтому запускайте его через sudo. Главная ценность mtr — не один снимок, а распределение задержек и потерь за десятки или сотни циклов.

traceroute -n -T -p 443 example.com
sudo mtr -rwzc 50 example.com
sudo mtr -T -P 443 -rwzc 50 example.com
tracepath -n example.com

Ключи mtr читаются так: -r — отчёт вместо интерактивного экрана, -w — широкий вывод, -z — показать номера автономных систем, -c — число циклов. tracepath полезен, когда нужно проверить ещё и MTU на пути и нет прав root.

Как читать потери и задержки

Частая ошибка — считать любую потерю на промежуточном хопе аварией. Маршрутизаторы часто ограничивают ответы ICMP и отдают их с низким приоритетом. Признак реальной проблемы другой: потери начинаются на конкретном хопе и сохраняются на всех последующих, вплоть до получателя. Если на пятом хопе 40% потерь, а дальше ноль, это rate limiting маршрутизатора, а не проблема соединения.

Задержка важна в сравнении с соседними хопами: рост с 15 до 120 мс, который держится дальше, указывает на перегруженный участок. Высокий StDev и большой разброс между лучшим и худшим временем означают джиттер, особенно мешающий голосовой связи и видеоконференциям. Помните про асимметрию: обратный путь может идти иначе, и проблемы там видны только при трассировке с противоположной стороны.

Несколько IP-адресов у одного хопа — это не ошибка, а балансировка нагрузки. Разные пробы могут попадать на разные устройства, поэтому потери и задержки у них отличаются. Для диагностики запускайте больше циклов и смотрите на устойчивую картину, а не на одну строку.

Разбор типичных сценариев

Проблема в первом хопе. Если потери начинаются на шлюзе, проверьте Wi-Fi и локальную сеть: ip -s link show wlan0 покажет ошибки и дропы, iw dev wlan0 link — состояние радиоканала. Помогают смена канала, отказ от перегруженного 2,4 ГГц и проверка кабеля.

Проблема у провайдера. Потери стартуют на третьем-четвёртом хопе и держатся до конца. Сохраните отчёт mtr с датой и временем, укажите направление трафика и повторите замер с другого подключения: нужна доказательная картина за несколько минут, а не один «пинг».

Проблема на стороне сервиса. Все промежуточные хопы чистые, а последний теряет пакеты. Проверьте TCP-портом: если mtr -T -P 443 показывает потери, а ICMP-вариант — нет, дело может быть в фильтре или перегрузке сервиса, а не в маршруте.

Плавающая проблема. Запускайте тест на 200 циклов и сопоставляйте всплески с временем. Для MTU используйте tracepath: он покажет, где перестают проходить крупные пакеты. Проверка ping -M do -s 1472 до шлюза и внешнего узла покажет, не режет ли путь пакеты из-за туннеля или PPPoE.

ping -c 20 -i 0.2 192.168.1.1
ip -s link show wlan0
sudo mtr -rwzc 200 -i 1 example.com
ping -M do -s 1472 -c 3 example.com

Отчёт и повторяемость

Провайдеру или администратору сервиса нужен воспроизводимый отчёт. Запускайте mtr с --no-dns и сохраняйте вывод в файл вместе с временем замера. Полезно приложить ip route get до проблемного адреса: он покажет, через какой интерфейс и шлюз реально уходит трафик. При нескольких маршрутах или туннельных интерфейсах это сразу объясняет странные результаты.

sudo mtr -rwzc 100 --no-dns example.com
sudo mtr -rwzc 100 --no-dns 203.0.113.10
date -u +%Y-%m-%dT%H:%M:%SZ
ip route get 203.0.113.10

Сравнивайте замеры с двух точек: из своей сети и с внешнего сервера. Если из дома потери есть, а с сервера в дата-центре нет, проблема почти наверняка на локальном или провайдерском участке. Обратная трассировка покажет, совпадает ли путь туда и обратно.

sudo tcpdump -ni any host 203.0.113.10
sudo mtr -rwzc 60 --no-dns example.com

Ограничения и ошибки толкования

Трассировка не измеряет пропускную способность. Она также не видит внутреннюю структуру операторской сети: MPLS-метки, туннели и коммутаторы скрыты, поэтому «дырка» между хопами может быть нормальной. Геолокация IP приблизительна, а anycast-адреса вообще могут обслуживаться в другом городе, чем показывает база.

Не отправляйте сотни проб в чужую сеть без необходимости: это создаёт нагрузку и может быть воспринято как сканирование. Для рабочей диагностики достаточно одного-двух пакетов в секунду. И помните, что фильтрация ICMP — обычная практика, а не доказательство поломки.

traceroute -I -n example.com
traceroute -T -p 80 -n example.com
sudo mtr -u -rwzc 30 example.com
ss -tin dst 203.0.113.10

Чек-лист диагностики

  • Зафиксируйте время, источник, имя и IP-адрес получателя.
  • Сравните ICMP, UDP и TCP-пробы на реальный порт сервиса.
  • Проверьте первый хоп, ошибки интерфейса и качество Wi-Fi.
  • Ищите потери, которые начинаются на хопе и сохраняются дальше.
  • Запустите не менее 100 циклов mtr, а для плавающих сбоев — больше.
  • Проверьте MTU и путь до шлюза, особенно при туннелях.
  • Сделайте замер с другой сети и, по возможности, в обратном направлении.
  • Сохраните отчёт и сопоставьте его с метриками приложения.

Итог

traceroute отвечает на вопрос «каким путём идут пакеты», а mtr — «где этот путь стабильно портится». Рабочая схема проста: сначала TCP-трассировка до нужного порта, затем длинный отчёт mtr, проверка первого хопа, MTU и обратного направления. Не принимайте одиночную потерю на промежуточном маршрутизаторе за аварию и всегда отделяйте фильтрацию ICMP от реальной деградации.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте