Вывод маршрута передачи пакетов хосту в сети
traceroute [-DdFlInPrvx] [-f первое_ttl] [-g шлюз] [-i интерфейс] [-m макс_ttl] [-p порт] [-q число_запросов] [-s исходный_адрес] [-t тип_обслуживания] [-w время_ожидания] хост [размер_пакета]
5
.ЗОСРВ «Нейтрино»
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 можно выбрать другой порт.
Для этой утилиты в полномочиях пользователя необходимо установить бит 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), следует быть готовым к частому возникновению подобной проблемы или тщательно выбирать целевой хост для тестирования. Также после значения времени могут указываться следующие аннотации:
При нормальной работе не должно возникать ни аннотации !S, ни !F: если одна из них выводится, соответствующий шлюз неисправен. Если почти все пакеты зондирования сталкиваются с каким-либо вариантом недостижимости, traceroute прекращает попытки и завершает работу.
Утилита traceroute, предназначенная для тестирования, измерения параметров сети и управления ею, должна использоваться прежде всего для в целях локализации неисправностей вручную. С учетом нагрузки на сеть, которая может возникнуть во время ее работы, не следует использовать утилиту traceroute во время работы в нормальном режиме или в автоматических сценариях.
Базовые подсистемы ЗОСРВ «Нейтрино», NetBSD
Предыдущий раздел: Утилиты