Напевно ви стикалися з ситуацією, коли інтернет на комп'ютері раптово розривається, таку поведінку можна спостерігати під час використання 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, як її використовувати, основні параметри та методи застосування. Цей дуже простий інструмент можна застосовувати для тестування неполадок мережі та їх виправлення. У цьому плані утиліта може стати незамінною.