Если локальная таблица маршрутизации в порядке, проблема может существовать на некотором удалении от локального узла. Удаленные проблемы маршрутизации могут приводить к получению сообщений об ошибке «no answer», а также «network unreachable».
При этом сообщение «network unreachable» не всегда указывает на проблему маршрутизации, оно может означать, что удаленная сеть недостижима из-за физического разрыва между локальным узлом и удаленным пунктом назначения. Обнаружить такие проблемы позволяет программа trace route.
trace route отслеживает маршрут пакетов UDP, адресованных локальным узлом удаленному узлу. Программа отображает имя (по возможности) и адрес IP каждого шлюза на пути к удаленному узлу.
trace route при трассировке пакетов использует два механизма: небольшое TTL (время жизни) пакета и некорректные номера портов, trace route посылает пакеты UDP с небольшими значениями TTL, чтобы обнаружить промежуточные шлюзы. Значения TTL начинаются с 1 и увеличиваются на 1 для каждой группы из трех отправленных пакетов UDP. Получив пакет, шлюз уменьшает TTL. Если TTL к этому моменту имеет значение 0, пакет не пересылается дальше, а источнику пакета возвращается ICMP-сообщение «Time Exceeded» (время доставки превышено), traceroute выводит одну строку для каждого шлюза, от которого получено сообщение «Time Exceeded». На рис. 13.2 представлена одна строка вывода и описаны значения ее полей.
Рис. 13.2. Вывод traceroute
Конечный узел, получив пакет от traceroute, возвращает ICMP-сообщение «Unreachable Port» (порт не доступен). Это происходит потому, что traceroute преднамеренно использует недействительный номер порта (33434), чтобы вызвать такую ошибку. Получив сообщение «Unreachable Port», traceroute делает вывод, что пункт назначения достигнут и прекращает трассировку.
Итак, traceroute обладает способностью получать список шлюзов, обозначая транзитные участки, вплоть до момента, когда удаленный узел получит адресованный ему пакет. На рис. 13.3 представлена передача пакетов трассировки узлу, расположенному в трех транзитных участках от локального. Ниже приведен вывод traceroute для www.internic.net, инициированный системой Solaris в сети Comcast, traceroute посылает три пакета для каждого значения TTL. Если для пакета не получен ответ, traceroute выводит звездочку (*). Если ответ получен, traceroute отображает имя и адрес ответившего шлюза, а также время отклика для пакета в миллисекундах.
Рис. 13.3. Передача пакетов traceroute
$ traceroute www.internic.net traceroute to www.internic.net (207.151.159.3), 30 hops max, 40 byte packets 1 ani (192.168.0.1) 1.712 ms 1.40 ms 1.34 ms 2 10.81.130.1 (10.81.130.1) 52.01 ms 34.38 ms 118.97 ms 3 bb1-fe1-0.mtgmry1.md.home.net (24.11.248.1) 13.30 ms 100.92 ms 31.99 ms 4 c2-se9-0-10.washdc1.home.net (24.7.73.25) 118.63 ms 94.92 ms 121.10 ms 5 24.7.71.6 (24.7.71.6) 127.63 ms 26.29 ms 132.07 ms 6 p4-6-1-0.r00.plalca01.us.bb.verio.net (129.250.2.245) 186.02 ms 164.81 ms 156.44 ms 7 p16-0-0-0.r06.plalca01.us.bb.verio.net (129.250.2.161) 86 59 ms 130.28 ms 121.09 ms 8 p16-0-0-0.r04.snjsca03.us.bb.verio.net (129.250.3.162) 84.594 ms 117.42 ms 174.59 ms 9 p16-3-0-0.r01.snjsca03.us.bb.verio.net (129.250.2.63) 123.87 ms 91.39 ms 119.79 ms 10 p4-2-0-0.r00.lsanca01.us.bb.verio.net (129.250.2.26) 142.38 ms 166.11 ms 95.32 ms 11 ge-0-0-0.a02.lsanca02.us.ra.verio.net (129.250.29.116) 137.59 ms 98.28 ms 256.11 ms 12 uscisi-pl.customer.ni.net (209.189.66.66) 98.64 ms 125.03 ms 231.11 ms 13 207.151.151.2 (207.151.151.2) 192.06 ms 164.52 ms 103.30 ms 14 icann-IWC.interworld.net (206.124.230.170) 113.33 ms 145.72 ms 107.39 ms 15 * host159-3.icann.org (207.151.159.3) 99.67 ms 178.72 ms
Приведенная трассировка показывает, что маршрут включает 15 промежуточных шлюзов, пакеты проходят по маршруту и время отклика для пакетов, адресованных данным узлом системе www.internic.net, составляет около 140 миллисекунд.
Вариации и ошибки в реализациях ICMP на шлюзах различных типов, а также непредсказуемая природа сетевого пути, по которому может путешествовать дейтаграмма, могут приводить к странным результатам. По этой причине не слишком заостряйтесь на выводе traceroute. Самые важные вопросы, на которые призваны ответить результаты работы программы:
- Добрался ли пакет до пункта назначения?
- Если нет, где он был остановлен?
Следующий листинг содержит другую трассировку пути к www.internic.net. На этот раз пакет до InterNIC не добрался.
$ traceroute www.internic.net traceroute to www.internic.net (207.151.159.3), 30 hops max, 40 byte packets 1 ani (192.168.0.1) 1.712 ms 1.40 ms 1.34 ms 2 10.81.130.1 (10.81.130.1) 52.01 ms 34.38 ms 118.97 ms 3 bb1-fe1-0.mtgmry1.md.home.net (24.11.248.1) 13.30 ms 100.92 ms 31.99 ms 4 c2-se9-0-10.washdc1.home.net (24.7.73.25) 118.63 ms 94.92 ms 121.10 ms 5 24.7.71.6 (24.7.71.6) 127.63 ms 26.29 ms 132.07 ms 6 p4-6-1-0.r00.plalca01.us.bb.verio.net (129.250.2.245) 186.02 ms 164.81 ms 156.44 ms 7 p16-0-0-0.r06.plalca01.us.bb.verio.net (129.250.2.161) 86.59 ms 130.28 ms 121.09 ms 8 p16-0-0-0.r04.snjsca03.us.bb.verio.net (129.250.3.162) 84.594 ms 117.42 ms 174.59 ms 9 * * * 10 * * * . . . 29 * * * 30 * * *
Если traceroute не удается доставить пакеты удаленной системе, трассировка сходит на нет, и вывод в этом случае содержит тройки звездочек вместо сведениях о шлюзах между транзитными участками, вплоть до тридцатого. Свяжитесь с администратором удаленного узла, а также с администратором последнего шлюза из вывода traceroute. Объясните им, в чем проблема, возможно, они смогут оказать помощь. В нашем примере последним шлюзом из ответивших на пакет стал pl6-0-0-0.r04.snjsca03.us.bb.verio.net. Следовательно, мы свяжемся с администратором этой системы и администратором www.internic.net.