Як використовувати команду traceroute в Linux

Ви можете використовувати команду Linux traceroute, щоб виявити повільну частину маршруту мережевого пакета та усунути неполадки з повільними мережевими з’єднаннями. Ми покажемо вам, як!

Як працює traceroute

Коли ви розумієте, як працює traceroute, це значно полегшує розуміння результатів. Чим складніший маршрут а мережевий пакет Щоб досягти пункту призначення, тим важче визначити, де можуть виникнути сповільнення.

Невелика організація локальна мережа (LAN) може бути відносно простим. Ймовірно, він матиме принаймні один сервер і маршрутизатор або два. Складність зростає на а глобальна мережа (WAN), яка зв’язується між різними місцями або через Інтернет. Ваш мережевий пакет потім зустрічається (і пересилається і маршрутизується) з великою кількістю обладнання, як-от маршрутизатори та шлюзи.

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

traceroute використовує TCP/IP набір протоколів і надсилає Протокол дейтаграм користувача пакети. Заголовок містить Час жити (TTL), яке містить восьмирозрядне ціле значення. Незважаючи на те, що випливає з назви, це означає кількість, а не тривалість.

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

Маршрутизатор надсилає Протокол керування повідомленнями в Інтернеті (ICMP) Час перевищено повідомлення назад до джерела пакета, щоб повідомити йому, що час очікування пакету минув. Повідомлення Time Exceeded містить оригінальний заголовок і перші 64 біти даних вихідного пакету. Це визначено на шостій сторінці Запит на коментар 792.

Отже, якщо traceroute надсилає пакет, але потім встановлює значення TTL на одиницю, пакет досягне лише першого маршрутизатора, перш ніж його відкинуть. Він отримає повідомлення про перевищення часу ICMP від ​​маршрутизатора, і він може записати час, затрачений на поїздку туди й назад.

Потім він повторює вправу з TTL, встановленим на 2, яка закінчиться невдачею після двох стрибків. traceroute збільшує TTL до трьох і повторює спробу. Цей процес повторюється до тих пір, поки не буде досягнуто призначення або не буде перевірено максимальну кількість переходів (30, за замовчуванням).

Деякі маршрутизатори не грають добре

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

Відповідно до Cisco, деякі постачальники Інтернет-послуг (ISP) обмежують кількість повідомлень ICMP, які передають їх маршрутизатори.

Деякі пристрої налаштовані ніколи не надсилати ICMP-пакети. Це часто робиться для того, щоб гарантувати, що пристрій не може бути ненавмисно примушеним до участі в а розподілена відмова в обслуговуванні, як атака смурфа.

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

Встановлення traceroute

traceroute вже було встановлено на Fedora 31, але має бути встановлено на Manjaro 18.1 та Ubuntu 18.04. Щоб встановити traceroute на Manjaro, скористайтеся такою командою:

sudo pacman -Sy traceroute

The

Щоб встановити traceroute в Ubuntu, скористайтеся такою командою:

sudo apt-get install traceroute

The

Використання traceroute

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

Як приклад, ми запустимо трасування до Замок Бларні веб-сайт в Ірландії, дом відомих Бларні Камінь. Легенда свідчить, що якщо ви поцілуєте камінь Бларні, ви отримаєте «дар балачки». Будемо сподіватися, що маршрутизатори, яких ми зустрічаємо на своєму шляху, будуть відповідально словоблудливими.

Вводимо таку команду:

traceroute www.blarneycastle.ie

The

Перший рядок дає нам таку інформацію:

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

Усі інші рядки містять інформацію про один із хмілів. Але перш ніж заглибитися в деталі, ми бачимо, що між нашим комп’ютером і веб-сайтом Blarney Castle є 11 стрибків. Hop 11 також повідомляє нам, що ми досягли пункту призначення.

Формат кожного рядка переходу такий:

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

Давайте розглянемо те, що ми маємо нижче:

Перехід 1: Першим портом виклику (без каламбуру) є маршрутизатор DrayTek Vigor в локальній мережі. Таким чином наші UDP-пакети залишають локальну мережу та потрапляють в Інтернет.
Перехід 2: цей пристрій не відповідає. Можливо, він був налаштований ніколи не надсилати ICMP-пакети. Або, можливо, він відповів, але був надто повільним, тому минув час очікування traceroute.
Перехід 3: пристрій відповів, але ми не отримали його назву, лише IP-адресу. Зверніть увагу, що в цьому рядку є зірочка, що означає, що ми не отримали відповідь на всі три запити. Це може свідчити про втрату пакетів.
Хміль 4 і 5: більше анонімних хмелів.
Перехід 6: тут багато тексту, оскільки кожен із трьох запитів UDP обробляв інший віддалений пристрій. Були надруковані (досить довгі) імена та IP-адреси для кожного пристрою. Це може статися, коли ви зіткнетеся з «багато населеною» мережею, в якій є багато обладнання для обробки великих обсягів трафіку. Цей стрибок знаходиться в межах одного з найбільших провайдерів Інтернету у Великобританії. Тому було б невеликим дивом, якби той самий віддалений апарат обробляв наші три запити на підключення.
Перехід 7: Це стрибок, який зробили наші UDP-пакети, поки вони залишили мережу провайдерів.
Перехід 8: ми знову отримуємо IP-адресу, але не назву пристрою. Усі три тести повернулися успішно.
Хміль 9 і 10: ще два анонімних стрибка.
Перехід 11: Ми прибули на веб-сайт замку Бларні. Замок знаходиться в Корку, Ірландія, але, згідно з Геолокація IP-адреси, веб-сайт знаходиться в Лондоні.

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

Проте ми досягли пункту призначення, ми знаємо, що до нього 11 кроків, а час у дорозі в обидва боки становив 13,773 і 14,715 мілісекунд.

Приховування назв пристроїв

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

Для цього в нашому прикладі ми вводимо наступне:

traceroute -n blarneycastle.ie

The

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

Hop 3 починає виглядати трохи підозрілим. Минулого разу він відповів лише двічі, а цього разу відповів лише один раз. У цьому сценарії, звичайно, це поза нашим контролем.

Однак, якщо ви досліджували свою корпоративну мережу, варто було б заглибитися в цей вузол.

Встановлення значення тайм-ауту трасування

Можливо, якщо ми продовжимо час очікування за замовчуванням (п’ять секунд), ми отримаємо більше відповідей. Для цього ми використовуємо параметр -w (час очікування), щоб змінити його на сім секунд. (Зверніть увагу, що це число з плаваючою комою.)

Вводимо таку команду:

traceroute -w 7.0 blarneycastle.ie

The

Це не має великої різниці, тому відповіді, ймовірно, закінчуються. Ймовірно, анонімні хмелі цілеспрямовано приховують.

Встановлення кількості тестів

За замовчуванням traceroute надсилає три UDP-пакети на кожен стрибок. Ми можемо використовувати параметр -q (кількість запитів), щоб збільшити або зменшити це значення.

Щоб прискорити перевірку трасування, ми вводимо наступне, щоб зменшити кількість пакетів UDP-зонди, які ми надсилаємо до одного:

traceroute -q 1 blarneycastle.ie

The

Це надсилає один зонд до кожного стрибка.

Встановлення початкового значення TTL

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

Оскільки ми знаємо, що веб-сайт Blarney Castle знаходиться на відстані 11 стрибків від цього комп’ютера, ми вводимо наступне, щоб перейти безпосередньо до Hop 11:

traceroute -f 11 blarneycastle.ie

The

Це дає нам гарний, стислий звіт про стан з’єднання з пунктом призначення.

Будьте уважні

traceroute — чудовий інструмент для дослідження маршрутизації мережі, перевірки швидкості з’єднання або виявлення вузьких місць. У Windows також є команда tracert, яка функціонує аналогічно.

Однак ви не хочете бомбардувати невідомі пристрої потоками UDP-пакетів і остерігайтеся включати traceroute в сценарії або неконтрольовані завдання.

Навантаження, яке може розмістити в мережі, може негативно вплинути на її продуктивність. Якщо ви не перебуваєте в такій ситуації, як «виправити це зараз», ви можете використовувати його у неробочий час.