Практичні заняття № 03-006

Мережева утиліта tracert (traceroute в Linux, Cisco IOS, MAC OS). Принципи роботи та використання.

Утиліта tracert використовується для дослідження маршрутів IP пакетів у мережах, що працюють з використанням стека протоколів TCP/IP, включаючи глобальну мережу Internet. При використанні цієї програми необхідно пам'ятати, що при її роботі генерується досить велика кількість IP пакетів як на вашому хості, так і на проміжних маршрутизаторах. Це створює додаткове навантаження на мережу.

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

Параметри:

- dвідмова від дозволу IP адрес проміжних вузлів в імена

- hмаксимальна кількістьмаксимальна кількість переходів (стрибків) при пошуку вузла

-j список_вузлівзадає використання параметра вільної маршрутизації в IP-заголовку з набором проміжних точок призначення, зазначеним у списку_вузлів (зараз практично не підтримується на машрутизаторах)

-w інтервалзадає в мілісекундах час очікування кожної відповіді

ім'я_кінцевого_комп'ютеразадає точку призначення, що ідентифікована IP-адресою або ім'ям вузла.

Робота утиліти заснована на маніпулюванні вмістом полів стандартного заголовка та опцій заголовка IP пакета. Основним інструментом утиліти є вміст поля "час життя" (або TTL).

Обов'язковим елементом є адреса IP або ім'я вузла призначення.

Отримавши його від користувача, утиліта відправляє в мережу серію (зазвичай три) пакетів на цю адресу із встановленим значенням TTL рівним 1. Шансів дійти до адресата ці пакети не мають, оскільки перший же шляхом проходження маршрутизатор, віднімаючи з такого TTL 1 отримає 0. А такий пакет він зобов'язаний знищити після дозволеного часу життя в мережі. Але при цьому маршрутизатор зобов'язаний надіслати відправнику цього пакета-невдаху ICMP повідомлення про трагічну долю (тип 11, код 0) .

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

Потім відправляється наступна серія пакетів з TTL рівним 2 і так до тих пір, поки пакети не досягнуть пункту призначення.

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

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

Таке повідомлення інтерпретується відправником як підтвердження завершення пересування.

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

Найменування вузлів ґрунтується на системі доменних імен (DNS):

Формально і користувачі, і програми можуть звертатися до хостів, поштових скриньок та інших ресурсів мережі інтернет за їх IP адресами, але якщо для програми процедура запам'ятовування IP адреси нічим не відрізняється від запам'ятовування будь-яких інших 4-х байт інформації будь-якого типу, то для користувача запам'ятовування цифросполучень виду 111.124.133.44 важко просто з погляду пристрою нашої пам'яті. Крім того, ототожнення будь-яких служб з IP адресами хостів або серверів, на яких вони функціонують, дуже утруднює процедуру їх перенесення в разі потреби. Для обліку «людського фактора» та відокремлення імен машин від їх адрес було вирішено використовувати текстові ASCII-імена. Тим не менш, мережа розуміє лише чисельні адреси, тому потрібен механізм перетворення ASCII-рядків на IP адреси.

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

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

Для вирішення цих проблем було розроблено служба доменів (DNS, Domain Name System). Ця система використовується для перетворення імен хостів та пунктів призначення електронної пошти на IP-адреси, але також може використовуватися і в інших цілях. Визначення системи DNS було дано в RFC 1034 та 1035.

Доменним ім'ям називається ім'я, що складається зі слів, розділених крапками. Ліве слово імені належить до хосту. Решта слів утворюють ім'я домену. Система імен має ієрархічну, деревоподібну структуру.

Кожен вузол (кружечки на малюнку) має мітку завдовжки до 63 символи. Корінь дерева – це спеціальний вузол без мітки. Мітки можуть містити великі літери або маленькі. Ім'я домену (domain name) для будь-якого вузла в дереві - це послідовність міток, яка починається з вузла виступаючого у ролі кореня, у своїй мітки поділяються точками. (Тут видно відмінність від звичної нам файлової системи, де повний шлях завжди починається з вершини (кореня) і опускається вниз по дереву.) Кожен вузол дерева повинен мати унікальне ім'я домену, однак однакові мітки можуть бути використані у різних точках дерева.

Існує кореневе ім'я, що позначається символом ".", часто не пишеться в імені домену. Існують імена доменів першого рівня. Вони поділені на 2 категорії – імена доменів територій та імена доменів предметних областей. Імена доменів другого рівня та наступних можуть бути будь-якими, при цьому не може існувати двох однакових імен доменів або хостів. Отже, якщо N i - доменне ім'я i-го рівня, а T-слово, то доменне ім'я i+1 рівня утворюється за правилом N i +1 =T+N i .. Ім'я домену, яке закінчується точкою, називається абсолютним ім'ям домену (absolute domain name) або повним ім'ям домену (FQDN - fully qualified domain name).

Підкреслимо ще раз, що оскільки IP-адреси унікально ідентифікують хости в мережі, існує взаємно-однозначне відношення між безліччю імен хостів та безліччю адрес.

Це ставлення встановлюється таблицею, де стільки записів типу «Ім'я хоста, IP-адреса», скільки існує доменних імен хостів. При найменуванні нового хоста запис до таблиці потрібно додати, якщо перейменований існуючий запис потрібно змінити. Користуватися такою системою імен зручно, тому що вони легко запам'ятовуються та не прив'язані до територіально локалізованих IP-мереж. Переносячи названий ресурс з одного хоста на інший, вам достатньо змінити запис для його імені в таблиці імен. На одному сайті складно містити таку таблицю для Інтернету і неможливо підтримувати в актуальному стані.

База даних DNS розподілена. Ієрархічній системі імен відповідає ієрархічна система серверів DNS, де розміщені фрагменти таблиці. В ідеалі кожного домену повинен існувати окремий сервер імен. У базі даних сервера імен будь-якого рівня повинні бути записані всі дочірні домени наступного рівня. Усі домени першого рівня містяться у базі даних кореневих серверів (root name servers). Їх обслуговує організація NIC.

В реальності на одному хості може розміщуватися база для декількох доменів, і однакові бази, що перетинаються, можуть розташовуватися на декількох хостах. Гілка дерева імен, що знаходиться під єдиним керуванням разом з хостами, на яких розташована база даних цієї гілки дерева, називається зоною DNS. Зазвичай у зоні є один основний сервер DNS (primary name server) та кілька резервних (secondary name servers). Зміни в зоні вносяться до бази даних первинного сервера зони з подальшим дублюванням цієї інформації на вторинні сервери.

Процес передачі від первинного сервера вторинному називається передачею зони (zone transfer). Коли в зоні з'являється новий хост, адміністратор додає відповідну інформацію (мінімум, ім'я та IP-адресу) в дисковий файл на первинному сервері. Вторинні сервери регулярно опитують первинні (зазвичай кожні 3 години), і якщо первинні містять нову інформацію, вторинний отримує її з використанням передачі зони.

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

Система роздільної здатності адрес.

Для того, щоб програмне забезпечення стека протоколів TCP/IP могло користуватися службою імен, в налаштуваннях стека має бути вказана IP-адреса сервера імен, в зону якого входить хост або інший сервер, який приймає запити з мережі хоста. Коли прикладний елемент використовує позначення другої сторони в сеансі доменне ім'я, ініціюється процес вирішення IP - адреси. Прикладний елемент служби імен хоста надсилає запит на сервер імен. Якщо сервер імен може дозволити адресу, він надсилає відгук, що містить цю адресу. Якщо сервер імен не може дозволити запит, він може ініціювати два сценарії дозволу імені

    сервер відправляє у складі відгуку адресу кореневого сервера імен, і хост формує запит на цей сервер (ітеративний запит).

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

Відгук сервера, який контролює домен, називається авторитетним.

Кожен сервер імен в Інтернеті повинен містити в базі адреси кореневих серверів.

Дозвіл імен . Окрім основної функції дозволу доменного імені хоста в його IP-адресу, протокол DNS забезпечує і зворотний дозвіл IP-адреси в доменне ім'я за допомогою підзон реверсивної зони in_addr.arpa.

Саме можливості цього протоколу дозволяють утиліті tracert не лише успішно працювати при заданні місця трасування у вигляді DNS імені, але й надавати нам інформацію про імена проміжних вузлів.

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

    Що таке система доменних імен та для чого він використовується.

    Який максимальний розмір мітки вузла домену

    Яке ім'я має кореневий домен DNS

    Які типи та коди ICMP повідомлень використовує утиліта tracert

    Яке поле заголовка IP пакета використовується для завдання часу життя пакетів утилітою tracert

    Параметри утиліти tracert

    Призначення утиліти tracert та варіанти її застосування

Необхідне обладнання

IBM PC - сумісна ЕОМ з ліцензійною операційною системою Windows, підключення до локальної мережі, вихід до Інтернету.

Завдання

1. Скориставшись командою tracert визначте маршрут розповсюдження IP-пакетів на сайт www.sgu.ru

2. Скориставшись командою tracert, визначте маршрут розповсюдження IP-пакетів до одного з наведених сайтів: www. nla. gov. au , www. ibge. gov. br , www. kunaicho. go. jp(можете вибрати будь-який сайт за межами Росії).

3. Повторіть трасування із опцією –d.

4. Опишіть структуру DNS імені сервера, що вами трасувався.

5. Скористайтеся послугами сервісу www. ip2 location. com/ demo. aspx(або аналогічного) і визначте зразкове місце проміжних точок маршруту.

6. Намалюйте схему маршруту.

7. Прокоментуйте результати.

Звіт про виконання роботи подайте у друкованій або електронній формі з поданням копій екранів роботи утиліти.

Бувають у мережевому житті (особливо у dial-up користувачів 😉 моменти, коли неможливо достукатися до якогось хоста (у мене це часто www.microsoft.com ;-|) - тут на допомогу і прийде ця утиліта (у Windows - tracert .exe) З її допомогою можна спробувати визначити на якій ділянці IP-мережі стався збій - чи то хост упав, чи у провайдер гальма, або у тебе з IP-з'єднанням хреново:).

Але за що я по-справжньому люблю tracert - так це за ті можливості дослідження IP-мереж, які він дає - а вони бувають різні, за масштабами та цілеспрямованістю;). Першим кроком може стати дослідження підмережі свого провайдера. За допомогою traceroute ти можеш досліджувати саму мережу, застосовуючи на практиці отримані теоретичні знання - про маршрутизацію, сервери DNS, бекбони, системи підмереж, та мало що ще;).

Як це працює?

Спочатку потрібно згадати формат заголовка IP-пакета, точніше одне з його полів - TTL (Time To Live). Це восьмибітне поле визначає максимальну кількість хопів (hop - "стрибок" - проходження дейтаграми від одного маршрутизатора до іншого) протягом якого пакет може знаходитися в мережі. Кожен маршрутизатор,
обробляє цю дейтаграму, виконує операцію TTL=TTL-1. Коли TTL стає рівним нулю, маршрутизатор знищує пакет,
відправнику надсилається ICMP-повідомлення Time
Exceeded.

Утиліта посилає у напрямку заданого хоста пакет з TTL=1, і чекає, від кого повернеться відповідь time exceeded. Відповідальний записується як перший хоп (результат першого кроку по дорозі до мети). Потім посилаються послідовно пакети з TTL=2, 3, 4 тощо. по порядку, поки при певному значенні TTL пакет не досягне мети та не отримає від неї відповіді.

*nix traceroute посилає у бік заданого хоста UDP-пакети на довільний порт - швидше за все не зайнятий іншим сервісом (наприклад 28942, 30471) або на зарезервований, наприклад 0, замовчуванням - 33434. Спочатку посилається серія з 3-х таких пакетів 1, після приходу відповідей заміряється час проходження та визначається доменне ім'я транзитного вузла (хоча це залежить від заданих опцій). Потім посилаються чергові серії пакетів з однаковим TTL, призначених для виявлення одного і того ж хопу. Наприкінці ми отримуємо від кінцевого хоста відгук port unreachable (порт недоступний), що означає завершення трасування.
Стандартний консольний Windows tracert працює так само, але посилає лише ICMP echo request пакети.

Сам я охоче користуюсь як стандартним tracert, так і вшитим у CyberKit (досить непоганою утилітою)
ще є Necrosoft Quick Traceroute). Під Лінуксом нічого додаткового порадити не можу - юзал тільки стандартний Debian"івський traceroute:).

На закінчення скажу, не бійся експериментувати - тільки так можна по-справжньому "зрозуміти" мережу. Шукай інформацію та користуйся нею. Хай щастить.

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

Якщо ви працюєте мережним адміністратором, системним адміністратором або в будь-якій експлуатаційній групі, ви, можливо, чули про інструмент під назвою 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?

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

Виконує трасування до точки призначення за допомогою надсилання адресату луна-повідомлень. Здійснення здійснюється за протоколом 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/?;
  • Щоб виконати трасування шляху до вузла, введіть наступне: tracert ya.ru;
  • Щоб виконати трасування шляху до вузла та запобігти дозволу кожної IP-адреси в ім'я, введіть: tracert-d ya.ru.

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