Як працює команда ping

26.11.2021, 18:30

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

Однак сфера її застосування набагато ширша, її використовують мережеві адміністратори для перевірки доступності віддаленого вузла в мережі, вона застосовується в різних скриптах і багатьох інших місцях. У цій статті буде розглянуто команду ping у Linux, ми поговоримо про те, як користуватися утилітою, як вона працює, розглянемо її опції та можливості.

Як працює команда

Утиліта ping - простий інструмент для діагностики мережі. Вона дає змогу перевірити доступний віддалений хост чи ні і все. Для цього утиліта перевіряє, чи може хост відповідати на мережеві запити за допомогою протоколу ICMP. Сподіваюся, не потрібно говорити, що всі дані мережею передаються у вигляді невеликих пакетів. Програма передає невеликий пакет із даними ICMP і очікує отримати назад пакет відповіді, якщо отримує, то вважається, що віддалений вузол доступний. ICMP або Internet Control Message Protocol - це надбудова над протоколом IP, яка використовується для передавання службових повідомлень і повідомлень про помилки.

Протокол ICMP може передавати тільки два типи пакетів - це повідомлення зі звітами про помилки і повідомлення запитів. Своєю чергою, повідомлення запитів діляться на:

Повідомлення ехо-запит;

Повідомлення ехо-відповідь.

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

Команда Ping

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

$ ping [options] host_address

Формат команди ping дуже простий. Як адресу вузла можна передавати як ip адресу, так і доменне ім'я. Опції налаштовують поведінку утиліти. Розглянемо основні з них:

-4 - використовувати тільки ipv4 (за замовчуванням);

-6 - використовувати тільки ipv6;

-A - адаптивний режим, час між відправленнями пакета адаптується до часу передавання і приймання пакета, але не менше ніж 200 мілісекунд;

-b - дозволити ping широкомовної адреси;

- кількість пакетів, які потрібно відправити;

-D - виводити час у вигляді UNIX timestamp;

-f - режим флуду, у цьому режимі пакети передаються без затримок, може використовуватися для здійснення DoS атак на окремі вузли. Кількість точок, які виводить утиліта, позначає кількість втрачених пакетів;

-i - інтервал у секундах між відправленням пакетів;

-I - використовувати цей мережевий інтерфейс для надсилання пакетів;

-l - режим перевантаження, надсилається дуже багато пакетів і система не стежить за відповідними пакетами;

-n - не отримувати домени для ip адрес;

-r - ігнорувати таблиці маршрутизації і відправити пакет на вказаний інтерфейс;

-s - розмір одного пакета;

-t - встановити TTL вручну;

-v - більш докладний висновок.

Тепер, коли ми розглянули основні параметри команди ping та її синтаксис, настав час практики, далі поговоримо про те, як зробити ping певного вузла в Linux.

Як використовувати

Для перевірки працездатності мережі часто використовується програма ping будь-якого сайту, який завжди доступний, наприклад, google.com або ще простіше і коротше ya.ru. Вам буде достатньо передати утиліті в параметрах цю адресу, вона сама знайде ip і зробить усе потрібне:

$ ping ya.ru

Кожен пакет отримав унікальний ідентифікатор icmp_seq, кількість вузлів до цільового вузла ttl і час, витрачений на доставку пакета time. Щоб зупинити ping натисніть поєднання клавіш Ctrl+C. Наприкінці утиліта вивела загальну статистику:

packets transmitted - відправлено пакетів;

received - отримано пакетів;

packet loss - відсоток втрачених пакетів;

time - загальний час роботи;

rtt min/avg/max/mdev - мінімальний час/середній час/максимальний час/квадратичне відхилення.

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

$ ping -c 3 ya.ru

Так само як ми виконуємо ping для домену, можна вказати ip адресу безпосередньо. Це дає змогу перевірити, чи є мережа, коли неправильно налаштовані сервери DNS. Наприклад:

 $ ping -c 3 8.8.8.8

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

$ ping -f losst.ru

За замовчуванням, у звичайному режимі, кожен наступний пакет відправляється, коли отримано відповідь на попередній. Але ви можете самі встановити інтервал між надсиланням пакетів -i:

$ ping -i 0.2 losst.ru

Тут програма ping виконує так званий, настроюваний флуд, ви вказуєте, з якою інтенсивністю потрібно надсилати пакети. За допомогою опції -D ви можете побачити Unix Timestamp для кожного повідомлення:

$ ping -D losst.ru

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