Яким портом йде трасування. TRACERT – трасування маршруту до заданого вузла у командному рядку Windows. Приклади використання TRACERT

    Утиліта трасування маршруту до заданого вузла TRACERT.EXEє одним із найчастіше використовуваних інструментів мережної діагностики. Основне її призначення - отримати ланцюжок вузлів, через які проходить IP-пакет, адресований кінцевому вузлу, ім'я або IP-адреса якого задається параметром командного рядка.

Формат командного рядка:

tracert [-d] [-h максЧисло] [-j список Вузлів] [-w таймаут] [-R] [-S адресаджерела] [-4] [-6] кінцевеІм'я

Параметри командного рядка:

-d- не використовувати дозвіл на імена вузлів.

-h максЧисло- максимальна кількість стрибків під час пошуку вузла.

-j список Вузлів- вільний вибір маршруту за списком вузлів (лише IPv4).

-w таймаут- Таймають кожної відповіді в мілісекундах.

-R- трасування колії (тільки IPv6).

-S адресаджерела- використовувати вказану адресу джерела (лише IPv6).

-4 - Примусове використання IPv4.

-6 - Примусове використання IPv6.

В основі трасування закладено метод аналізу відповідей при послідовному відправленні ICMP-пакетів на вказану адресу з 1 полем TTL, що збільшується. ("Час життя" - Time To Live). Насправді це поле не має відношення до часу, а є лічильником кількості можливих переходів при передачі пакету, що маршрутизується. Кожен маршрутизатор, отримавши пакет, віднімає з цього поля, що зберігається в заголовку пакета, одиницю та перевіряє отримане значення лічильника TTL. Якщо значення дорівнює нулю, такий пакет відкидається і відправнику надсилається ICMP-повідомлення про перевищення часу життя (повідомлення "Time Exceeded", значення 0x11 у заголовку ICMP).

Якщо б не було передбачено включення поля TTL в IP пакетах, то при помилках у маршрутах, могла б виникнути ситуація, коли пакет буде циркулювати в мережі, що пересилається маршрутизаторами по колу.

    При виконанні команди tracert.exe спочатку виконується відправка ICMP пакета з полем TTL у заголовку рівним 1 і перший у ланцюжку маршрутизатор (зазвичай це основний шлюз із налаштувань мережного підключення) віднявши одиницю з TTL отримує його нульове значення і повідомляє про перевищення часу життя. Таким чином, утиліта TRACERT.EXE отримує IP-адресу першого маршрутизатора, що бере участь у доставці пакетів кінцевого вузла. Ця послідовність повторюється тричі, тому в рядку результату, який формується tracert.exe, після номера переходу відображаються три значення часу відгуку:
1     1 ms     1 – номер переходу (1 – перший маршрутизатор)
1 ms 192.168.1.1 - його адреса (або ім'я)

    Потім процедура повторюється, але TTL встановлюється рівним 2 - перший маршрутизатор його зменшить до 1 і відправить наступному в ланцюжку, який після віднімання 1 обнулитиме TTL і повідомить про перевищення часу життя. Утиліта TRACERT.EXE отримає другу IP-адресу вузла, що бере участь у доставці пакета одержувачу та його час відповіді. Процес трасування буде продовжуватися доти, доки не буде досягнуто кінцевого вузол, ім'я або адреса якого задані як параметр командного рядка, наприклад, tracert yandex.ru, або до виявлення несправності, яка дозволяє доставити пакет. За умовчанням, утиліта TRACERT.EXE використовує лічильник максимальної кількості переходів рівний 30, що має бути достатньо досягнення будь-якого вузла планети. При необхідності інше значення лічильника можна задати за допомогою параметра -h

Приклад результатів виконання tracert google.com

tracert google.com- трасування маршруту до сайту google.com

Результат:


Трасування маршруту до google.com з максимальною кількістю стрибків 30:
1 1 ms 2 498 ms 444 ms 302 ms ppp83-237-220-1.pppoe.mtu-net.ru
3 * * * .
4 282 ms * * a197-crs-1-be1-53.msk.stream-internet.net
5 518 ms 344 ms 382 ms ss-crs-1-be5.msk.stream-internet.net
6 462 ms 440 ms 335 ms m9-cr01-po3.msk.stream-internet.net
7 323 ms 389 ms 339 ms bor-cr01-po4.spb.stream-internet.net
8 475 ms 302 ms 420 ms anc-cr01-po3.ff.stream-internet.net
9 334 ms 408 ms 348 ms 74.125.50.57
10 451 ms 368 ms 524 ms 209.85.255.178
11 329 ms 542 ms 451 ms 209.85.250.140
12 616 ms 480 ms 645 ms 209.85.248.81
13 656 ms 549 ms 422 ms 216.239.43.192
14 378 ms 560 ms 534 ms 216.239.43.113
15 511 ms 566 ms 546 ms 209.85.251.9
16 543 ms 682 ms 523 ms 72.14.232.213
17 468 ms 557 ms 486 ms 209.85.253.141
18 593 ms 589 ms 575 ms yx-in-f100.google.com

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

    У результатах трасування можуть бути рядки, де замість адреси вузла відображається зірочка (вузол номер 3 у прикладі). Це не обов'язково є ознакою несправності маршрутизатора, і найчастіше, говорить про те, що налаштування даного вузла забороняють відправку ICMP-повідомлень з міркувань безпеки та зменшення навантаження на канал у разі деяких різновидів DDoS-атак. Наприклад, подібні установки використовуються в мережах Microsoft . Сервери корпорації не відповідають на ping та не дозволяють виконати трасування маршруту до них.

Приклади використання TRACERT

tracert google.com- виконати трасування маршруту до вузла google.com.

tracert 8.8.8.8- виконати трасування маршруту до вузла з IP-адресою 8.8.8.8

tracert -d yandex.ru- виконати трасування маршруту до вузла yandex.ruбез дозволу IP-адрес в імена вузлів. Трасування у такому режимі виконується швидше.

tracert -d -6 ipv6.google.com- Виконати трасування з використанням протоколу IPv6.

Приклад результатів трасування за допомогою протоколу IPv6:

trace to ipv6.google.com (2a00:1450:4013:c00::71), 30 hops max, 40 byte packets 1 2a02:348:82::1 (2a02:348:82::1) 8.087 ms 8.0 8.086 ms 2 te0-22.cr1.nkf.as49685.net (2001:4cb8:40b:1::1d01) 2.143 ms 2.129 ms 2.103 ms 3 amsix-router.google.com (8:01:7 5169:1) 1.379 ms 1.415 ms 1.422 ms 4 (2001:4860::1:0:87ab) 1.437 ms (2001:4860::1:0:87aa) 2.157 ms (2001:4 ) 1.408 ms 5 (2001:4860::8:0:87b0) 1.494 ms 1.469 ms (2001:4860::8:0:87b2) 8.350 ms 6 (2001:4860::8:0 :5:3 ms 4.748 ms 7 (2001:4860::2:0:8651) 4.653 ms 6.994 ms (2001:4860::2:0:8652) 13.926 ms 8 ee-in-x71.1e10:1 :c00::71) 4.732 ms 4.733 ms 4.783 ms

Переклад мій.

Якщо ви працюєте мережним адміністратором, системним адміністратором або в будь-якій експлуатаційній групі, ви, можливо, чули про інструмент під назвою TRACEROUTE. Це дуже зручний інструмент, доступний за умовчанням у багатьох операційних системах.

Мережеві та системні адміністратори використовують цей інструмент у щоденній роботі. Це, по суті, зручний засіб діагностики мережі. Існують три основні завдання інструменту traceroute. Ці завдання, що виконуються traceroute'ом, дають розуміння помилки вашої мережі.

  1. Повний шлях, який проходить пакет.
  2. Імена та ідентифікацію маршрутизаторів та пристроїв на шляху
  3. Мережеву затримку або, точніше сказати, час, потрібний для того, щоб отримати та надіслати дані всім пристроям на шляху

Це інструмент, який використовується, щоб перевірити шлях, який проходять ваші дані, щоб досягти мети, без дійсної відправки даних

Як я вже писав, завжди добре розуміти, як працює якийсь інструмент. Тому що це не той інструмент, який допоможе вам зрозуміти та усунути проблему. Але це інструмент, який завжди дасть вам уявлення про проблему. Як використовувати команду завжди можна знайти в онлайні або навіть у посібнику та інформаційних сторінках по Linux.

У цій статті я поясню роботу Traceroute та типи інструментів Traceroute та їх відмінності. Ми також розглянемо різні параметри, доступні для команди traceroute у Linux

Спочатку основне

Кожен пакет, який ви надсилаєте до інтернету, має поле, назване TTL. TTL означає час життя (time to live). Хоча воно і називається часом життя, насправді це не час у секундах, а зовсім інша історія.

TTL не змінюється ні кількістю секунд, ні кількістю хопів. Це максимальна кількістьхопів, яке пакет може пройти через мережу до того, як буде знищено.

Хопи - це не що інше як комп'ютери, маршрутизатори або інші пристрої, що входять між джерелом та пунктом призначення

Що б сталося, якби взагалі не було TTL? Якби не було TTL, IP-пакет перетікав би безкінечно від одного маршрутизатора до іншого і далі, і далі, безкінечно шукаючи призначення. Значення TTL встановлюється відправником всередині IP-пакета (людина, яка використовує систему або відправляє пакет, не помічає цих речей, що відбуваються за лаштунками, але це автоматично обробляється операційною системою)

Якщо призначення не знайдено після проходження занадто великої кількості проміжних маршрутизаторів (хопів), і значення TTL стає рівним нулю (що означає, що немає подальшого проходження) маршрутизатор, що отримує, знищує пакет і інформує початкового відправника.

Початкового відправника інформують, що TTL закінчився, і він не може передати пакет далі.

Давайте скажемо, що мені потрібно досягти адреси 10.1.136.23, і мій TTL - 30 хопів, що означає, що я можу пройти максимум 30 хопів, щоб досягти мети, перш ніж пакет буде знищено.

Але як маршрутизатори шляхом визначають, що досягнуто ліміт TTL? Кожен маршрутизатор між джерелом і призначенням продовжує зменшувати значення TTL перед відправкою наступному маршрутизатору. Що означає, що якщо у мене TTL за замовчуванням дорівнює 30, мій перший маршрутизатор зменшить його до 29 і надішле наступного маршрутизатора на шляху.

Отримуючий маршрутизатор робить його 28 і відправляє наступному і т.д. Якщо маршрутизатор отримує пакет з TTL, що дорівнює одиниці (це означає, що вже немає подальших переміщень або пересилання), пакет знищується. Але маршрутизатор, який знищує пакет, повідомляє початкового відправника про те, що TTL value has exceeded! (Час життя пакету минув)

Інформація, відправлена ​​маршрутизатором, який отримав пакет з TTL рівним одиниці, називається " ICMP TTL exceeded messagesЗрозуміло, в інтернеті, коли ви відправляєте щось одержувачу, одержувач дізнається адресу відправника.

Отже, коли повідомлення ICMP TTL exceeded надсилається маршрутизатором, початковий відправник дізнається адресу маршрутизатора.

Traceroute використовує повідомлення TTL exceeded щоб виявити маршрутизатори, які зустрічаються на шляху до мети (оскільки ці повідомлення, що надсилаються маршрутизатором, містять його адресу).<>/p>

Але як traceroute використовує повідомлення “TTL exceeded”, щоб дізнатися, які маршрутизатори/хопи між ними?

Ви маєте думати, /pщо повідомлення "TTL exceeded" відправляються тільки маршрутизатором, який отримує пакет з TTL 1. Це вірно, кожен маршрутизатор між вами та одержувачем не буде надсилати повідомлення TTL exceeded. Тоді як ви знайдете адреси всіх маршрутизаторів/хопів між вами та призначенням? Адже основна мета traceroute - ідентифікувати хопи між вами та призначенням.

Але ви можете використовувати поведінку повідомлень TTL exceeded маршрутизаторів/хопів на шляху, цілеспрямовано відправляючи пакети з TTL, рівним 1

Див. зразкову схему всього процесу на схемі, де відправник використовує traceroute до одного із серверів у віддаленому місці


Давайте подивимося на те, що проходить за лаштунками. Коли я запускаю traceroute -n 8.8.8.8, що робить мій комп'ютер? - надсилає UDP-пакет. (Так, UDP. Не хвилюйтеся, ми обговоримо це докладно). UDP-пакет містить таке:

  • Моя адреса відправника
  • Адреса призначення (8.8.8.8)
  • І номер порту призначення, який є невірним. Це означає, що traceroute відправляє пакет в UDP-порт, в діапазоні від 33434 до 33534, який зазвичай не використовується.

Давайте подивимося, як це працює

Крок 1.Моя адреса відправника створює пакет з адресою призначення 8.8.8.8 і портом призначення між 33434 і 33534. І головне, що він робить - це робить значення TTL рівним 1

Крок 2Звичайно, мій пакет досягає шлюзового сервера. Отримуючи мій пакет, шлюз зменшує TTL на одиницю (всі маршрутизатори/хопи між зменшують TTL на 1). Коли TTL зменшується до 1 (1-1=0), значення TTL стає нульовим. Тому мій шлюзовий сервер шле мені назад повідомлення TTL time exceeded. Прошу запам'ятати, коли мій шлюзовий сервер відправляє TTL exceeded мені, він відправляє мені перші 28 байтів того пакета, що я висилав.

Крок 3: Отримавши це повідомлення “TTL Time exceeded”, моя програма traceroute зможе дізнатися адресу та інші відомості про перший хоп, який є моїм сервером шлюзу.

Крок 4: Тепер програма трасування знову відправить той же UDP пакет з призначенням 8.8.8.8 і випадковим портом UDP призначення від 33434 до 33534. Але цього разу я зроблю початковий TTL =2. В результаті, мій шлюз або маршрутизатор знизить його на 1, а потім передасть цей пакет наступному хопу/маршрутизатору (пакет, відправлений моїм шлюзом до наступного вузла матиме значення TTL 1).

Крок 5: При отриманні UDP пакета наступний перехід до мого шлюзового сервера знову зменшить його до 1, що означає, що тепер TTL знову став рівним 0. Отже, він надішле мені звідти повідомлення ICMP Time exceeded з адресою джерела а також перші 28 байт заголовка пакета, який я відправив.

Крок 6. При отриманні TTL Time exceeded, моя traceroute програма дізнається IP-адресу маршрутизатора/хопу і показує мені його на екрані.

Крок 7. Тепер моя програма traceroute знову створить такий же UDP-пакет з випадковим портом UDP і адресою призначення 8.8.8.8. Але цього разу значення TTL дорівнює трьом, таким чином TTL автоматично стає нульовим, коли досягає третього хопа/маршрутизатора (прошу згадати, що мій шлюз та наступний за ним хоп зменшують його на одиницю). Так що він відповість мені повідомленням TTL Time exceeded і моя програма taceroute дізнається про IP-адресу маршрутизатора/хопу

Крок 8: Отримавши цю відповідь, програма traceroute знову створить UDP-пакет, цього разу зі значенням TTL=4. Якщо я отримаю TTL Time exceeded і для нього також, то моя traceroutе програма буде посилати UDP пакет з TTL=5 і так далі.

Але як моя програма Traceroute дізнається, що кінцевого пункту 8.8.8.8 досягнуто? Програма трасування дізнається про це так: коли початковий приймач пакету 8.8.8.8 (пам'ятайте, що у всіх UDP-пакетів була адреса одержувача 8.8.8.8) отримує запит, він надішле мені повідомлення, яке буде абсолютно відмінним від усіх повідомлень " TTL Time exceeded".

Коли початковий одержувач (8.8.8.8) отримує мій UDP-пакет, він надсилає мені повідомлення. ICMP Destination/PORT UnreachableЦе повинно статися, тому що ми завжди відправляємо випадковий UDP-порт між 33434 до 33534. Тому моя програма Traceroute буде знати, що ми досягли кінцевого пункту призначення і припинить посилати будь-які додаткові пакети.

Нині все, що описано словами, називається теорією. Нам потрібно підтвердити це, запустивши Tcpdump під час Traceroute. Погляньмо на висновок tcpdump. Прошу звернути увагу на те, що я не показую вам повний висновок tcpdump, оскільки він занадто довгий.


Запустіть traceroute в одному терміналі вашої Linux машини. І в іншому терміналі запустіть tcpdump, щоб побачити, що відбувається.

Висновок вище показує лише UDP-пакети, надіслані з моєї машини. Я покажу повідомлення у відповідь окремо, щоб було ясніше

Зверніть увагу на TTL у кожному рядку. Вона починається з TTL, рівного одиниці, потім 2, а потім 3 до TTL рівного 6. Вам може здатися дивним, чому мій сервер відправляє 3 UDP-повідомлення з TTL=1, а потім 2, а потім 3?

Причина цього полягає у обчисленні середнього часу проходження. Програма traceroute відправляє три UDP-пакети для кожного хопу, щоб виміряти точний середній час проходження пакета. Середній час проходження - ні що інше як час у мілісекундах, який був потрібний для відправки, а потім отримання відповіді. Я навмисно не згадав про це на початку, щоб уникнути плутанини.

Таким чином, нижній рядок моєї програми traceroute відправляє три UDP-пакети кожному хопу, щоб просто обчислити приблизний час проходження. Тому висновок traceroute показує ці три значення. Давайте розглянемо ближче висновок traceroute. Він показує три значення у мілісекундах для кожного хопу, щоб отримати чітке уявлення про час проходження.

Тепер давайте подивимося, що відповідь ми отримали від усіх хопів через TCPDUMP. Зверніть увагу, що повідомлення, які наводжу нижче, є частиною того ж ТСРDUMP, який я запустив раніше, але показую їх вам окремо, щоб було ясніше.

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

Повідомлення у відповідь виглядають як показано нижче.


Прошу звернути увагу, що повідомлення ICMP time exceeded показані вище (я не показав всі повідомлення у відповідь)

Тепер дозвольте мені показати останнє повідомлення, яке відрізняється від ICMP time exceeded. Це повідомлення destination port unreachable (порт призначення недосяжний), як говорилося раніше. І програма traceroute дізнається, що нашої мети досягнуто.

Зверніть увагу, що є три відповіді від 8.8.8.8 моєї програми traceroute. Як говорилося раніше, traceroute відправляє три однакові UDP-пакети з різними портами, щоб просто обчислити точний час проходження. Кінцевий пункт призначення нічим не відрізняється.

Різні типи програм Traceroute

Існують різні типи програм traceroute. Кожна з них працює трохи по-своєму. Але їхня загальна концепція одна й та сама. Усі вони використовує значення TTL.

Чому різні реалізації? Це тому, що ви можете використовувати ту, яка може бути застосована до вашого середовища. Якщо припустити, що файрвол блокує трафік UDP, то ви можете використовувати інше трасування для цієї мети. Різні типинаведено нижче.

Те, що ми використовували раніше - UDP трасування. Це протокол за промовчанням, що використовується програмою traceroute у Linux. Тим не менш, ви можете попросити нашу утиліту traceroute в Linux використовувати протокол ICMP замість UDP за допомогою наступної команди.

[email protected]:~# traceroute -I -n 8.8.8.8

ICMP для traceroute працює так само, як UDP traceroute. Програма traceroute відправлятиме ICMP Echo-запити та хопи між ними відповідатимуть ICMP-повідомленнями " ICMP Time exceeded" (час закінчився). Але кінцевий пункт призначення буде відправляти ICMP echo-відповідь. Команда tracert, доступна в операційній системі Windows, за замовчуванням ICMP використовує метод трасування маршруту.

І останній є найцікавішим. Його називають TCPtraceroute. Він використовується, тому що майже всі файрволи та проміжні маршрутизатори дозволяють передавати TCP трафік. І якщо пакет на порт 80, який є веб-трафіком, більшість маршрутизаторів пропускають цей пакет. За промовчанням TCPTRACEROUTE надсилає TCP SYN запити на порт 80.

Всі маршрутизатори між джерелом і пунктом призначення будуть надсилати повідомлення "TTL time exceeded" (час TTL закінчився), а адресат буде посилати або пакет RST, якщо порт 80 закритий, або пакет SYN/ACK. (Але tcptraceroute не створює з'єднання TCP. При отриманні SYN / ACK пакета, програма трасування надішле пакет RST, щоб закрити з'єднання). Отже, програмі трасування стає відомо, що мети досягнуто. Зверніть увагу на той факт, що опція -n, яку я використав у раніше показаній команді traceroute, не здійснюватиме дозвіл імен DNS. Інакше трасування надсилатиме запити DNS для всіх хопів, які вона зустріне по дорозі.

Тепер головне питанняу тому, яке з трасувань я повинен використовувати: ICMP, UDP чи TCP?

Все залежить від оточення. Якщо припустити, що проміжні маршрутизатори блокують конкретний протокол, ви повинні спробувати використати інший.

При пошуку причин несправностей у мережі, утиліта tracertпосідає друге місце після утиліти ping. Tracert(в Linux"e traceroute) дозволяє визначити, на якій ділянці мережі (між якими маршрутизаторами) виникла проблема. Для використання програми необхідно в командній рядку Windowsабо Linux виконати команду:

Tracert yandex.ru

натискаємо enter, і бачимо приблизно таке:

На малюнку вище видно, що між моїм комп'ютером та сервером yandex.ru знаходяться 12 проміжних маршрутизаторів, вказані IP адреси маршрутизаторів та час проходження пакета до кожного маршрутизатора.

Якщо на якійсь ділянці мережі виникла проблема (немає маршруту до мережі призначення, немає зв'язку з наступним маршрутизатором, немає вузла призначення у вказаній мережі тощо) тоді ми побачимо замість часу проходження пакета зірочки, а замість IP адреси маршрутизатора повідомлення "Перевищено" інтервал очікування для запиту":

То як же працює утиліта tracert?

Для того щоб відповісти на це питання, потрібно згадати структуру IP пакета, а точніше згадати одне з його полів - TTL (Число переходів):

При відправленні пакета це поле виставляється в 255 і потім кожен маршрутизатор, через який пройде даний пакет зменшує це значення на 1 тобто. TTL=TTL-1. Маршрутизатор, який отримує пакет зі значенням TTL=1, зменшує його на одиницю, та був видаляє пакет, т.к. значення поля TTL у пакета стало 0. Після того як пакет був відкинутий маршрутизатором, відправнику пакета відправляється ICMP-повідомлення з кодом 11: "Перевищення часового інтервалу". У заголовку IP-пакета з повідомленням ICMP джереломє IP-адреса маршрутизатора, що дропнув пакет, а призначенням- IP-адреса комп'ютера, що надіслав відкинутий пакет.

Тепер не складно здогадатися, як працює Tracert:

  • Надсилається IP-пакет на вказаний вузол (у нашому прикладі yandex.ru) зі значенням поля TTL=1
  • перший маршрутизатор на шляху пакету зменшує TTL і дропає(знищує) пакет
  • Маршрутизатор відправляє ICMP повідомлення що пакетик помер
  • Утиліта Tracertвитягує з ICMP пакета IP-адреса маршрутизатора вимірює витрачений час на проходження пакета до маршрутизатора
  • Якщо не вказано інше у параметрах запуску Tracert, то надсилається запит DNS-серверу та визначається доменне ім'я маршрутизатора, якщо таке є
  • У консоль виводиться IP-адреса (або доменне ім'я) першого маршрутизатора
  • Знову відправляється IP пакет на вказаний вузол, але з TTL=2
  • Пакет тремтить на другому проміжному маршрутизаторі
  • Процедура повторюється доти, доки прийде відповідь від вузла призначення (yandex.ru) чи кількість проміжних вузлів не збільшить максимального значеннядля tracert– 30 вузлів.

Ось, власне, і все, нічого складного!

Не завжди мережа працює так, як від неї вимагається, іноді певний комп'ютер у вашій локальної мережікомпанії або віддалений може не відповідати. Здавалося б, все працює, все підключено, але схоже на якийсь із вузлів, на шляху від вашого комп'ютера, до потрібного трапляється помилка.

Утиліта ping дозволяє визначити наявність проблеми, що вузол не відповідає, але як дізнатися де обривається з'єднання? Для цього застосовується утиліта traceroure. У цій невеликій інструкції ми розглянемо як користуватися traceroute linux, як розуміти її висновок і визначити де все ж таки проблема. Але спочатку розглянемо, як працює traceroute.

Ви, напевно, вже знаєте, що вся інформація у мережі передається у вигляді пакетів. Потік даних розбивається спеціальним програмним забезпеченнямна невеликі пакети і передається через інтернет на цільовий вузол, а там збирається назад.

Кожен пакет проходить на своєму шляху певну кількість вузлів, доки досягне своєї мети. Причому кожен пакет має свій час життя. Це кількість вузлів, які можуть пройти пакет перед тим, як він буде знищений. Цей параметр записується в заголовку TTL, кожен маршрутизатор, через який проходитиме пакет зменшує його на одиницю. При TTL=0 пакет знищується, а відправнику надсилається повідомлення Time Exceeded.

Команда traceroute linux використовує пакети UDP. Вона відправляє пакет з TTL=1 і дивиться адресу вузла, що відповів, далі TTL=2, TTL=3 і так поки не досягне мети. Щоразу відправляється по три пакети та для кожного з них вимірюється час проходження. Пакет вирушає на випадковий порт, який, швидше за все, не зайнятий. Коли утиліта traceroute отримує повідомлення від цільового вузла про те, що порт недоступний трасування вважається завершеним.

Утиліта Traceroute

Перед тим як перейти до прикладів роботи з утилітою розглянемо її синтаксис і основні опції. Синтаксис виклику дуже простий:

$ traceroute опції адрес_вузла

Як адреса може використовуватися ip адреса або доменне ім'я. Розглянемо основні опції:

  • -4 або -6 - Використовувати ipv4 або ipv6 протокол;
  • -I- Використовувати ICMP пакети замість UDP;
  • -T- Використовувати TCP пакети замість UDP;
  • -F- не фрагментувати пакети;
  • -f- вказати TTL з якого потрібно розпочати;
  • -g- передавати пакет через вказаний шлюз;
  • -i- передавати пакет через вказаний інтерфейс;
  • -m- максимальна кількість вузлів, через які пройде пакет;
  • -q- кількість пакетів, що надсилаються за раз, за ​​замовчуванням три;
  • -n- не впізнавати доменні імена;
  • -p- вказати порт замість порту за замовчуванням;
  • -w- встановити час очікування відповіді від вузла, за замовчуванням півсекунди;
  • -r- Використовувати інший роутер замість того, що зазначений у таблиці маршрутизації;
  • -z- Мінімальний інтервал між пакетами;
  • -U- Використовувати UDP зі збільшенням номера порту;
  • -UL- Використовувати протокол UDPLITE;
  • -D- Використовувати протокол DCCP;
  • --mtu- Вказати розмір пакета;
  • -P- протокол, доступні такі значення: raw, dccp, udplite, udp, tcpconn, tcp, icmp.

Це не всі опції утиліти, але всі основні, якими ви користуватиметеся. Далі перейдемо практиці того, як виконується трасування мережі Linux.

Приклади трасування мережі в Linux

Наприклад, виконаємо трасування до сервера сайту:

sudo traceroute сайт

Як бачите, пакет пройшов через 6 вузлів, перш ніж дійти до мети. На кожен вузол відправлялося по три пакети і для кожного з них було засічено час проходження. І якщо на одному з вузлів виникне проблема, тепер ви знатимете на якому.

У вас, напевно, постало питання, чому час проходження для деяких вузлів такий довгий? Адже якщо виконати ping, то загальний час буде набагато меншим. Справа в тому, що час засікається на шляху пакета туди і назад. Від запиту до відповіді. Це раз, але ще потрібно враховувати, що маршрутизатори дають вищий пріоритет для пакетів, що приходять, коли для сервісних затримки можуть бути довшими.

Ще, замість одного вузла ви можете бачити зірочки traceroute. Це ще не означає, що вона не працює. Це означає, що лише він не захотів нам відповідати. Давайте перевіримо ще щось, наприклад, публічний DNS google:

sudo traceroute 8.8.8.8

Тут уже більше вузлів, і така сама ситуація із зірочками. Якби на шляху до сервера виникла помилка, ми б це побачили. Наприклад, вузол 195.153.14.1 нам не відповів і ми змогли відстежити запит лише до 212.162.26.169.

sudo traceroute 195.153.14.1

Іноді трасування за допомогою UDP не працює, це може статися, тому що фаєрвол блокує всі зайві пакети. Ми можемо скористатися ICMP за допомогою опції I.

sudo traceroute history.pl

sudo traceroute -I history.pl

Але трасування може використовуватися не тільки для виявлення урвища в ланцюжку маршрутизаторів. У неї ще є досить цікаве застосування дослідження мережі. Наприклад, ви можете спробувати визначити підмережі провайдером. Відправимо три запити на різні адреси:

sudo traceroute сайт
$ sudo traceroute history.pl
$ sudo traceroute habrahabr.ru


Потім порівняйте висновки цих команд. Ви побачите, що початкові адреси IP однакові. Ми можемо зробити висновок, що наш роутер 192.168.1.1 підключений до локальної мережі провайдера 195.5.8.0/24, яка, у свою чергу, підключена до мережі 10.50.50.0/24, звідки вже отримує доступ до зовнішньої мережі.

Виконує трасування до точки призначення за допомогою надсилання адресату луна-повідомлень. Здійснення здійснюється за протоколом Control Message Protocol (ICMP) з постійним збільшенням значень терміну життя пакетів (Time to Live, TTL).

Виведений шлях - це список найближчих інтерфейсів маршрутизаторів, що перебувають на шляху між вузлом джерела та точкою призначення. Близький інтерфейс є інтерфейсом маршрутизатора, який є найближчим до вузла відправника на шляху. Запущена без параметрів команда tracert виводить довідку.

Для перевірки мережі також можна скористатися командами:

  • PING - основна TCP/IP-команда, що використовується для усунення неполадки у з'єднанні, перевірки можливості доступу та вирішення імен;
  • PATHPING - надає інформацію про латентність мережі та втрати даних на проміжних вузлах.

Параметри та ключі утиліти TRACERT

tracert [-d] [-h максимальне_число_переходів] [-j список_вузлів] [-w інтервал [ім'я_кінцевого_комп'ютера]

  • -d - Запобігає спробам команди tracert дозволу IP-адрес проміжних маршрутизаторів в імена. Збільшує швидкість виведення результатів команди tracert.
  • -h максимальне_число_переходів - Задає максимальну кількість переходів на шляху пошуку кінцевого об'єкта. Значення за промовчанням дорівнює 30.
  • -j список_вузлів - Вказує для повідомлень із ехо-запитом використання параметра вільної маршрутизації в заголовку IP з набором проміжних місць призначення, вказаних у списку_вузлів. У разі вільної маршрутизації успішні проміжні місця призначення можуть бути розділені одним або декількома маршрутизаторами. Максимальна кількість адрес або імен у списку - 9. Список_адрес представляє набір IP-адрес (в точково-десятковій нотації), розділених пробілами.
  • -w інтервал - Визначає в мілісекундах час очікування для отримання ехо-відповідей протоколу ICMP або ICMP-повідомлень про закінчення часу, що відповідає даному повідомленнюлуна-запиту. Якщо повідомлення не отримано протягом заданого часу, відображається зірочка (*). Таймаут за промовчанням 4000 (4 секунди).
  • ім'я_кінцевого_комп'ютера - Вказує точку призначення, вказану IP-адресою або ім'ям вузла.

Приклади TRACERT

  • Щоб відобразити довідку в командному рядку, введіть: tracert/?;
  • Щоб виконати трасування шляху до вузла, введіть наступне: tracert ya.ru;
  • Щоб виконати трасування шляху до вузла та запобігти дозволу кожної IP-адреси в ім'я, введіть: tracert-d ya.ru.

Відео - Робота з утилітою TRACERT

Браузери