Программа трассировки Traceroute

Алексей Комолов (С.-Петербург)

Traceroute — это служебная компьютерная программа, предназначенная для определения маршрутов следования данных в сетях TCP/IP. Она может использовать разные протоколы передачи данных в зависимости от операционной системы устройства. Такими протоколами могут быть UDP, TCP, ICMP или GRE. Компьютеры с операционной системой Windows используют ICMP-протокол, при этом маршрутизаторы Cisco — протокол UDP.

Traceroute входит в поставку большинства современных сетевых операционных систем, но под разными названиями. Например, в системах Windows эта программа носит название tracert, а в системах GNU/Linux, Cisco IOS и MacOS — traceroute.

В ОС  Windows tracert выполняет отправку данных указанному узлу сети, при этом отображая сведения обо всех промежуточных маршрутизаторах, через которые прошли данные на пути к целевому узлу.

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

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

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

Для определения промежуточных маршрутизаторов traceroute отправляет целевому узлу серию ICMP-пакетов (по-умолчанию это 3 пакета), с каждым шагом увеличивая значение поля TTL (“время жизни”) на единицу. Это поле TTL обычно указывает максимальное количество маршрутизаторов, которое может быть пройдено пакетом. Первая серия пакетов отправляется с TTL, равным 1, и поэтому первый же маршрутизатор возвращает обратно ICMP-сообщение: “time exceeded in transit”, указывающее на невозможность доставки данных.

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

Затем traceroute повторяет отправку серии пакетов, но уже с TTL, равным 2, что заставляет первый маршрутизатор уменьшить TTL пакетов на единицу и направить их ко второму маршрутизатору.

Второй маршрутизатор, получив пакеты с TTL=1, также возвращает “time exceeded in transit”.

Процесс повторяется до тех пор, пока пакет не достигнет целевого узла.

При получении ответа от этого узла процесс трассировки считается завершенным.

На последнем хосте IP-дейтаграмма с TTL=1 не отбрасывается и не вызывает ICMP-сообщения типа “срок истек”, а отдана приложению.

Достижение пункта назначения определяется следующим образом: отсылаемые traceroute дейтаграммы содержат UDP-пакет с заведомо неиспользуемым номером порта на адресуемом хосте. Номер порта будет равен 33434 (что является максимальным количеством транзитных участков до узла) +/- 1. В пункте назначения UDP-модуль, получая подобные дейтаграммы, возвращает ICMP-сообщения об ошибке “порт недоступен”. Таким образом, чтобы узнать о завершении работы, программе traceroute достаточно обнаружить, что поступило ICMP-сообщение об ошибке этого типа.

Пример для ОС Windows

Запуск программы производится из командной строки. Для этого идите в меню Пуск > Выполнить > В открывшемся окне введите команду

cmd

и жмите ОК.

Либо, как вариант: Пуск > Программы > Стандартные > Командная строка.

Откроется окно командной строки, в котором напишите:

tracert deneg.net

где tracert — обращение к программе, а deneg.net — любой домен или IPv4-адрес. Например, выглядеть может так:

C:Documents and SettingsAdministrator>tracert ru.wikipedia.org

Трассировка маршрута к rr.esams.wikimedia.org [91.198.174.2] с максимальным числом прыжков 30:

1     1 ms    &lt1 ms    &lt1 ms  vpn4.kras.gldn [10.10.1.14]

2     2 ms    &lt1 ms    $lt1 ms  C7604-BRAS4-FTTB.ranetka.ru [80.255.150.41]

3     1 ms     1 ms     4 ms  C76-External.ranetka.ru [80.255.128.162]

4     1 ms    &lt1 ms    $lt1 ms  pe-l.Krasnoyarsk.gldn.net [195.239.173.37]

5    79 ms    79 ms    98 ms  cat01.Stockholm.gldn.net [194.186.157.62]

6   131 ms   131 ms   132 ms  ams-ix.2ge-2-1.br1-knams.wikimedia.org [195.69.145.176]

7   131 ms   131 ms   131 ms  te-8-2.csw1-esams.wikimedia.org [91.198.174.254]

8   133 ms   134 ms   133 ms  rr.esams.wikimedia.org [91.198.174.2]

Трассировка завершена.

Пример в Linux

В ОС Unix/Linux существуют режимы, в которых запуск программы возможен только от имени суперпользователя root (он же — администратор). К числу этих режимов относится важный режим трассировки с помощью ICMP (ключ -I).

Во всех остальных случаях traceroute может работать от имени обычного рядового пользователя. При этом параметры по умолчанию различаются от дистрибутива к дистрибутиву, хотя в справке традиционно пишется ключ -U (UDP) в качестве такового. В отдельных RedHat-based дистрибутивах фактически в качестве умолчания используется -I, поэтому в случае, если команда из следующего примера выдаст сообщение о недостатке прав, попробуйте явно указать ключ -U.

Часто встречается мнение, что traceroute, как и ping, работает только по протоколу ICMP. В связи с этим начинающие администраторы, разрешив в файерволе протокол ICMP, получают рабочий ping и нерабочий traceroute. Для исправления такой ситуации необходимо дополнительно разрешить в файерволе UDP-пакеты на порты выше 33434 (в некоторых источниках указано, что достаточно указать диапазон портов от 33434 до 33534).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *