Как использовать команду traceroute в Linux
Что нужно знать
- Единственный параметр, который вы должны включить в команду traceroute, - это имя хоста или IP-адрес места назначения.
- Запустите зонды с TTL, равным единице, и увеличивайте на единицу, пока вы не получите ICMP «порт недоступен» или не достигнете максимального значения попыток.
Эта статья содержит информацию о трассировке, применимую к компьютерам Linux, и включает объяснения переключателей команд, а также информацию о том, как интерпретировать результаты. Traceroute - это используется иначе в Windows.
Как работает Traceroute
Команда traceroute отображает путь, который проходит пакет информации от источника до места назначения. Одно из применений traceroute - обнаружение потери данных в сети, что может означать отказ узла.
Поскольку каждый переход в записи отражает новый сервер или маршрутизатор между исходным ПК и предполагаемым target, просмотр результатов сканирования traceroute определяет медленные точки, которые могут отрицательно повлиять на вашу сеть движение.
Устранение неполадок с помощью Traceroute
Оценка конкретного маршрута, по которому идет сетевой трафик (или поиск неверного шлюза, который отбрасывает ваши пакеты), представляет собой несколько задач по устранению неполадок. Traceroute использует протокол IP время жить для запроса ответа ICMP TIME_EXCEEDED от каждого шлюза на пути к хосту назначения.
Единственный параметр, который вы должны включить при выполнении команды traceroute, - это имя хоста или IP-адрес пункта назначения.
Синтаксис и переключатели Traceroute
Traceroute следует следующему общему синтаксису:
traceroute [-dFInrvx] [-f first_ttl] [-g шлюз] [-i iface] [-m max_ttl] [-p порт] [-q nqueries] [-s src_addr] [-t tos] [-w waittime] [-z pausemsecs] хост [пакет]
Вы можете изменить производительность или вывод команды, указав один или несколько дополнительных переключателей.
Командные переключатели Traceroute | |
---|---|
Выключатель | Объяснение |
-f | Установите начальное время жизни, используемое в первом исходящем пробном пакете. |
-F | Установите бит "не фрагментировать". |
-d | Включите отладку на уровне сокета. |
-грамм | Укажите свободный шлюз исходного маршрута (максимум 8). |
-я | Укажите сетевой интерфейс для получения IP-адреса источника для исходящих пробных пакетов. Обычно это полезно только на многосетевом хосте. (См. -s flag для другого способа сделать это.) |
-Я | Используйте ICMP ECHO вместо Дейтаграммы UDP. |
-м | Установите максимальное время жизни (максимальное количество переходов), используемое в исходящих пробных пакетах. По умолчанию установлено 30 переходов (то же значение по умолчанию используется для TCP-соединений). |
-n | Печатайте адреса переходов в числовом виде, а не символически и численно (сохраняет поиск адресов сервера имен для каждого шлюза, найденного на пути). |
-п | Установите базовый номер порта UDP, используемый в зондах (по умолчанию 33434). Traceroute надеется, что на портах UDP ничего не прослушивается база к база + nhops - 1 на целевом хосте (поэтому будет возвращено сообщение ICMP PORT_UNREACHABLE для прекращения трассировки маршрута). Если что-то прослушивает порт в диапазоне по умолчанию, эту опцию можно использовать для выбора неиспользуемого диапазона портов. |
-р | Обойти обычные таблицы маршрутизации и отправить напрямую на хост в присоединенной сети. Если хост не находится в сети с прямым подключением, возвращается ошибка. Эту опцию можно использовать для проверки связи с локальным хостом через интерфейс, который не имеет маршрута через него (например, после того, как интерфейс был удален направлен(8C)). |
-s | Используйте следующий IP-адрес (который обычно указывается как IP-номер, а не имя хоста) в качестве адреса источника в исходящих пробных пакетах. На многосетевых хостах (с более чем одним IP-адресом) эту опцию можно использовать, чтобы указать адрес источника, отличный от IP-адреса интерфейса, на который отправляется зондовый пакет. Если IP-адрес не является одним из адресов интерфейса этого аппарата, возвращается ошибка и ничего не отправляется. (См. -я flag для другого способа сделать это.) |
-t | Установить тип сервиса в пробных пакетах до следующего значения (по умолчанию ноль). Значение должно быть десятичным целым числом в диапазоне от 0 до 255. Эту опцию можно использовать, чтобы увидеть, приводят ли разные типы обслуживания к разным путям. (Если вы не используете 4.4bsd, это может быть академическим, поскольку обычные сетевые службы, такие как telnet и ftp не позволяйте вам контролировать TOS.) Не все значения TOS являются законными или значимыми - см. спецификацию IP для определения. Вероятно, полезные значения:-t16'(низкая задержка) и `-t8'(высокая пропускная способность). |
-v | Подробный вывод. Перечислены полученные пакеты ICMP, кроме TIME_EXCEEDED и UNREACHABLE. |
-w | Установите время (в секундах) ожидания ответа на зонд (по умолчанию 5 секунд). |
-Икс | Переключить IP контрольные суммы. Обычно это не позволяет traceroute вычислять контрольные суммы IP. В некоторых случаях операционная система может перезаписывать части исходящего пакета, но не пересчитывать контрольную сумму; таким образом, в некоторых случаях по умолчанию контрольные суммы не вычисляются и используются -Икс заставляет их вычисляться. Обратите внимание, что контрольные суммы обычно требуются для последнего перехода при использовании зондов ICMP ECHO (-Я), поэтому они всегда рассчитываются при использовании ICMP. |
-z | Установите время (в миллисекундах) для паузы между тестами (по умолчанию 0). Некоторые системы, такие как Solaris и маршрутизаторы от Cisco, ограничивают скорость сообщений icmp. Хорошее значение для этого - 500 (например, 1/2 секунды). |
Интерпретация результатов
Traceroute очерчивает путь, по которому IP-пакет следует к Интернет-узлу, путем запуска тестовых пакетов UDP с небольшим TTL и последующего прослушивания ответа ICMP «время истекло» от шлюза. Запустите зонды с TTL, равным единице, и увеличивайте на единицу, пока не получите ICMP «порт недоступен» (что означает пакет прибыл в пункт назначения) или достигнет максимального значения попыток, которое по умолчанию составляет 30 переходов и может быть изменено с -м флаг.
При выполнении traceroute он отправляет три зонда при каждой настройке TTL, а затем выводит на консоль строку, показывающую TTL, адрес шлюза и время приема-передачи каждого зонда. Если ответы на зондирование поступают от разных шлюзов, печатается адрес каждой отвечающей системы. Если traceroute не получает ответа в течение пяти секунд (изменено с помощью -w flag), для этого зонда выводится звездочка.
Чтобы предотвратить перегрузку хоста назначения при обработке пробных пакетов UDP, traceroute устанавливает для порта назначения значение, которое устройство вряд ли будет использовать. Если сеть или служба в пункте назначения использует этот порт, измените значение с помощью -п флаг.
Примеры результатов Traceroute
Пример использования и вывода будет возвращать результаты, аналогичные этому примеру:
[як 71]% traceroute nis.nsf.net.
traceroute на nis.nsf.net (35.1.1.48), максимум 30 переходов, пакет 38 байт
1 helios.ee.lbl.gov (128.3.112.1) 19 мс 19 мс 0 мс
2 сиреневый-dmc. Беркли. EDU (128.32.216.1) 39 мс 39 мс 19 мс
3 сиреневый-dmc. Беркли. EDU (128.32.216.1) 39 мс 39 мс 19 мс
4 ccngw-ner-cc. Беркли. EDU (128.32.136.23) 39 мс 40 мс 39 мс
5 ccn-nerif22, Беркли. EDU (128.32.168.22) 39 мс 39 мс 39 мс
6 128.32.197.4 (128.32.197.4) 40 мс 59 мс 59 мс
7 131.119.2.5 (131.119.2.5) 59 мс 59 мс 59 мс
8 129.140.70.13 (129.140.70.13) 99 мс 99 мс 80 мс
9 129.140.71.6 (129.140.71.6) 139 мс 239 мс 319 мс
10 129.140.81.7 (129.140.81.7) 220 мс 199 мс 199 мс
11 nic.merit.edu (35.1.1.48) 239 мс 239 мс 239 мс
Вторая и третья строки совпадают. Этот результат относится к ошибочному ядру в системе второго перехода - lbl-csam.arpa - которое пересылает пакеты с нулевым TTL (ошибка в распределенной версии 4.3 BSD). Вы должны угадать, по какому пути пакеты проходят через страну, поскольку NSFNet (129.140) не обеспечивает преобразование адреса в имя для своих NSS.
Пример тихого шлюза
Более интересный пример:
[як 72]% traceroute allspice.lcs.mit.edu.
traceroute на allspice.lcs.mit.edu (18.26.0.115), не более 30 переходов
1 helios.ee.lbl.gov (128.3.112.1) 0 мс 0 мс 0 мс
2 сиреневый-dmc. Беркли. EDU (128.32.216.1) 19 мс 19 мс 19 мс
3 сиреневый-dmc. Беркли. EDU (128.32.216.1) 39 мс 19 мс 19 мс
4 ccngw-ner-cc. Беркли. EDU (128.32.136.23) 19 мс 39 мс 39 мс
5 ccn-nerif22, Беркли. EDU (128.32.168.22) 20 мс 39 мс 39 мс
6 128.32.197.4 (128.32.197.4) 59 мс 119 мс 39 мс
7 131.119.2.5 (131.119.2.5) 59 мс 59 мс 39 мс
8 129.140.70.13 (129.140.70.13) 80 мс 79 мс 99 мс
9 129.140.71.6 (129.140.71.6) 139 мс 139 мс 159 мс
10 129.140.81.7 (129.140.81.7) 199 мс 180 мс 300 мс
11 129.140.72.17 (129.140.72.17) 300 мс 239 мс 239 мс
12 * * *
13 128.121.54.72 (128.121.54.72) 259 мс 499 мс 279 мс
14 * * *
15 * * *
16 * * *
17 * * *
18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 мс 279 мс 279 мс
Обратите внимание, что шлюзы на расстоянии 12, 14, 15, 16 и 17 переходов либо не отправляют ICMP-сообщения «время превышено», либо отправляют их со слишком маленьким TTL, чтобы добраться до нас. Строки с 14 по 17 запускают код шлюза MIT C, который не отправляет сообщения «время истекло».
Тихий шлюз 12 в приведенном выше примере может быть результатом ошибки в сетевом коде 4. [23] BSD и его производные: машины, работающие с кодом 4.3 и ранее, отправляют сообщение о недоступности, используя любой TTL, оставшийся в исходная дейтаграмма. Для шлюзов оставшийся TTL равен нулю, ICMP "время превышено" гарантированно не вернется к нам.
Пример бесшумного шлюза целевой системы
Поведение этой ошибки немного интереснее, когда она появляется в целевой системе:
1 helios.ee.lbl.gov (128.3.112.1) 0 мс 0 мс 0 мс
2 сиреневый-dmc. Беркли. EDU (128.32.216.1) 39 мс 19 мс 39 мс
3 сиреневый-dmc. Беркли. EDU (128.32.216.1) 19 мс 39 мс 19 мс
4 ccngw-ner-cc. Беркли. EDU (128.32.136.23) 39 мс 40 мс 19 мс
5 ccn-nerif35, Беркли. EDU (128.32.168.35) 39 мс 39 мс 39 мс
6 шт. Беркли. EDU (128.32.133.254) 39 мс 59 мс 39 мс
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 рип. Беркли. EDU (128.32.131.22) 59 мс! 39 мс! 39 мс!
Обратите внимание, что существует 12 «шлюзов» (13 - конечный пункт назначения), и последняя половина из них отсутствует. На самом деле происходит то, что сервер с именем рвать (Sun-3, работающий под управлением Sun OS 3.5) использует TTL из нашей поступающей датаграммы в качестве TTL в своем ответе ICMP. Таким образом, время ответа на обратном пути истечет (без уведомления, отправленного никому, поскольку ICMP не отправляются для ICMP) пока мы не исследуем TTL, который как минимум в два раза превышает длину пути - другими словами, разрыв действительно составляет всего семь прыжков прочь.
Ответ, который возвращается с TTL, равным 1, указывает на наличие этой проблемы. Traceroute печатает! по истечении времени, если TTL меньше или равен 1. Поскольку поставщики поставляют много устаревшего (DEC Ultrix, Sun 3.x) или нестандартного (HPUX) программного обеспечения, ожидайте частого появления этой проблемы и позаботьтесь о выборе целевого хоста для ваших зондов.
Другие возможные аннотации после указанного времени: !ЧАС, ! N, или !П (хост, сеть или протокол недоступны), ! S (исходный маршрут не прошел), ! F- (требуется фрагментация - отображается значение RFC1191 Path MTU Discovery), !ИКС (общение запрещено в административном порядке), ! V (нарушение приоритета хоста), ! C (действует ограничение приоритета), или ! (Код недоступности ICMP). Эти коды определены в RFC1812, который заменяет RFC1716. Если почти все пробы приводят к недостижимому хосту, traceroute прекращает работу и завершает работу.
Эта программа предназначена для использования при тестировании, измерении и управлении сетью. Его следует использовать в первую очередь для ручной локализации неисправностей. Из-за нагрузки, которую он может вызвать в сети, неразумно использовать traceroute во время обычных операций или из автоматических сценариев.