traceroute

Вывод маршрута передачи пакетов хосту в сети

Синтаксис:

traceroute [-DdFlInPrvx] [-f первое_ttl] [-g шлюз] [-i интерфейс] [-m макс_ttl] [-p порт] [-q число_запросов] [-s исходный_адрес] [-t тип_обслуживания] [-w время_ожидания] хост [размер_пакета]

Опции:

-D
Выполнить дамп данных пакета в стандартный поток ошибок перед передачей.
-d
Включить отладку на уровне сокетов.
-F
Установить бит "не фрагментировать".
-f первое_ttl
Установить начальное предельное время существования (time-to-live; TTL), используемое в первом исходящем тестовом пакете.
-g шлюз
Указать шлюз для маршрутизации через заданные узлы (не более 8).
-I
Использовать ICMP ECHO вместо дейтаграмм UDP.
-i интерфейс
Указать сетевой интерфейс для получения IP-адресов источника для исходящих тестовых пакетов. Обычно используется только при работе с серверами, присоединенными к нескольким физическим линиям данных. Альтернативный способ см. в опции -s.
-l
("эль") Просмотр значения предельного времени существования (TTL) возвращенного пакета. Эту опцию целесообразно использовать для проверки асимметричной маршрутизации.
-m макс_ttl
Установить максимальное время существования (максимальное число переходов), используемое в исходящих тестовых пакетах. Значение по умолчанию – 30 переходов (то же значение по умолчанию используется для соединений TCP).
-n
Выводить адреса переходов только в числовой форме. По умолчанию адреса выводятся и в символьной, и в числовой форме. Если указана эта опция, то для каждого шлюза, встреченного на пути, сохраняется запрос к серверу имен для преобразования адреса в имя.
-P
Установить бит "не фрагментировать" и использовать максимальную длину передаваемого пакета (Maximum Transmission Unit; MTU) для следующего перехода при каждом получении ошибки "need fragmentation" (требуется фрагментация) для тестирования маршрута MTU.
-p порт
Базовый номер порта UDP для использования в тестовых пакетах (значение по умолчанию – 33434). Для утилиты traceroute предполагается, что на портах UDP с номерами с базовый_порт по базовый_порт + число_переходов - 1 на хосте-получателе прослушивание не выполняется (т.е. для завершения трассировки маршрута возвращается сообщение ICMP PORT_UNREACHABLE). Если на порте из стандартного диапазона выполняется прослушивание, с помощью этой опции можно выбрать неиспользуемый диапазон портов.
-q число_запросов
Число запросов тестирования в ttl до достижения значения число_запросов (по умолчанию – три запроса).
-r
Игнорировать стандартные таблицы маршрутизации и выполнить передачу непосредственно хосту в сети, с которой установлено прямое соединение. Если хост расположен вне сети, с которой установлено прямое соединение, возвращается ошибка. Эту опцию можно использовать для отправки ping-запросов на локальный хост через интерфейс, не включенный в маршрут (например, после сброса интерфейса утилитой routed).
-s адрес_источника
IP-адрес (вводится в виде числового IP-адреса, не имени хоста), используемый в качестве адреса источника в исходящих тестовых пакетах. При наличии для хоста более одного IP-адреса с помощью этой опции можно принудительно задать адрес источника, отличный от IP-адреса интерфейса, через который передается тестовый пакет. Если указанный IP-адрес не является адресом одного из интерфейсов данного компьютера, возвращается ошибка, и пакеты не передаются.
-t тип_обслуживания
Тип обслуживания (type-of-service; TOS), используемый для тестовых пакетов (значение по умолчанию – ноль). В качестве значения должно указываться десятичное целое число в диапазоне от 0 до 255. С помощью этой опции можно проверить, проходят ли пакеты с разным типом обслуживания по разным маршрутам.

Не все значения типа обслуживания допустимы или имеют смысл. Особенно удобны значения -t 16 (низкая задержка) и -t 8 (высокая пропускная способность).
-v
Вывести расширенную информацию. Выводятся полученные пакеты ICMP, кроме TIME_EXCEEDED и UNREACHABLE.
-w время_ожидания
Время ожидания ответа на сообщение зондирования в секундах; значение по умолчанию – 5.
-x
Переключить вычисление контрольных сумм. Как правило, при этом traceroute не вычисляет контрольные суммы. В некоторых случаях операционная система может перезаписывать части исходящего пакета, но не вычислять новую контрольную сумму (поэтому в некоторых случаях по умолчанию контрольные суммы не вычисляются, и для их вычисления должна использоваться опция -x). Обратите внимание, что контрольные суммы обычно требуются для последнего перехода в случае использования тестовых пакетов ICMP ECHO (-I).
хост
Имя или IP-адрес хоста-получателя.
размер_пакета
Длина тестовой дейтаграммы; по умолчанию – 40 байт.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

Интернет – масштабная и сложная совокупность сетевого оборудования, объединенного шлюзами. Трассировка маршрута, по которому проходят пакеты, либо поиск шлюза, отклоняющего пакеты, может быть связана с затруднениями. Утилита traceroute использует поле "предельное время существования" протокола IP для получения ответа ICMP TIME_EXCEEDED от каждого шлюза по пути к хосту.

Эта утилита пытается отследить маршрут, которым следует пакет IP на пути к хосту, путем отправки тестовых пакетов UDP с небольшим временем существования и ожидания ответа ICMP TIME_EXCEEDED от шлюза. Тестовые пакеты создаются со значением предельного времени существования, равным единице, которое увеличивается на единицу до тех пор, пока не будет получен ответ ICMP PORT_UNREACHABLE, который означает достижение хоста, либо пока не будет достигнуто максимальное значение. По умолчанию максимальное количество составляет 30 переходов; его можно изменить с помощью опции -m.

Для каждого настроенного значения предельного времени существования отправляются три тестовых пакета (это количество можно изменить опцией -q), и выводится строка со значением предельного времени существования, адреса шлюза и значением времени на передачу и прием каждого тестового пакета. Если ответы поступают от разных шлюзов, выводится адрес каждой ответившей системы. Если в течение 5-секундного интервала таймаута (который можно изменить опцией -w) ответ не поступает, для этого пакета зондирования выводится символ звездочки (*).

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


Note: Для этой утилиты в полномочиях пользователя необходимо установить бит Setuid ("set user ID" (установить идентификатор пользователя)). В случае использования утилит mkefs, mketfs или mkifs на хосте Windows для добавления этой утилиты в образ необходимо задать атрибут perms для явного определения полномочий, а также атрибуты uid и gid для корректной настройки принадлежности.

Пример использования и вывода:

% traceroute nis.nsf.net. traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 56 byte packet 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms 8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms 11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms

Обратите внимание на идентичность строк 2 и 3. Это связано с некорректной работой ядра в системе, соответствующей второму переходу (lbl-csam.arpa), которая осуществляет перенаправление пакетов с нулевым значением TTL (ошибка в распространяемой версии BSD 4.3). Обратите внимание, что географический путь, проходимый пакетами, приходится угадывать, поскольку сеть NSFNet (129.140) не предоставляет преобразование адресов в имена для NSS в этой сети.

Следующий пример более интересный:

% traceroute allspice.lcs.mit.edu. traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms 8 129.140.70.13 (129.140.70.13) 80 ms 79 ms 99 ms 9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms 10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms 11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms 12 * * * 13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms 14 * * * 15 * * * 16 * * * 17 * * * 18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 ms 279 ms 279 ms

Шлюзы, отстоящие от исходной системы на 12, 14, 15, 16 и 17 переходов либо не отправляют сообщения ICMP "time exceeded" (превышение времени), либо отправляют сообщения со значениями TTL, которые слишком малы для достижения исходной системы.

Шлюзы с 14 по 17 работают под управлением MIT C Gateway, который не передает сообщения "time exceeded" (превышение времени). Отсутствие данных от шлюза 12 может быть связано с ошибкой в коде работы с сетью в BSD 4.[23] (или производных системах): в версиях 4.3 и ранее сообщение о недоступности передается с остаточным значением TTL из исходной дейтаграммы. Поскольку для шлюзов остаточное значение TTL равно нулю, сообщение об истечении времени ICMP гарантированно не достигает исходной системы. Поведение, связанное с этой ошибкой, представляет несколько больший интерес, если с ним приходится столкнуться на целевой системе:

1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms 6 csgw.Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms 7 * * * 8 * * * 9 * * * 10 * * * 11 * * * 12 * * * 13 rip.Berkeley.EDU (128.32.131.22) 59 ms ! 39 ms ! 39 ms !

Обратите внимание, что имеется 12 "шлюзов" (13 соответствует конечному хосту-получателю), и отсутствует точно вторая половина из них. Фактически в данном случае rip (Sun-3 под управлением Sun OS3.5) использует значение TTL из поступившей дейтаграммы как значение TTL для ответа ICMP. Таким образом, время для ответа на обратном пути истекает (уведомление не отправляется ни одному из узлов, поскольку для ICMP не передаются сообщения ICMP); для успешного прохождения ответа требуется значение TTL как минимум в два раза больше фактической длины пути. На самом деле расстояние до rip составляет всего 7 переходов. На существование этой проблемы указывает ответ, который возвращается со значением TTL, равным 1.

Утилита traceroute выводит символ ! после значения времени, если TTL меньше или равно 1. Поскольку поставщиками выпускается значительное количество наименований устаревшего (DEC Ultrix, Sun3.x) или нестандартного программного обеспечения (HPUX), следует быть готовым к частому возникновению подобной проблемы или тщательно выбирать целевой хост для тестирования. Также после значения времени могут указываться следующие аннотации:

!F
Требуется фрагментация.
!H
Хост недостижим.
!N
Сеть недостижима.
!
ICMP недостижим, код N.
!P
Протокол недостижим.
!S
Исходный маршрут неуспешен.
!X
Связь запрещена администратором.

При нормальной работе не должно возникать ни аннотации !S, ни !F: если одна из них выводится, соответствующий шлюз неисправен. Если почти все пакеты зондирования сталкиваются с каким-либо вариантом недостижимости, traceroute прекращает попытки и завершает работу.

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

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», NetBSD

Тематические ссылки:

netstat, ping




Предыдущий раздел: Утилиты