Traceroute
Traceroute — это сетевая утилита, предназначенная для определения маршрута следования данных от источника к узлу назначения в компьютерных сетях, работающих на основе протокола IP. Traceroute выводит список всех промежуточных маршрутизаторов (хопов), через которые проходят пакеты, а также время, затраченное на прохождение каждого сегмента. Утилита широко используется для диагностики сетевых проблем, анализа задержек и проверки связности.
История и происхождение
Разработка traceroute началась в конце 1980-х годов. Первая версия утилиты была написана в 1987 году американским программистом Ван Якобсоном (Van Jacobson) из Национальной лаборатории имени Лоуренса в Беркли. Вдохновением послужила потребность в инструменте, который позволял бы выявлять точки отказа в растущей сети ARPANET и Интернете. Исходный код был реализован на языке C для операционной системы Unix. Позднее, в 1990-х годах, утилита была портирована на множество платформ, включая Linux, Windows (под именем tracert) и macOS.
В 2004 году в мире IPv6 появился аналог — traceroute6 (или tracert6), адаптированный для шестой версии IP-протокола.
Принцип работы
Traceroute основан на использовании поля «Время жизни» (Time to Live, TTL) в заголовке IP-пакета. TTL определяет максимальное количество хопов, через которые может пройти пакет, прежде чем быть отброшенным. Принцип работы включает несколько шагов:
- Отправляется последовательность пакетов (обычно три) с TTL = 1.
- Первый маршрутизатор на пути, получив пакет, уменьшает TTL на единицу. Когда TTL достигает нуля, маршрутизатор отбрасывает пакет и отправляет отправителю ICMP-сообщение об истечении времени (Type 11, Code 0). В это сообщение включается IP-адрес маршрутизатора.
- Утилита регистрирует адрес маршрутизатора и время, прошедшее от отправки до получения ICMP-ответа.
- Процесс повторяется с TTL, увеличенным на 1, пока пакеты не достигнут целевого узла или не будет превышен максимальный TTL (обычно 30). При достижении цели хост отправляет ICMP-сообщение о недоступности порта (Type 3, Code 3) или ответное ICMP Echo Reply, если использовался протокол ICMP Echo Request.
Типы используемых протоколов
В зависимости от реализации, traceroute может использовать разные протоколы:
- ICMP (Internet Control Message Protocol) — классический подход, принятый в Unix-системах. Отправляются ICMP Echo Request (ping).
- UDP (User Datagram Protocol) — распространён в ранних версиях traceroute. Отправляются UDP-пакеты на порты с большими номерами (обычно начиная с 33434). Целевой хост отвечает ICMP-сообщением «Порт недоступен».
- TCP (Transmission Control Protocol) — используется в некоторых современных реализациях (например, tcptraceroute), особенно для обхода межсетевых экранов, блокирующих ICMP и UDP. Отправляются TCP SYN-пакеты на указанный порт (обычно 80).
Формат вывода
Типичный вывод traceroute для IPv4 (на примере команды из ОС Linux) выглядит следующим образом:
`` traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 192.168.1.1 (192.168.1.1) 1.234 ms 1.567 ms 1.345 ms 2 10.0.0.1 (10.0.0.1) 10.123 ms 9.876 ms 10.111 ms 3 72.14.213.65 (72.14.213.65) 25.456 ms 26.789 ms 25.111 ms 4 216.239.35.201 (216.239.35.201) 30.123 ms 29.876 ms 30.222 ms 5 8.8.8.8 (8.8.8.8) 28.567 ms 27.890 ms 28.123 ms ``
Каждая строка соответствует одному хопу. В квадратных скобках (или без них) указываются три значения времени в миллисекундах — для каждого из трёх отправленных пакетов. Если ответ не получен в течение тайм-аута (обычно 5 секунд), выводится звёздочка ( *).
Классификация
По операционной системе
- tracert — реализация для Windows (использует ICMP Echo Request).
- traceroute — реализация для Unix-подобных систем (использует UDP).
- traceroute6 — для IPv6.
- tcptraceroute — использует TCP SYN-пакеты.
- mtr (My TraceRoute) — гибрид traceroute и ping, работает в интерактивном режиме.
По протоколу
- ICMP-based: стандартные Unix/Linux.
- UDP-based: ранние версии, также LFT (Layer Four Traceroute).
- TCP-based: tcptraceroute, hping3.
По версии IP
- IPv4 Traceroute.
- IPv6 Traceroute.
Применение
Диагностика сетевых проблем
Traceroute позволяет выявить:
- Точки потери пакетов: если на определённом хопе звёздочки (*) или высокие времена задержки, вероятна проблема на этом участке сети.
- Асимметрию маршрутизации: разные пути в прямом и обратном направлении.
- Топологию сети: узнать, через какие автономные системы (AS) проходит трафик.
Анализ производительности
Измерение времени задержки (latency) на каждом сегменте помогает оценить качество каналов связи. Высокие значения могут указывать на перегрузку, спутниковые каналы или географическую протяжённость.
Проверка изменений маршрутизации
Сетевые администраторы используют traceroute для мониторинга изменений в маршрутах после обновления конфигураций маршрутизаторов или смены провайдера.
Учебные и исследовательские цели
Traceroute часто применяется в курсах сетевых технологий для демонстрации работы IP-маршрутизации и протокола ICMP.
Критика и ограничения
- Обход межсетевых экранов: многие современные брандмауэры блокируют ICMP и UDP-пакеты, из-за чего traceroute может показывать звёздочки на некоторых хопах. Использование TCP-версии (tcptraceroute) частично решает эту проблему.
- Асимметрия маршрутизации: traceroute показывает только путь от источника к цели, но не обратный маршрут. Пакеты могут возвращаться другим путём, что не отображается.
- Сетевая нагрузка: отправка нескольких пакетов на каждый хоп может создавать дополнительный трафик, хотя объём обычно невелик (несколько десятков килобайт на одну трассировку).
- Ограничение длины пути: максимальное число хопов по умолчанию — 30, что достаточно для большинства сетей, но может не хватить для очень длинных маршрутов (например, через спутники).
- Ложные метрики: время ответа может быть искажено из-за приоритезации ICMP-трафика на маршрутизаторах или замедления в каналах с очередями.
- Безопасность: опубликованные результаты traceroute могут раскрывать внутреннюю топологию сети, поэтому некоторые организации ограничивают его использование через фаерволы.
Реализации и команды
В операционных системах
- Linux / Unix: команда
traceroute [опции] <адрес>. Пример:traceroute -n google.com(отображение IP-адресов без DNS-разрешения). - Windows: команда
tracert <адрес>. Пример:tracert 8.8.8.8. - macOS: использует пародийную версию из BSD —
traceroute. - Cisco / сетевые устройства: в IOS команда
traceroute <адрес>. - Android / iOS: мобильные приложения-трассировщики, а также терминальные эмуляторы (например, Termux).
Параметры
Общие опции включают:
-n— не выполнять DNS-запросы (числовой вывод).-m <макс_хопы>— задать максимальное число хопов.-w <таймаут>— время ожидания ответа в секундах.-p <порт>— задать начальный UDP-порт (для UDP-реализации).-T— использовать TCP SYN-пакеты (в Linux).-I— использовать ICMP Echo Request (в Linux).
Интересные факты
- Ван Якобсон получил за разработку traceroute премию USENIX Association в 1991 году.
- В некоторых версиях traceroute (например, в Linux) можно менять тип протокола: UDP (по умолчанию), ICMP (
-I) или TCP (-T). - Существует утилита pathchar (расширенная версия), которая оценивает пропускную способность каждого хопа.
- Traceroute лежит в основе работы сервисов визуализации маршрутов (например, «traceroute.org» или «Looking Glass» у интернет-провайдеров).
- В 2008 году была запущена программа «Traceroute Arrangement» для картирования подводных кабелей, где использовались результаты массовых traceroute-замеров.
Источники
- Van Jacobson, «Traceroute» — оригинальный код и описание, опубликованные в 1987–1988 годах.
- RFC 792 — Internet Control Message Protocol (ICMP).
- RFC 1812 — Requirements for IP Version 4 Routers.
- Stevens, W. Richard, «TCP/IP Illustrated, Volume 1: The Protocols» (1994), глава о диагностике.
- Документация к утилите traceroute из пакета net-tools (Linux).
- Официальная документация Microsoft для команды tracert.
- Стивен С. Паркер, «Network System Design» — раздел о сетевой диагностике.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →