Предназначение Traceroute и Tracert: кратко и понятно

Сергій Бондаренко

Сегодня мы расскажем об известной служебной утилите, незаменимом инструменте системного администратора. Обычно это приложение служит для определения маршрута следования пакетов данных в сетях TCP/IP. Также эту утилиту используют для определения связности между сетями или для оценки скорости соединения в сети.

В зависимости от того, какую операционную систему вы используете, реализация Traceroute может задействовать для своей работы разные протоколы: UDP, TCP, ICMP или GRE. Так, для платформы Windows маршрут следования пакетов исследуется посредством протокола ICMP, а на платформе Linux или в маршрутизаторах Cisco используется протокол UDP.

Содержание:
1. Предназначение Traceroute и Tracert
2. Механизм работы трассировки сети
3. Формат командной строки
4. Пример трассировки
5. Запуск в Linux
6. Проблема с файрволами
7. Альтернативные инструменты
Заключение

1. Предназначение Traceroute и Tracert

Для мониторинга пакетной передачи в GNU/Linux, Cisco и macOS используется команда Traceroute, а в Windows — Tracert. Пакеты данных, которые передаются в сеть, проходят не сразу от получателя к пользователю, а идут через узлы — ноды. Поскольку эти хосты не являются целевыми, их еще называют транзитными узлами.

Предположим, вы запустили на своем компьютере браузер и ввели адрес веб-ресурса, содержимое которого собираетесь просмотреть. Браузер посылает запрос, который идет от маршрутизатора к маршрутизатору и так до тех пор, пока он не достигнет узла назначения. На сленге системных администраторов каждый маршрутизатор или любой промежуточный пункт назначения называется «хопом» от слова hop — прыжок.

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

В дополнение к этому на промежуточных узлах стоит ограничение по количеству ответов на ICMP-запросы. По этой причине Tracert является неточным инструментом для выявления неполадок сети.

Между утилитами Tracert и Traceroute есть небольшое отличие и в механизме трассировки: Tracert выполняет трассировку без указания порта у хоста назначения, а Traceroute наоборот — использует порт.

2. Механизм работы трассировки сети

Каждый посылаемый пакет сопровождается параметром TTL Time to live — время жизни IP-пакетов. Это восьмиразрядное поле IP-заголовка, определяющее максимальное число шагов при трассировке. Благодаря этому параметру пакет не ходит по сети бесконечно в случае каких-то коллизий в маршрутизации подобные ошибки иногда случаются в реальной жизни, для самих пакетов подобная ситуация зацикливания исключена на уровне дизайна. Максимальное значение TTL=255.

В начале трассировки Tracert посылает первый запрос с параметром TTL = 1. Первый хоп, получивший сообщение, не является целевым и уменьшает величину TTL на 1. Поскольку TTL при этом обнуляется, Tracert возвращает источнику ICMP-сообщение в котором содержится информация о причинах отбрасывания пакета.

Далее Tracert посылает новый запрос с TTL = 2 и первый маршрутизатор в этот раз снова уменьшает на единицу параметр TTL у транзитного пакета, после чего передает данные второму хопу. Тот анализирует поступившие данные, также уменьшает TTL на один и, если получил ноль, возвращает источнику ICMP-сообщение.

Далее Tracert увеличивает TTL до трех и процедура трассировки повторяется. Данная цепочка действий выполняется до тех пор, пока данные не попадут к целевому хосту. Этот узел вернет ICMP с сообщением «Echo Reply», что будет означать, что трассировка успешно завершена.

В отличие от Tracert, Traceroute посылает на хост назначения сразу несколько пакетов UDP с TTL = 1, 2 и так далее, пока данные не будут получены. Каждый пакет содержит данные о порте отправителя и порте получателя. По умолчанию порт получателя — закрытый (34434), поэтому когда обратно приходит ответ с сообщением о недоступности порта, утилита понимает, что процесс анализа маршрута передаваемых данных завершен.

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

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

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

По умолчанию анализ маршрута пакетов выполняется с допустимым числом хопов 30. Это означает, что посылаемые пакеты не достигнут хоста назначения, если число хопов больше тридцати. Если необходимо выполнить анализ передачи пакетов к, скажем, google.com на четыре хопа, введите в командной строке tracert -h 4 google.com.

3. Формат командной строки

Общий формат вызова утилиты выглядит следующим образом:

tracert [-d] [-h глубина трассировки] [-j перечень узлов] [-w таймаут] [-R] [-S адрес источника эхо-запроса] [-4] [-6] конечное_Имя

Параметры командной строки:

  • -d — не использовать разрешение в имена узлов;
  • -h — максимальное число хопов;
  • -j — произвольный выбор маршрута по перечню узлов (для протокола IPv4);
  • -w — время ожидания отклика (миллисекунды);
  • -R — трассировка пути (для протокола IPv6);
  • -S — использовать указанный адрес источника (для протокола IPv6);
  • -4 — программное задействование протокола IPv4;
  • -6 — программное задействование протокола IPv6.

4. Пример трассировки

Рассмотрим пример трассировки. Для оценки доступности хоста, мы можем запустить утилиту для обмена пинг-пакетами и посмотреть какая будет задержка при соединении с удаленным хостом. При значении TTL = 1 нам ответит первый хост, при TTL = 2 мы получим отклик от второго сервера и так далее.

В целом, результат, который мы получим, будет кумулятивным по всем узлам маршрута и задержка в 200-300 миллисекунд нам ни о чем не скажет. Медлительность передачи данных может объясняться проблемами с каким-то одним маршрутизатором, определить который можно при помощи более подробной трассировки.

Предположим, мы исследуем маршрут следования пакетов до сервера facebook.com. Вводим в командной строке tracert facebook.com.

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

5. Запуск в Linux

Чтобы запустить режим трассировки через ICMP в UNIX/Linux, следует использовать ключ -I в режиме суперпользователя root. В остальных случаях запуск трассировки можно выполнять от имени любого пользователя.

Наиболее важные аргументы для управления трассировкой в Linux:

  • -F — запретить фрагментацию;
  • -d — разрешить дебаггинг;
  • -f — указать первое значение TTL с которого начинается трассировка;
  • -g — назначить шлюз;
  • -i — пересылать пакет через указанный интерфейс;
  • -m — максимальное число узлов, через которые пройдет пакет;
  • -q — число пакетов трассировки три по умолчанию;
  • -n — не идентифицировать доменные имена;
  • -p — использование порта;
  • -w — настройка таймаута при ожидании ответа от ноды;
  • -r — задействовать альтернативный роутер вместо указанного в таблице маршрутизации;
  • -z — указать минимальное значение времени между пакетами;
  • -U — задействовать UDP с увеличением номера порта;
  • -UL — задействовать UDPLITE;
  • -D — поддерживать DCCP;
  • --mtu — задать размер пакета.

6. Проблема с файрволами

Traceroute выполняет запросы не только по протоколу ICMP. Однако не имеющие достаточного опыта системные администраторы часто изменяют дефолтные настройки файервола включая разрешение протокола ICMP, после чего получают рабочий ping с нерабочей функцией Traceroute. Правильнее было бы дополнительно прописать разрешения в файерволе для транзита UDP-пакетов на порты с диапазоном от 33434 до 33534.

7. Альтернативные инструменты

tracepath — утилита, которая отслеживает путь передачи пакета от источника к пункту назначения, может использоваться как альтернатива traceroute для IPv6. Программа использует стандартный UDP-порт или какой-то случайный порт. Утилита похожа на traceroute, только не требует прав суперпользователя и не имеет дополнительных опций запуска.

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

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

Трассировка сети может быть реализована и виде публичного веб-сервиса. Например, с помощью онлайновой трассировки на сервисе https://ping-admin.ru/free_traceroute/ можно проверять задержки отклика хостов для различных географических мест — стран и городов. Данный сервис может опрашивать хосты протоколами UDP, ICMP и TCP.

Заключение

Теперь, когда вы разобрались с принципами трассировки и изучили возможности Tracert и Traceroute, вы можете изучить свою сеть и выявить неисправности ее узлов. Механизм анализирования пути сетевых пакетов очень прост и может быть задействован на любой операционной системе, включая Android и iOS.

Для закрепления рекомендуем посмотреть это тематическое видео:

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

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

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024