Traceroute
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
надсилає цільовому вузлу серію 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 існують декілька способів запуску командного рядка:
- Пуск — Виконати — В полі «Відкрити» написати «cmd» і натиснути ОК.
- Поєднання клавіш Win (кнопка з логотипом Windows) + R (повинні бути натиснені одночасно) — В полі «Відкрити» написати «cmd» і натиснути ОК.
- Пуск — Всі програми (чи просто «Програми», залежить від версії операційної системи) — Стандартні — Командний рядок.
У вікні, що відкрилося, написати: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]
Трасування завершено.
В 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]
- tracepath — схожа на traceroute програма, але може будувати асиметричні траси та має деякі інші відмінності.
- MTR — інтерактивна програма, здатна постійно виводити оновлену статистику по трасі.
- tracemap — програма, що дозволяє виконувати трасування шляху на декілька хостів одразу та представити отримані дані у вигляді графічної карти.
- tcptraceroute (tracetcp) — аналогічна traceroute програма, але призначена для діагностики TCP-з'єднань; замість UDP-пакетів використовує TCP-пакети відкриття з'єднання (SYN|ACK) зі вказаним сервісом (за замовчуванням — вебсервер, порт 80) хоста, що цікавить; внаслідок отримується інформація про час проходження даного виду TCP-пакетів через маршрутизатори й інформація про доступність сервісу на хості, що цікавить, або, в разі проблем із доставкою пакетів — бачимо, в якому місці траси вони виникли.
- tracemap [Архівовано 12 березня 2018 у Wayback Machine.] — програма, що дозволяє виконувати трасування шляху на декілька хостів одразу та надати отримані дані у вигляді графічної карти.
- traceroute.org [Архівовано 2 липня 2006 у Wayback Machine.] — трасування з різних точок світу онлайн.
- trace.die.net [Архівовано 8 березня 2018 у Wayback Machine.]
- Онлайн-трасування одразу з декількох точок [Архівовано 28 липня 2013 у Wayback Machine.] — Точки розташовані в Голландії, Гонконгу, США, Хорватії, Україні, Малайзії, Росії, Індії та Туреччині.
- Перевірка «Traceroute» з різних частин світу [Архівовано 12 березня 2018 у Wayback Machine.] — з можливістю вибору протоколу перевірки (ICMP, UDP, TCP).