Traceroute

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Графічний інтерфейс до traceroute у gnome-nettool в Ubuntu 6.10

Traceroute — службова комп'ютерна програма, призначена для визначення маршрутів слідування даних у мережах TCP/IP. Traceroute може використовувати різні протоколи передачі даних залежно від операційної системи пристрою. Такими протоколами можуть бути UDP, TCP, ICMP або GRE. Комп'ютери зі встановленою операційною системою Windows використовують ICMP-протокол, при цьому операційні системи Linux і маршрутизатори Cisco — протокол UDP.

Traceroute входить до складу більшості сучасних мережевих операційних систем. У системах Microsoft Windows ця програма має назву tracert, а в системах GNU/Linux, Cisco IOS[en] і Mac OS — traceroute.

Розглянемо приклад роботи програми в операційній системі Windows. Програма tracert виконує відправлення даних вказаному вузлу мережі, при цьому відображаючи відомості про всі проміжні маршрутизатори, через які пройшли дані на шляху до цільового вузла. В разі проблем при доставці даних до якого-небудь вузла програма дозволяє визначити, на якій саме ділянці мережі виникли несправності. Необхідно зазначити, що програма працює лише в напрямку від джерела пакетів і є вельми грубим інструментом для виявлення несправностей у мережі. В силу особливостей роботи протоколів маршрутизації у мережі Інтернет, зворотні маршруті часто не збігаються з прямими, причому це справедливо для всіх проміжних вузлів у трейсі. Тому ICMP відповідь від кожного проміжного вузла може йти своїм власним маршрутом, загубитися чи прийти з більшою затримкою, хоча в дійсності з пакетами, які адресовані кінцевому вузлу, цього не відбувається. Крім того, на проміжних маршрутизаторах часто стоїть обмеження кількості відповідей ICMP на одиницю часу, що спричинює появу хибних утрат.

Принцип роботи traceroute[ред. | ред. код]

Для визначення проміжних маршрутизаторів traceroute надсилає цільовому вузлу серію ICMP-пакетів (за замовчуванням три пакети), із кожним кроком збільшуючи значення поля TTL («час життя») на 1. Це поле зазвичай вказує максимальну кількість маршрутизаторів, яка може бути пройдена пакетом. Перша серія пакетів надсилається з , і тому перший же маршрутизатор повертає назад ICMP-повідомлення «time exceeded in transit», яке показує неможливість доставки даних. Traceroute фіксує адресу маршрутизатора, а також час між відправленням пакета й отриманням відповіді (ці відомості виводяться на монітор комп'ютера). Потім traceroute повторює відправлення серії пакетів, але вже з , що змушує перший маршрутизатор зменшити TTL пакетів на одиницю та скерувати їх до другого маршрутизатора. Другий маршрутизатор, отримавши пакети з , так само повертає «time exceeded in transit».

Процес повторюється доти, доки пакет не досягне цільового вузла. При отриманні відповіді від цього вузла процес трасування вважається завершеним.

На кінцевому хості IP-датаграма з не відкидається та не викликає ICMP-повідомлення типу термін вичерпано, а повинна бути віддана застосунку. Досягнення пункту призначення визначається наступним чином: датаграми, що надсилаються traceroute, містять UDP-пакет із номером порту на адресованому хості, що наперед не використовується. Номер порту дорівнюватиме 33434 + (максимальна кількість транзитних ділянок до вузла) — 1. У пункті призначення UDP-модуль, отримуючи подобні датаграми, повертає ICMP-повідомлення про помилку «порт недоступний». Таким чином, аби дізнатися про завершення роботи, програмі traceroute достатньо виявити надходження ICMP-повідомлення про помилку цього типу.

Приклад у Windows[ред. | ред. код]

Запуск програми відбувається з командного рядка. Для цього користувач повинен увійти до нього. Для операційних систем родини Windows існують декілька способів запуску командного рядка:

  1. Пуск — Виконати — В полі «Відкрити» написати «cmd» і натиснути ОК.
  2. Поєднання клавіш Win (кнопка з логотипом Windows) + R (повинні бути натиснені одночасно) — В полі «Відкрити» написати «cmd» і натиснути ОК.
  3. Пуск — Всі програми (чи просто «Програми», залежить від версії операційної системи) — Стандартні — Командний рядок.

У вікні, що відкрилося, написати:tracert example.net, де tracert — звернення до програми, а example.net[en] — будь-який домен або IPv4-адреса.

C:\Users\Administrator>tracert uk.wikipedia.org

Трасування маршруту до uk.wikipedia.org [91.198.174.192]
з максимальною кількістю стрибків 30:

  1    <1 мс    <1 мс    <1 мс  192.168.0.1
  2    <1 мс    <1 мс    <1 мс  10.39.0.1
  3     1 ms     1 ms     1 ms  193.0.240.161
  4     3 ms     3 ms     3 ms  10ge12-17.core1.kbp1.he.net [216.66.88.137]
  5    21 ms    24 ms    23 ms  10ge1-12.core1.waw1.he.net [72.52.92.33]
  6    25 ms    25 ms    24 ms  100ge12-2.core1.ber1.he.net [184.105.65.26]
  7    43 ms    38 ms    58 ms  100ge3-1.core1.ams1.he.net [184.105.65.17]
  8    39 ms    39 ms    40 ms  ae2.cr2-esams.wikimedia.org [80.249.209.176]
  9    39 ms    39 ms    39 ms  text-lb.esams.wikimedia.org [91.198.174.192]

Трасування завершено.

Приклад у Linux[ред. | ред. код]

В UNIX/Linux системах існують режими, в яких запуск програми можливий лише від імені суперкористувача Root (адміністратора). До числа цих режимів відноситься важливий режим трасування за допомогою ICMP (ключ -I).

В решті випадків traceroute може працювати від імені звичайного рядового користувача. При цьому, параметри за замовчуванням відрізняються від дистрибутиву до дистрибутиву, хоча в довідці традиційно пишеться ключ -U (UDP) як такий. В окремих дистрибутивах, заснованих на RedHat, фактично як замовчування використовується -I, тому в разі, якщо команда з наступного приклада виведе повідомлення про нестачу прав, спробуйте явно вказати ключ -U.

  [user@localhost ~]$ traceroute www.ru
  traceroute to www.ru (194.87.0.50), 30 hops max, 38 byte packets 
   1    mygateway.ar7                       (192.168.1.1)       0.777 ms    0.664 ms   0.506 ms
   2    L0.ghsdr04                          (213.227.224.91)   15.661 ms   15.867 ms  31.426 ms
   3    213.227.224.1                       (213.227.224.1)    16.797 ms   18.221 ms  16.756 ms
   4    dg                                  (213.186.216.161)  53.068 ms   39.163 ms  38.283 ms
   5    br13                                (213.186.193.43)   40.156 ms   39.768 ms  42.803 ms
   6    aggr                                (62.221.40.169)    37.884 ms   38.712 ms  37.207 ms
   7    edge-3GE-216dot1q.kiev.ucomline.net (213.130.30.182)   39.723 ms   38.039 ms  41.261 ms
   8    ae0-202.RT771-001.kiv.retn.net      (81.222.15.1)      40.029 ms   37.088 ms  40.039 ms
   9    ae0-3.RT502-001.msk.retn.net        (81.222.15.1)     128.932 ms  122.043 ms 121.612 ms
  10    GW-Demos.retn.net                   (81.222.8.46)     120.023 ms  121.135 ms 119.493 ms
  11    iki-1-vl10.demos.net                (194.87.0.83)     119.074 ms  119.784 ms 123.607 ms
  12    www.ru                              (194.87.0.50)     120.358 ms  122.545 ms 119.399 ms

Проблеми з фаєрволами[ред. | ред. код]

Існує хибне переконання, що traceroute, як і ping, працює лише за допомогою протоколу ICMP. Через це адміністратори-початківці, дозволивши у фаєрволі лише протокол ICMP, отримують робочий ping і неробочий traceroute. Для виправлення такої ситуації необхідно додатково дозволити у фаєрволі UDP-пакети на порти понад 33434, які traceroute використовує щоб спровокувати ICMP відповіді від хоста (у деяких джерелах зазначено, що достатньо вказати діапазон портів від 33434 до 33534).

Щоб обійти цю проблему можна змустити traceroute посилати ICMP пакети, додавши ключ -I.[1]

Альтернативи та доповнення до traceroute[ред. | ред. код]

Отримана за допомогою tracemap графічна карта трасування шляху на кореневі сервери DNS з хоста, розташованого в Києві
  • tracepath — схожа на traceroute програма, але може будувати асиметричні траси та має деякі інші відмінності.
  • MTR — інтерактивна програма, здатна постійно виводити оновлену статистику по трасі.
  • tracemap — програма, що дозволяє виконувати трасування шляху на декілька хостів одразу та представити отримані дані у вигляді графічної карти.
  • tcptraceroute (tracetcp) — аналогічна traceroute програма, але призначена для діагностики TCP-з'єднань; замість UDP-пакетів використовує TCP-пакети відкриття з'єднання (SYN|ACK) зі вказаним сервісом (за замовчуванням — веб-сервер, порт 80) хоста, що цікавить; внаслідок отримується інформація про час проходження даного виду TCP-пакетів через маршрутизатори й інформація про доступність сервісу на хості, що цікавить, або, в разі проблем із доставкою пакетів — бачимо, в якому місці траси вони виникли.

Див. також[ред. | ред. код]

Зноски[ред. | ред. код]

  1. traceroute gives only stars + how to fix unix.stackexchange.com

Посилання[ред. | ред. код]