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 і 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 bihus.info
traceroute to bihus.info (104.21.61.166), 64 hops max
  1   192.168.0.1       0,272 ms  0,194 ms  0,172 ms 
  2   192.168.89.1      0,352 ms  0,219 ms  0,226 ms 
  3   192.168.88.1      0,510 ms  0,375 ms  0,379 ms 
  4   91.224.24.108     2,632 ms  3,695 ms  2,949 ms 
  5   82.193.99.246     3,300 ms  3,893 ms  4,020 ms 
  6   185.1.50.68       4,224 ms  3,507 ms  3,823 ms 
  7   104.21.61.166     2,929 ms  2,857 ms  3,123 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

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