Розробка системи діагностики мережі (аналог - утиліта TRACERT), страница 2

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

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

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

Другу серію пакетів система посилає зі значенням TTL рівним двом. Їх знищує вже другий маршрутизатор у ланцюжку. Програма продовжує з'ясовувати маршрут, поки не досягне точки призначення.

           Одержуючи повідомлення про знищення пакетів, система діагностування визначає час, витрачений на подорож туди й назад, і виводить результат на екран як час доставки. Раз від разу ці цифри можуть досить сильно розрізнятися. Окремі пакети можуть навіть зовсім пропасти по дорозі (як туди, так і назад). Досить часто повідомлення про знищення пакета йде до відправника зовсім не тим шляхом, яким рухався вихідний пакет. Та й затримки по шляху туди й назад можуть бути різними. Тому визначити точний час пересилання пакета неможливо - воно не завжди дорівнює половині часу затримки з моменту відправлення запиту до моменту одержання повідомлення. На практиці цілком можлива помилка в 3-4 рази й навіть більше.

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

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

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

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