Команда traceroute

Команда traceroute может применяться для тестирования, администрирования и оценки значений параметров сети.

Команда ping позволяет убедиться, что удаленная сеть IP достижима. Однако с ее помощью нельзя обнаружить и устранить неполадки. Рассмотрим следующий пример:

  • Если маршрут от системы к целевому хосту содержит много транзитных узлов (например, шлюзов и маршрутизаторов), то неполадка может возникнуть на любом из этих узлов. В этом случае нужно выяснить, на каком этапе теряется пакет.
  • Если пакет не удается доставить, команда ping не сообщает причину ошибки.
Команда traceroute позволяет узнать, где в данный момент находится пакет, и почему его нельзя доставить по заданному маршруту. Если пакет будет передаваться через маршрутизаторы и каналы связи, принадлежащие другим организациям, то вам вряд ли удастся проверить состояние этих маршрутизаторов с помощью команды telnet. В этом случае можно воспользоваться командами traceroute и ping.
Прим.: В основном команда traceroute предназначена для локализации неполадок. Поскольку команда traceroute создает дополнительную нагрузку на сеть, не применяйте ее во время обычной работы и не включайте в сценарии.

Примеры удачного выполнения команды traceroute

Команда traceroute применяет протокол UDP и функцию создания отчета об ошибках, предусмотренную в ICMP. Эта команда трижды отправляет пакет UDP каждому шлюзу или маршрутизатору, входящему в маршрут. Первый пакет отправляется ближайшему шлюзу. Второй пакет отправляется следующему за ним транзитному узлу и т.д. Последний пакет отправляется целевой системе. В выводе команды указывается имя шлюза, IP-адрес шлюза и время оборота трех пакетов, отправленных шлюзу. Ниже приведен пример вывода команды:
# traceroute aix1
получение исходного узла для aix1
исходный узел 10.53.155.187
traceroute до aix1.austin.ibm.com (10.53.153.120) от 10.53.155.187 (10.53.155.187), не более 30 участков
MTU исходящих пакетов = 1500
 1  10.111.154.1 (10.111.154.1)  5 мс  3 мс  2 мс
 2  aix1 (10.53.153.120)  5 мс  5 мс  5 мс
Ниже приведен другой пример:
# traceroute aix1
получение исходного узла для aix1
исходный узел 10.53.155.187
traceroute до aix1.austin.ibm.com (10.53.153.120) от 10.53.155.187 (10.53.155.187), не более 30 участков
MTU исходящих пакетов = 1500
 1  10.111.154.1 (10.111.154.1)  10 мс  2 мс  3 мс
 2  aix1 (10.53.153.120)  8 мс  7 мс  5 мс

Команда была повторно вызвана после того, как истек срок действия записи ARP. Обратите внимание, что время оборота первого пакета, отправляемого шлюзу или целевому хосту, больше, чем у остальных пакетов. Это связано с тем, что дополнительное время затрачивается на получение информации от протокола ARP. Если маршрут проходит через сеть с коммутацией каналов (WAN), то при передаче первого пакета дополнительное время будет затрачено на установление соединения. В результате может произойти тайм-аут. Тайм-аут по умолчанию составляет 3 секунды. Его можно изменить с помощью опции -w.

Первые 10 мс затрачены системой (9.53.155.187) на получение адреса шлюза 9.111.154.1 с помощью протокола ARP. Следующие 8 мс затрачены шлюзом на получение адреса целевого хоста (wave). В данном случае применяется DNS, поэтому перед отправкой каждого пакета команда traceroute обращается к серверу DNS.

Примеры неполадок, возникающих при выполнении команды traceroute

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

Неполадки возникающие при передаче пакета через шлюз (маршрутизатор)

В приведенном ниже примере пакеты отправляются из системы 9.53.155.187. Маршрут к мосту проходит через две системы, играющие роль маршрутизаторов. Во второй из этих систем функция маршрутизации была временно выключена (опции ipforwarding было присвоено значение 0 с помощью команды no). Рассмотрим приведенный ниже пример:
# traceroute lamar
trying to get source for lamar
source should be 9.53.155.187
traceroute to lamar.austin.ibm.com (9.3.200.141) from 9.53.155.187 (9.53.155.187), 30 hops max
MTU исходящих пакетов = 1500
 1  9.111.154.1 (9.111.154.1)  12 ms  3 ms  2 ms
 2  9.111.154.1 (9.111.154.1)  3 ms !H *  6 ms !H

Все сообщения об ошибках ICMP, за исключением Истекло время и Порт недостижим, выдаются в следующем формате:

!H
Хост недостижим
!N
Сеть недостижима
!P
Протокол недоступен
!S
Ошибка в исходном маршруте
!F
Требуется фрагментация

Неполадки, вызванные целевой системой

Если в течение 3 секунд от целевой системы не будет получен ответ, то для всех запросов возникает тайм-аут, и в выводе команды указывается звездочка (*).
# traceroute chuys
trying to get source for chuys
source should be 9.53.155.187
traceroute to chuys.austin.ibm.com (9.53.155.188) from 9.53.155.187 (9.53.155.187), 30 hops max
MTU исходящих пакетов = 1500
 1  * * *
 2  * * *
 3  * * *
^C#

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

Число целевых узлов

Ниже приведен другой пример вывода команды:
# traceroute mysystem.university.edu (129.2.130.22)
traceroute to mysystem.university.edu (129.2.130.22), 30 hops max
1 helios.ee.lbl.gov (129.3.112.1) 0 ms 0 ms 0 ms
2 lilac-dmc.university.edu (129.2.216.1) 39 ms 19 ms 39 ms
3 lilac-dmc.university.edu (129.2.215.1) 19 ms 39 ms 19 ms
4 ccngw-ner-cc.university.edu (129.2.135.23) 39 ms 40 ms 19 ms
5 ccn-nerif35.university.edu (129.2.167.35) 39 ms 39 ms 39 ms
6 csgw/university.edu (129.2.132.254) 39 ms 59 ms 39 ms
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 rip.university.EDU (129.2.130.22) 59 ms! 39 ms! 39 ms!