Назва

ping, ping6 - посилають ICMP-сигнал ECHO_REQUEST машинам мережі

Стислий огляд

ping [-LRUbdfnqrvVaAB] [-c кількість] [-i інтервал] [-l заряд] [-p шаблон] [ -s розмірпакету] [ -t ttl] [-w часроботи] [-F міткапотоку] [ -I адресаінтерфейсу] [-M стратегія] [ -P поведінка] [-Q tos] [-S розмірбуферу] [-T опціяміткичасу] [-W часнавідповідь] [транзитнамашина...] призначення

Опис

Програма ping застосовує обов'язкову данограму ECHO_REQUEST протоколу ICMP, щоб домогтися відповіді ECHO_RESPONSE протоколу ICMP від машини чи шлюзу. Данограми ECHO_REQUEST включають IP та ICMP-заголовок, після якого слідує struct timeval (структура timeval), і наприкінці певна кількість байтів-заповнювачів, щоб доповнити пакет.

Ключі

-a : Пінгування з поданням звукового сигналу.

-A : Адаптивне пінгування. Міжпакетний інтервал адаптується до часу обігу пакетів, так, щоб не більше одного (або більше одного, якщо задано аргумент preload опції -l) запитів без відповіді присутні в мережі. Мінімальний інтервал складає 200 мілісекунд для звичайних користувачів. В мережах з низьким показником періоду обігу (rtt - round-trip time), цей режим фактично еквівалентний повеневому (опція -f).

-b : Дозволяє пінгувати трансляційну адресу.

-B : Забороняє програмі ping змінювати первісну адресу пакетів. Таким чином, адреса буде прив'язана до певної обраної під час запуску ping.

-c кількість : Зупиниться після відправки вказаної кількості ECHO_REQUEST-пакетів. Разом із параметром термін, опції -w, очікуватиме вказану кількість ECHO_REPLY-пакетів доти, доки не закінчиться заданий термін очікування.

-d : Встановлює опцію SO_DEBUG для використовуваного сокету. По суті, ця опція сокету не використовується ядром Лінакса.

-F мітка потоку : Виділяє та встановлює 20-бітну потокову мітку ECHO_REQUEST-пакетів. (Чинне тільки для ping6.) Якщо це значення рівне нулю, ядро призначає довільну потокову мітку.

-f : Повеневий пінг. Для кожного відправленого пакету ECHO_REQUEST виводиться крапка ".", тоді як для кожного отриманого ECHO_REPLY - реверс (що видаляє виведену крапку). Це забезпечує наглядною ілюстрацією кількості відкинутих пакетів. Якщо інтервал не задано, ping встановить його до нуля, і виводитиме пакети настільки швидко, наскільки повертається відповідь на них, або ж одну сотню разів на секунду, в залежності від того, яке з цих значень більше. Тільки надкористувач може використати цю опцію з нульовим інтервалом.

-i інтервал : Чекатиме заданий інтервал часу до того, як відіслати наступний пакет. Стандартний інтервал дорівнює одній секунді, або нулю в повеневому режимі (дивіться опцію -f). Тільки надкористувач може встановити значення інтервалу менше за 0.2 секунди.

-I адреса інтерфейсу : Встановлює адресу відправника як зазначену адресуінтерфейсу_. Останнє може бути як числовою IP-адресою, так і пристроєвою назвою. Якщо пінгувати link-local IPv6-адресу, ця опція обов'язкова.

-l заряд : Якщо вказано аргумент заряд, ping відішле цю кількість пакетів, не очікуючи відповіді. Тільки надкористувач може обрати заряд більший за 3.

-L : Пригнічує кільцеве повернення пакетів групової трансляції. Цей прапорець застосовний тільки, коли місцем призначення ping служить адреса групової трансляції.

-n : Числовий вивід (адрес). Не робитиметься спроба здобуття символічних назв адрес машин.

-P поведінка : Переважить системне поводження згідно з правилами IPsec. Аргумент може складатися з ланцюжка у форматі, описаному в сторінці ?ipsec set policy(3). Наприклад: "out bypass" - дає змогу обійти цілосистемні стандарти, "out ipsec esp/transport//require" - вимагає відсилки ping-пакетів, використавши ESP в транспотрабельному режимі.

-p ланцюжок : Ви можете вказати до 16-и байтів-заповнювачів для доповнення пакетів, які ви відсилаєте. Це зручно для діагностики проблем мережі, пов'язаних із даними. Так, наприклад, "-p ff" спричинить до того, що пакети буде заповнено самими одиницями.

-Q код : Додає до ICMP-данограм біти, пов'язані з якістю сервісу. код може складатися з десяткового або шістнадцяткового номеру. Традиційно (згідно з RFC1349), ці номери інтерпретовано як: 0 - резервований (на сьогодняшній день, його переозначено як номер керування над перевантаженням), 1-4 - позначають тип сервісу, а 5-7 - пріоритет. Можливими значеннями типу сервісу є: 0x02 - мінімальне навантаження, 0x04 - надійність, 0x08 - висока прохідна здатність, 0x10 - мінімальна затримка. Одночасне встановлення різноманітних бітів типу сервісу - небажане. Можливими настройками пріоритету може бути діапазон від 0x20 (високий пріоритет) до 0xe0 (саморегулювання мережею). Ви повинні бути надкористувачем (мати властивість CAP_NET_ADMIN), щоб бути в змозі використати критичне або високопріоритетне значення. Ви не зможете встановити резервований біт 0x01, якщо в ядрі не ввімкнено ECN. У RFC2474 ці поля переозначено як 8-бітні диференційні сервіси (DS), які складаються з бітів 0-1 - окремі дані (ECN знаходитиметься тут), і 2-7 - Differentiated Services Codepoint (DSCP).

пакету завеликий, а також dont (не встановлює прапорця DF).

-q : Безшумний режим. Жодного виводу, окрім підсумкового рядка під час запуску, і по закінченню.

-R : Запис маршруту. Додає опцію RECORD_ROUTE (запису маршруту) до пакету, і виводить буфер здійсненого маршруту з повернених пакетів. Зауважте, що IP-заголовок здатний вмістити тільки вісім записів маршруту. Багато машин ігнорують або відкидають цю опцію.

-r : Обхід звичайної таблиці маршрутизації, посилаючи пакети безпосередньо машині зі сполученим інтерфейсом. Якщо машина не знаходиться у безпосередньо-приєднаній мережі, ця опція спричинить до повідомлення про помилку. Цю опцію можна застосувати для пінгування локальної машини (localhost) через інтерфейс, маршрут до якого не налагоджено (в таблиці маршрутизації), за умови що одночасно застосовано опцію -I.

-s розмірпакету_ : Вказує яку кількість байтів даних відіслати. Стандартним значенням є 56, що утворює 64 байтів даних ICMP, якщо додати 8 байтів заголовку ICMP.

-S розмірбуферу_ : Встановлює розмір буферу відправки (sndbuf) сокету. Якщо не вказано, то цей буфер може утримувати не більше одного пакету.

-t ttl : Встановлює час життєздатності пакета (ttl - time to live).

-T опціяміткичасу : Встановлює спеціальну опцію мітки часу IP. Аргументами можуть бути tsonly (тільки мітки часу), tsandaddr (мітки часу й адреси), або tsprespec машина1 [машина2 [машина3 [машина4]]] (мітки часу для окремих пунктів проходження).

-M стратегія : Вибір стратегії визначення максимальної одиниці передачі (MTU - Maximum Transfer Unit). Аргумент стратегія може складатися з do (забороняє фрагментацію, навіть локальну), want (здійснює PMTU-визначення, фрагментує (ділить пакети) локально, якщо розмір

-U : Виводить повний час затримки між машинами (старе поводження). Звичайно, ping виводить мережний час обігу, який може відрізнятися, скажімо, з-за несправності DNS (сервісу імен).

-v : Багатослівний режим.

-V : Виводить версію програми та завершує роботу.

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

-W часнавідповідь : Час очікування відповіді, в секундах. Ця опція впливає на ліміт часу у випадку відсутності будь-якої відповіді, в протилежному випадку, ping чекає впродовж двох RTT.

Під час використання програми ping для віднаходження мережних помилок, спершу слід застосувати її до локальної машини, щоб упевнитися, що локальний мережний інтерфейс дієздатний. Після цього, слід пінгувати подальші машини та шлюзи по мірі їхньої віддаленості. Програма обчислює час обігу та кількість втрачених пакетів. Якщо отримано дубльовані пакети, вони не включаються в обчислення втрачених пакетів, натомість час обігу цих пакетів додається до мінімального/середнього/максимального (minimum/average/maximum) часу обігу. Після того як відправлено (та отримано) вказану кількість пакетів, або коли програму перервано сигналом SIGINT, ping виводить короткий підсумок. Коротшу поточну статистику можна отримати, коли не переривати процес сигналом SIGINT.

Коли ping не отримала жодних пакетів відповіді, статус її виходу дорівнюватиме 1. Коли вказано обидва - кількість пакетів і час роботи, а отримано менше пакетів за вказану кількість по завершенню часу роботи, ping також вийде зі статусом 1. У випадку інших помилок, програма повертає 2. При успішному виконанні код повернення дорівнює 0. Це дозволяє використання коду повернення, щоб визначити, чи досяжна певна машина, чи ні.

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

Докладніше про ICMP

IP-заголовок без байтів опцій має довжину 20 байтів. Пакет ICMP ECHO_REQUEST має додатково 8 байтів ICMP-заголовку, за яким слідує певна кількість даних. Коли опцією -s вказано розмір пакету, це встановить кількість цих додаткових даних (стандартно - 56 байтів). Таким чином, розмір даних, отриманих всередині IP-пакету ECHO_REPLY, завжди буде на 8 байтів більшим за розмір, вказаний опцією -s.

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

Дубльовані та пошкоджені пакети

ping повідомить про дубльовані та пошкоджені пакети. Дубльовані пакети не повинні з'являтися, а якщо так, то це пов'язано з недоречними ретрансляціями на апаратному рівні (link-level).

Серйознішим приводом для хвилювань являються пошкоджені пакети. Часто, вони є вказівником на зіпсовану апаратну частину десь на шляху пакетів ping (в мережі, або машинах).

Ланцюжки даних пакетів

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

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

Стосовно TTL

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

Специфікація TCP/IP заявляє, що TTL-поле TCP-пакетів повинні мати значення 60, але в багатьох системах це значення менше (4.3 BSD використовує 30, а 4.2 - 15).

Максимальним значенням цього поля може бути 255, і більшість Юнікс-систем встановлюють TTL-поле пакетів ECHO_REQUEST протоколу ICMP саме до 255-и. Саме тому, може статися, що ви будучи спроможним пінгувати певні машини, не можете досягти їх за допомогою ?telnet(1) або ftp(1).

За звичайних обставин, ping виводить значення ttl кожного отриманого пакету. Коли віддалена система отримала ping-пакет, вона у відповідь може здійснити одну з наступних трьох речей з TTL-полем:

  • Не змінювати його; саме так діяли системи Berkeley Unix до появи релізу 4.3BSD Tahoe. У цьому випадку, значення TTL отриманого пакету дорівнюватиме 255 мінус кількість маршрутизаторів під час обігу.
  • Встановити його до 255-и; саме так роблять сучасні системи Berkeley Unix. В такому разі, значення TTL дорівнюватиме 255 мінус кількість маршрутизаторів між віддаленою системою та машиною, з якої здійснюється пінгування.
  • Встановити його до якогось іншого значення. Деякі машини використовують те саме значення TTL для ICMP-пакетів, що і для TCP, наприклад 30 або 60. Інші взагалі встановлюють дикі значення.

Вади

Багато машин і маршрутизаторів ігнорують опцію RECORD_ROUTE.

Максимальна довжина заголовка IP замала, щоб такі опції як RECORD_ROUTE були дійсно корисними. На жаль, це неможливо якось виправити.

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

Дивіться також

netstat(8), ifconfig(8)

Історія

Команда ping вперше з'явилася в 4.3BSD.

Версія, описана тут, являється її нащадком, специфічним для Лінакса.

Безпека

ping вимагає властивості CAP_NET_RAWIO для свого виконання. Програму можна вживати із дозволом set-uid root.

Наявність

ping є частиною пакету iputils, і останню версію програми можна знайти на анонімному ftp-сервері за адресою ftp://ftp.inr.ac.ru/ip-routing/iputils-current.tar.gz.