Напевно ви стикалися з ситуацією, коли інтернет на комп'ютері раптово розривається, таку поведінку можна спостерігати під час використання ADSL модемів, Wifi на великій відстані, GSM та інших подібних ненадійних технологій. Швидко з'ясувати чи є на комп'ютері інтернет можна за допомогою утиліти ping.
Однак сфера її застосування набагато ширша, її використовують мережеві адміністратори для перевірки доступності віддаленого вузла в мережі, вона застосовується в різних скриптах і багатьох інших місцях. У цій статті буде розглянуто команду ping у Linux, ми поговоримо про те, як користуватися утилітою, як вона працює, розглянемо її опції та можливості.
Утиліта ping - простий інструмент для діагностики мережі. Вона дає змогу перевірити доступний віддалений хост чи ні і все. Для цього утиліта перевіряє, чи може хост відповідати на мережеві запити за допомогою протоколу ICMP. Сподіваюся, не потрібно говорити, що всі дані мережею передаються у вигляді невеликих пакетів. Програма передає невеликий пакет із даними ICMP і очікує отримати назад пакет відповіді, якщо отримує, то вважається, що віддалений вузол доступний. ICMP або Internet Control Message Protocol - це надбудова над протоколом IP, яка використовується для передавання службових повідомлень і повідомлень про помилки.
Протокол ICMP може передавати тільки два типи пакетів - це повідомлення зі звітами про помилки і повідомлення запитів. Своєю чергою, повідомлення запитів діляться на:
Повідомлення ехо-запит;
Повідомлення ехо-відповідь.
Далі розберемося, що робить команда ping. Щойно ви надіслали запит ping віддаленому вузлу, утиліта встановлює для кожного пакета унікальний ідентифікатор, а також TTL і час надсилання пакета. Якщо хост доступний, він надсилає відповідь, на основі часу надсилання утиліта може обчислити час проходження пакета туди і назад. Потім відправляється наступний пакет. Наприкінці розраховується загальна кількість відправлених і прийнятих пакетів, відсоток втрат та інші дані.
Тепер нам залишилося трохи попрактикуватися. Але перед тим, як ми перейдемо до практики, давайте розглянемо синтаксис команди та її опції. Синтаксис досить простий:
$ 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, як її використовувати, основні параметри та методи застосування. Цей дуже простий інструмент можна застосовувати для тестування неполадок мережі та їх виправлення. У цьому плані утиліта може стати незамінною.