Раздел помощи SpaceWeb

Принцип работы утилиты tracert и traceroute

07 май, 2024

От А до Я: как работают Tracert и Traceroute

Поскольку есть множество возможных причин неполадок в сети, наличие знаний и инструментов для их устранения поможет вам существенно сэкономить время.

Один из наиболее распространённых и удобных инструментов, которые используются для этой цели, – это Tracert или Traceroute. В этой статье мы рассмотрим, как работают эти команды, за что они отвечают и чем отличаются.

Что такое Tracert и Traceroute

Traceroute и Tracert – это сетевые утилиты, которые используются для определения маршрута (пути), по которому пакеты данных передаются от одной точки к другой в интернете или других IP-сетях. Они помогают пользователям и сетевым администраторам анализировать, как именно данные передаются от исходного компьютера к целевому устройству, и выявлять возможные проблемы в сетевой инфраструктуре.

Хотя у этих команд и разные названия, они выполняют аналогичные функции в зависимости от операционной системы – Tracert в Windows и Traceroute в Linux и MacOS. Они позволяют отслеживать маршрут, который данные проходят от отправителя к получателю. Это особенно важно в условиях сложных сетевых инфраструктур, где данные могут проходить через множество промежуточных устройств: например, маршрутизаторов, коммутаторов и файрволов.

Как мы уже упомянули, когда данные отправляют от одного узла сети к другому, они проходят через несколько промежуточных устройств. Traceroute и Tracert позволяют наблюдать за каждым этапом этого пути, предоставляя информацию о времени задержки при передаче данных (RTT), а также об именах и IP-адресах устройств.

В отличие от команды Ping, которая может лишь указать на наличие проблемы в сети, Traceroute и Tracert помогают точно определить, где именно возникла проблема. Они стали неоценимыми инструментами для администраторов сетей, потому что помогают им быстро локализовать и устранить неполадки.

Что такое трассировка

Трассировка (а точнее распределённая трассировка) представляет собой критически важный инструмент для анализа и управления сложными информационными системами, особенно когда дело доходит до микросервисных архитектур.

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

Если журналирование фиксирует конкретные события – например, доступ к базам данных или запись файлов, – то трассировка создаёт связанную картину всех событий в ходе обработки запроса. Трассировку можно сравнить с интерактивной картой, которая показывает путь вашего запроса через систему. Она объединяет фрагменты информации из журналов разных служб в цельную картину, позволяя пользователям лучше понять взаимосвязь между различными компонентами системы и выявить слабые места. 

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

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

Как работает трассировка

Перед началом работы с трассировкой стоит разобраться в структуре монолитных или микросервисных приложений. 

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

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

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

Трассировка позволяет разработчикам визуализировать весь путь запроса от фронтенда к серверным процессам, тем самым точно локализуя места сбоев или узкие места в производительности. При отправке запроса пользователем, например, через веб-форму, система трассировки генерирует уникальный идентификатор, который присваивается запросу. Этот идентификатор помогает отслеживать каждый шаг обработки запроса, что значительно упрощает процесс устранения неполадок.

Для сбора данных о маршруте запросов в сети и используются такие инструменты, как Traceroute и Tracert. Эти утилиты позволяют выявлять маршруты прохождения данных в сети, что полезно не только для диагностики сетевых проблем, но и для анализа производительности сетевой инфраструктуры.

Как работает Traceroute / Tracert

  1. Утилита использует определённый протокол для отправки последовательности IP-пакетов (UPD или ICPM). 
  2. По умолчанию количество пакетов ограничено и равно 3. 
  3. Каждый следующий пакет отправляется с увеличением времени жизни TTL (Time To Live) на 1. Так, у первого пакета TTL=1, у второго – TTL=2 и так далее. 
  4. При передаче от одного маршрутизатора к другому TTL каждого пакета уменьшается на 1, чтобы предотвратить возможное бесконечное перемещение пакета между маршрутизаторами.
  5. Когда TTL пакета достигает нуля, маршрутизатор уничтожает пакет и отправляет обратно сообщение об ошибке. 

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

В чём заключаются отличия Tracert от Traceroute 

Хотя Tracert и Traceroute выполняют схожие функции, их реализация в различных операционных системах отличается по методам и протоколам.

Tracert

Tracert – это утилита, которая использует протокол ICMP (Internet Control Message Protocol) для отслеживания пути пакетов данных. 

Процесс начинается с отправки ICMP-пакета с начальным TTL (Time to Live) равным 1. TTL – это условных счётчик на каждом маршрутизаторе, который уменьшается на единицу при каждом переходе пакета от одного устройства к другому. 

Когда TTL достигает нуля, маршрутизатор, обработавший пакет, не отправляет его дальше, а возвращает исходному хосту сообщение ICMP «Time Exceeded», что позволяет Tracert зарегистрировать устройство как промежуточный пункт (хоп).

Этот процесс повторяется, увеличивая TTL на единицу за каждую итерацию, пока либо не будет достигнут конечный хост, либо не будет достигнут предел (как правило, в 30 или 64 прыжка).  Когда пакет наконец достигает целевого хоста, он посылает сообщение Echo Reply, сообщая об успешном завершении трассировки.

Traceroute

На Unix-подобных системах (например, Linux и MacOS) используется утилита Traceroute, которая отличается использованием UDP (User Datagram Protocol) вместо ICMP для отправки пакетов.  

Traceroute отправляет несколько UDP-пакетов с последовательно увеличивающимися значениями TTL (начиная с 1 и далее). Как и в случае с Tracert, каждый маршрутизатор уменьшает TTL на 1, и при достижении нуля отправляет обратно ICMP сообщение «Time Exceeded». 

Ключевое отличие состоит в том, как Traceroute определяет достижение конечной цели: когда UDP-пакет достигает целевого хоста, последний обычно отвечает сообщением «Destination Port Unreachable» из-за того, что целевой порт (обычно редко используемый порт, например, 34434) закрыт. Это сообщение означает, что пакет достиг своего конечного пункта.

Как использовать Tracert / Traceroute

Утилита Tracert (Windows)

Общий синтаксис:

tracert [-d] [-h максимальное-число] [-j список-узлов] [-w таймаут] [-R] [-S адрес-источника] [-4] [-6] <доменное имя или IP-адрес>
  1. Нажмите клавишу Win, чтобы открыть меню «Пуск».
  2. Введите cmd в поисковой строке и выберите «Командная строка» в результатах поиска.
  3. В открывшемся окне командной строки введите tracert, затем добавьте доменное имя или IP-адрес цели. Например:
tracert www.sweb.ru 
  1. Нажмите Enter, чтобы выполнить команду и начать трассировку.

Результат будет примерно следующим:

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

Ниже приведены примеры некоторых параметров для этих команд:

Команда

Описание

-h [количество-прыжков]

Укажите максимальное количество прыжков при поиске узла. По умолчанию это значение равно 30.

-n

Исключает доменные имена из результатов Traceroute.

-q [количество пакетов]

По умолчанию команда Tracert отправляет 3 пакета. Этот параметр помогает изменить это число.

-j [список-узлов]    

Позволяет выбрать маршрут по списку узлов (только для IPv4).

-w wait_time

Устанавливает максимальное время ожидание каждого ответа в миллисекундах.

-p

Задаёт порт назначения для запроса.

-f

Указывает, с какого TTL начать. По умолчанию значение равно 1.

-4

Задаёт принудительное использование IPv4.

-6

Задаёт принудительное использование IPv6.

Утилита Traceroute (Linux и macOS)

Общий синтаксис:

traceroute [опции] <доменное имя или IP-адрес> 
  1. Зажмите сочетание клавиш Ctrl + Shift + T, чтобы открыть терминал.
  2. Введите команду traceroute, затем добавьте доменное имя или IP-адрес цели. Например:
traceroute www.sweb.ru
  1. Для запуска процесса нажмите Enter.

Результат будет примерно следующим:

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

Ниже приведены примеры некоторых параметров для этих команд:
 

Параметр

Описание

-I

Команда Traceroute в Linux по умолчанию отправляет пакеты-пробы с использованием протокола UDP. Эта опция позволяет изменить их на пакеты ICMP.

-n

Исключает имена устройств из результатов Traceroute.

-q [количество-пакетов]

По умолчанию Traceroute отправляет три пакета. Вы можете изменить это количество, используя эту опцию и указав количество пакетов.

-d

Включает отладку на уровне сокетов.

-m [максимальное-TTL]

Задаёт максимальное количество прыжков для процесса трассировки. По умолчанию максимальное значение TTL составляет 30.

-w [время-ожидания]

Задаёт максимальное время ожидания для каждого ответа.

-r

Позволяет обойти обычные таблицы маршрутизации и направить IP-пакеты непосредственно хосту в прямо подключенной сети.

-p

Устанавливает порт назначения для запроса. По умолчанию используется порт 33434.

-g [адрес-шлюза]

Направляет исходящие пакеты на указанный шлюз, используя опцию маршрутизации по исходному IP.

-e

Показывает расширения ICMP (если они есть).

- А

Выполняет поиск пути AS в реестрах маршрутизации и выдаёт результаты непосредственно после соответствующих адресов. 

-M [название-модуля]

Использует указанный модуль (встроенный или внешний) для трассировки.

Как расшифровать выводы Tracert и Traceroute

После запуска команды Tracert или Traceroute, система отобразит результаты в форме строк. Отчёт может выглядеть по-разному в зависимости от используемой операционной системы, но обычно он содержит аналогичные данные.

Стандартный отчёт по результатам Tracert или Traceroute состоит из нескольких строк, где каждая строка соответствует одному прыжку (хопу) пакета к конечному хосту. Эти строки поделены на столбцы, в которых отображена различная информация. 

Рассмотрим подробнее, что представляет собой каждый столбец и какие детали он содержит:

Номер прыжка

Имя хоста/IP-адрес

RTT1

RTT2

RTT3 

8

188.128.126.238

24.793 ms

24.411 ms

24.406 ms

11

77.222.41.15

57.337 ms

42.930 ms

53.653 ms

18

216.58.211.228

56.633 ms

60.929 ms

53.285 ms

Где:

  • Номер прыжка указывает, какой по счёту сделанный прыжок (хоп).
  • Имя хоста/IP-адрес указывает IP-адрес или имя хоста устройства на определённом переходе.
  • RTT – это время приёма-передачи. Благодаря ему можно узнать, сколько времени потребовалось каждому пакету, чтобы достичь определённого IP-адреса и вернуться обратно.

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

В отчёте это отображается следующим образом:

Номер прыжка

RTT1

RTT2

RTT3 

20

*  

*  

*

Превышен интервал ожидания для запроса.

Таким образом, утилиты Traceroute и Traceroute – это полезные инструменты для диагностики сети. Они могут отличаться в зависимости от операционной системы – Linux и macOS используют Traceroute, в то время как Windows работает с Tracert. Однако общая функциональность и представленная информация в отчёте схожи. 

Надеемся, что эта статья помогла вам понять, что это за команды и как сделать трассировку.