Перейти к основному содержимому

Как посмотреть путь IP-пакета: traceroute и tracert

·611 слов·3 минут
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps/Network/Infra Engineer, CyberSecurity Expert

Когда ваш компьютер отправляет данные в интернет, пакет проходит через множество промежуточных узлов (маршрутизаторов), прежде чем достигнет цели. Иногда возникает необходимость узнать точный маршрут — например, для диагностики проблем с доступностью сайта или для проверки правильности настройки сети.

Для этого существуют утилиты traceroute (в Linux/macOS) и tracert (в Windows).

Как это работает?
#

Traceroute отправляет пакеты с последовательно увеличивающимся значением TTL (Time To Live):

  1. Первый пакет с TTL=1 — первый маршрутизатор уменьшает TTL до 0, отбрасывает пакет и отправляет обратно ICMP-сообщение “Time Exceeded”.
  2. Второй пакет с TTL=2 — проходит первый маршрутизатор, но отбрасывается вторым.
  3. Третий пакет с TTL=3 — проходит два маршрутизатора, но отбрасывается третьим.

И так далее, пока пакет не достигнет целевого узла.

Таким образом, мы получаем список всех “прыжков” (hops) до конечного сервера. Каждый маршрутизатор на пути идентифицирует себя по IP-адресу, а время отклика показывает задержку на каждом участке сети.

traceroute (Linux/macOS)
#

По умолчанию traceroute в Linux отправляет UDP-пакеты.
По умолчанию утилита пытается определить текстовые имена (PTR-записи) для каждого IP-адреса. Это замедляет процесс. Ключ -n заставит её выводить только «чистые» IP-адреса, что ускоряет трассировку в несколько раз.

# TCP-трассировка на порт 80
traceroute -T -p 80 ya.ru

# UDP-трассировка на порт 443
traceroute -U -p 443 ya.ru

# ICMP-трассировка
traceroute -I ya.ru

# Быстрая TCP-трассировка без DNS (-n)
traceroute -n -T -p 443 ya.ru

tracert (Windows)
#

# Стандартная ICMP-трассировка
tracert ya.ru

# Быстрая ICMP-трассировка без DNS (-d)
tracert -d ya.ru

Проблема: ICMP заблокирован на магистральных маршрутизаторах
#

Рассмотрим реальный пример трассировки до ya.ru:

traceroute -n -T -p 80 ya.ru
...
traceroute to ya.ru (77.88.55.242), 30 hops max, 60 byte packets
 1  192.168.88.1  0.528 ms  0.480 ms  0.738 ms
 2  115.236.161.111  1.180 ms  1.169 ms  1.158 ms
 3  115.236.160.241  8.840 ms  8.829 ms  8.818 ms
 4  115.236.160.106  8.813 ms  8.802 ms  8.791 ms
 5  128.75.225.20  8.781 ms  8.770 ms  8.760 ms
 6  128.75.225.255  21.033 ms  20.621 ms  20.774 ms
 7  128.75.225.106  32.137 ms  31.669 ms  31.602 ms
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * 77.88.55.242  43.966 ms

Что здесь происходит?

Начиная с 8-го прыжка вы видите * * * — это не потеря пакетов, а блокировка ICMP-ответов.
Объяснение:

  1. Пакеты успешно доходят до 7-го маршрутизатора.
  2. Дальнейшие маршрутизаторы настроены на игнорирование ICMP Time Exceeded (TTL-превышений).
  3. Но сам ya.ru (77.88.55.242) на 18-м прыжке отвечает (43.966 ms)!

Это классическое поведение для крупных провайдеров и CDN-сетей. Они скрывают свою внутреннюю инфраструктуру от посторонних глаз, блокируя ICMP-ответы на промежуточных маршрутизаторах. При этом трафик отлично доходит до цели.

Вывод: Если вы видите длинную цепочку звездочек, но последний хоп отвечает — маршрут работает, и все в порядке.

Почему три значения?
#

Traceroute по умолчанию отправляет три зонда (пакета) на каждый прыжок. Это делается для получения более точной статистики:

  • Первое значение — время отклика первого пакета.
  • Второе значение — время отклика второго пакета.
  • Третье значение — время отклика третьего пакета.

Зачем нужно три замера?

  1. Усреднение — можно вычислить среднее время ((0.528 + 0.480 + 0.738) / 3 ≈ 0.582 ms).
  2. Выявление нестабильности — если значения сильно различаются (например, 5 ms, 100 ms, 150 ms), это указывает на проблемы с маршрутизатором или перегруженный канал.
  3. Отбраковка выбросов — если один из трех пакетов потерялся (вы увидите звездочку вместо времени), два других все равно дадут информацию о доступности узла.

Три значения в traceroute — это три независимых измерения задержки до одного и того же маршрутизатора.

В реальных условиях первое значение часто показывает минимальную задержку, второе и третье — усредненную картину. Если все три значения близки — канал стабилен, если разброс большой — возможны проблемы.

Related

Полезные функции Far Manager
·277 слов·2 минут
SSH-туннелирование
·419 слов·2 минут
Использование TLS клиента OpenSSL для тестирования HTTPS
·1150 слов·6 минут