PING(8)

НАЗВА
ping — надсилання ICMP ECHO_REQUEST до вузлів мережі

КОРОТКИЙ ОПИС

ping [-aAbBdCDfhHLnOqrRUvV346] [-c кількість] [-e ідентифікатор] [-F мітка_потоку] [-i інтервал] [-I інтерфейс] [-l попереднє_завантаження] [-m позначка] [-M параметр_pmtudisc] [-N параметр_nodeinfo] [-w строк_дії] [-W час_очікування] [-p взірець] [-Q tos] [-s розмір_пакета] [-S sndbuffer] [-t ttl] [-T параметр часової позначки] [hop...] {призначення}

ОПИС

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

ping працює як з IPv4, так і з IPv6. Наказати програмі використовувати один із протоколів можна за допомогою параметра -4 або -6.

ping може також надсилати запити щодо відомостей вузла IPv6 (RFC4620). Проміжні переходи може бути заборонено, оскільки маршрутизація джерела у IPv6 вважається застарілою (RFC5095).

ПАРАМЕТРИ

-3
    Точність RTT (не округлювати остаточний час).

-4
    Використовувати лише IPv4.

-6
    Використовувати лише IPv6.

-a
    Звуковий луна-імпульс.

-A
    Адаптивне зондування. Інтервал між пакетами адаптується до часу проходження сигналу так, щоб у мережі одночасно було не більше одного (або більшої кількості, якщо встановлено попереднє завантаження) зондування без відповіді. Типовий інтервал складає 2 мілісекунди, докладніше про це в описі параметра -i. У мережах із низьким часом проходження сигналу (RTT) цей режим є по суті еквівалентом режим заповнення.

-b
    Дозволити зондування адреси трансляції.

-B
    Не дозволяти ping змінювати адресу джерела зондувань. Адресу буде пов'язано із вибраною на момент запуску ping.

-c кількість
    Зупинитися після надсилання кількості пакетів ECHO_REQUEST. Із параметром строк_дії ping очікує на кількість пакетів ECHO_REPLY, аж доки завершиться час очікування.

-C
    Викликати системну функцію connect() при створенні сокета.

-d
    Встановити параметр SO_DEBUG для використано сокета. Насправді, цей параметр сокета не використовується ядром Linux.

-D
    Вивести часову позначку (час unix + мікросекунди, як у gettimeofday) перед кожним рядком.

-e ідентифікатор
    Встановити поле ідентифікації ECHO_REQUEST. Значення 0 неявно визначає використання сокета без обробки (його підтримку не передбачено для сокета датаграми ICMP). Значення поля може бути виведено з параметром -v.

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

-F мітка потоку
    Лише IPv6. Розмістити і встановити 20-бітову мітку потоку (у шістнадцятковому форматі) для пакетів запиту щодо луна-сигналу. Якщо встановлено нульове значення, ядро розміщує випадкову мітку потоку.

-h
    Показати довідку.

-H
    Примусове визначення назв DNS у виведених даних. Корисне для числового визначення призначення або використання параметра -f, де типово таке визначення не виконується. Також може допомогти у обході проблем із визначенням DNS. Має пріоритет над раніше визначеним параметром -n. Див. також змінну середовища IPUTILS_PING_PTR_LOOKUP.

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

-I інтерфейс
    Значення аргументу інтерфейс є або адреса, або назва інтерфейсу, або назва VRF. Якщо інтерфейсом буде адреса, параметр встановлює вказану адресу інтерфейсу для адреси джерела. Якщо інтерфейсом буде назва інтерфейсу, вказаний інтерфейс буде встановлено як інтерфейс джерела. Якщо інтерфейсом буде назва VRF (віртуальної маршрутизації і переспрямовування), кожен пакет буде маршрутизовано за допомогою відповідної таблиці маршрутизації; у цьому випадку, параметр -I можна повторити для визначення адреси джерела. ЗАУВАЖЕННЯ: для IPv6 при виконанні зондування адреси із локальною для посилання областю видимості, можна скористатися специфікацією посилання (за допомогою «%»-позначення у призначенні або за допомогою цього параметра), але вона вже не є обов'язковою.

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

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

-m позначка
    Скористатися позначкою для позначення вихідних пакетів. Корисно з багатьох причин у ядрі, зокрема використання маршрутизації за правилами для вибору певної обробки вихідних даних. Потрібна можливість CAP_NET_ADMIN або CAP_NET_RAW (з часу Linux 5.17), див. socket(7).

-M параметр_pmtudisc
    Вибрати стратегію визначення MTU для шляху. Аргументом параметр_pmtudisc може бути або do (встановити прапорець DF, але через перевірки PMTU у ядрі, надто великі пакети буде відкинуто), або want (виконати виявлення PMTU, фрагментувати локально, якщо розмір пакета великий), або dont (не встановлювати прапорець DF).

-N параметр_nodeinfo
    Лише IPv6. Надсилати запити щодо відомостей щодо вузла IPv6 (RFC4620), замість запиту луна-сигналу. Потрібна можливість CAP_NET_RAW.

    help
        Показати довідку щодо підтримки NI.

    назва
        Надіслати запит щодо назв вузлів.

    ipv6
        Надіслати запит щодо адрес IPv6. Передбачено декілька специфічних для IPv6 прапорців.

        ipv6-global
            Надіслати запит щодо адрес IPv6 загальної області видимості.

        ipv6-sitelocal
            Надіслати запит щодо адрес IPv6 локального місця.

        ipv6-linklocal
            Надіслати запит щодо адрес IPv6 локального посилання.

        ipv6-all
            Надіслати запит щодо адрес IPv6 на інших інтерфейсах.

    ipv4
        Надіслати запит щодо адрес IPv4. Передбачено один специфічний для IPv4 прапорець.

        ipv4-all
            Надіслати запит щодо адрес IPv4 на інших інтерфейсах.

    subject-ipv6=адреса_ipv6
        Адреса об'єкта IPv6.

    subject-ipv4=адреса_ipv4
        Адреса об'єкта IPv4.

    subject-name=назва_вузла
        Назва об'єкта. Якщо містить декілька крапок, буде використано повну назву домену.

    subject-fqdn=назва_вузла
        Назва об'єкта. Завжди буде використано повну назву домену.

-n
    Лише числове виведення даних. Спроба пошуку символічних назв для адрес вузлів не виконуватиметься (без визначення зворотного DNS). Це типова поведінка для числової форми запису призначення або використання параметра -f. Має пріоритет над раніше визначеним параметром -H. Див. також змінну середовища IPUTILS_PING_PTR_LOOKUP.

-O
    Повідомляти про нештатні відповіді ECHO ICMP до надсилання наступного пакета. Корисно разом із часовою позначкою -D, щоб записувати виведені дані до діагностичного файла і шукати пропущені відповіді.

-p взірець
    Ви можете вказати до 16 «доповнювальних» байтів для доповнення пакета, який ви надсилаєте. Корисно для діагностування проблем із даними у мережі. Наприклад, -p ff призведе до доповнення надісланого пакета логічними одиницями.

-q
    Виведення без повідомлень. Нічого не буде виведено, окрім рядків резюме під час запуску і завершення обробки.

-Q tos
    Встановити біти, які пов'язано із якістю обслуговування (Quality of Service) у датаграмах ICMP. Аргументом tos може бути десяткове (лише ping) або шістнадцяткове число.

    У RFC2474 ці поля має бути оброблено як 8-бітові диференційовані служби (DS), що складається з таких компонентів: бітів 0-1 (2 нижчих бітів) окремих даних і бітів 2-7 (6 вищих бітів) диференційованої кодової точки служб (DSCP). У RFC2481 і RFC3168 біти 0-1 використано для ECN.

    Історично (RFC1349, став застарілим після впровадження RFC2474), ці дані мало бути оброблено так: біт 0 (нижчий біт) зарезервовано (у поточній версії перевизначено як керування перевантаженням), біти 1-4 для типу служби і біти 5-7 (вищі біти) для пріоритетності.

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

-R
    Лише ping. Записувати маршрут. Включає параметр RECORD_ROUTE до пакета ECHO_REQUEST і виводить буфер маршруту для повернутих пакетів. Зауважте, що у заголовку IP може міститися лише дев'ять таких маршрутів. Багато вузлів мережі ігнорують або відкидають цей параметр.

-s розмір_пакета
    Вказує кількість байтів даних, які слід надіслати. Типовим значенням є 56, тобто 64 байтів даних ICMP при поєднанні із 8 байтами даних заголовка ICMP. Максимальне дозволене значення — 65507 для IPv4 (65467, що використано -R або -T чи проміжні переходи) або 65527 для IPv6, але у більшості систем обмеження є нижчим, залежним від системи числом.

-S sndbuf
    Встановити sndbuf буфера. Якщо не вказано, буде вибрано так, щоб розмір буфера не перевищував розміру одного пакета.

-t ttl
    Лише ping. Встановити строк дії IP.

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

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

-v
    Режим докладного виведення. Не придушувати відповіді DUP при зондуванні трансляційної адреси.

-V
    Вивести дані щодо версії і завершити роботу.

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

-W час_очікування
    Час очікування на відповідь, у секундах. Параметр впливає на час очікування, лише якщо немає відповідей. Якщо відповіді є ping очікує на два часи проходження сигналу (RTT). Можна використовувати дійсні числа із крапкою для відокремлення десяткової дробової частини (незалежно від роздільника у вашій локалі). 0 означає «нескінченний час очікування».

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

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

Якщо було надіслано (і отримано) вказану кількість пакетів або якщо роботу програми було перервано сигналом SIGINT, буде виведено коротке резюме. Коротші поточні статистичні дані можна отримати без переривання процесу за допомогою сигналу SIGQUIT.

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

СЕРЕДОВИЩЕ

Встановлене нульове значення IPUTILS_PING_PTR_LOOKUP вимикає типове визначення зворотного DNS (пошук PTR). Буде перевизначено параметром -H або -n.

СТАН ВИХОДУ

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

LINK-LOCAL ПРИЗНАЧЕННЯ IPV6

Для IPv6, якщо адреса призначення належить до області link-local і ping використовує сокети датаграми ICMP, має бути вказано інтерфейс виведення даних. Якщо ping використовує сокети без обробки, необхідності у визначенні інтерфейсу виведення даних немає, але його слід визначити, щоб уникнути неоднозначності, якщо існує декілька можливих інтерфейсів виведення даних.

Передбачено два способи визначити інтерфейс виведення даних:

• з використанням % notation
    До адреси призначення буде дописано постфікс % та назву інтерфейсу виведення або ifindex. Приклад:

    ping fe80::5054:ff:fe70:67bc%eth0

    ping fe80::5054:ff:fe70:67bc%2

• з використанням -I параметр
    При використанні сокетів датаграми ICMP підтримку цього методу передбачено з таких версій ядра: 5.17, 5.15.19, 5.10.96, 5.4.176, 4.19.228, 4.14.265. Крім того, його підтримку не передбачено для libc musl.

ПОДРОБИЦІ ЩОДО ПАКЕТІВ ICMP

Розмір заголовка IP без параметрів складає 20 байтів. Пакет ICMP ECHO_REQUEST містить додаткові 8 байтів заголовка ICMP з наступним довільним об'ємом даних. Якщо вказано аргумент розмір_пакета, цей розмір визначатиме розмір додаткового фрагмента даних (типовим є значення). Таким чином, об'єм даних, які отримано у пакеті IP типу ICMP ECHO_REPLY завжди перевищуватиме на 8 байтів об'єм даних, щодо якого надійшов запит (заголовок ICMP).

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

ДУБЛЬОВАНІ ТА ПОШКОДЖЕНІ ПАКЕТИ

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

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

ЗБІГИ ІДЕНТИФІКАТОРІВ

На відміну від TCP і UDP, де порт використовують для однозначної ідентифікації одержувача для доставки даних, у ICMP для ідентифікації використовують поле ідентифікатора (ID). Таким чином, якщо на одній машині одночасно два процеси ping використовують той самий ідентифікатор, відповідь на зондування може бути доставлено неправильному одержувачу. Це відома проблема через обмежений розмір 16-бітного поля ID. Це історичне обмеження протоколу, яке неможливо виправити на даний момент, якщо ми не закодуємо ідентифікатор у корисних даних пакета ping. ping виводить помилку ІНША АДРЕСА і встановлює для втрати пакетів від'ємне значення.

У ping для отримання однозначного числа використано PID. Типовим значенням /proc/sys/kernel/pid_max є 32768. У системах, які широко використовують ping із встановленим значенням pid_max, що перевищує 65535, можуть траплятися збіги ідентифікаторів.

СПРОБИ ВИКОРИСТАННЯ ІНШИХ ВЗІРЦІВ ДАНИХ

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

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

ПОДРОБИЦІ ЩОДО TTL

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

Поле TTL для пакетів TCP може приймати різні значення. Максимальним можливим значенням для цього поля є 255, а рекомендованим початковим — 64. Щоб дізнатися більше, ознайомтеся із розділом щодо TCP/низькорівневого інтерфейсу у RFC9293.

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

    • Не змінювати його; це те, що робили системи Berkeley Unix до випуску 4.3BSD Tahoe. У цьому випадку значенням TTL у отриманому пакеті буде 255 мінус кількість маршрутизаторів на шляху проходження сигналу.

    • Встановити значення 255; це те, що роблять сучасні системи Berkeley Unix. У цьому випадку значенням TTL у отриманому пакеті буде 255 мінус кількість маршрутизаторів на шляху від віддаленої системи до вузла, який зондують за допомогою ping.

    • Встановити якесь інше значення. На деяких машинах використовують те саме значення для пакетів ICMP, що і для пакетів TCP, наприклад 30 або 60. Інші можуть використовувати якісь зовсім випадкові значення.

ВАДИ

    • Багато вузлів і шлюзів ігнорують параметр RECORD_ROUTE.

    • Максимальна довжина заголовка IP є надто малою для параметрів, подібних до RECORD_ROUTE, щоб він міг бути корисним. Втім, з цим нічого не зробиш.

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

ДИВ. ТАКОЖ

ip(8), ss(8).

ЖУРНАЛ

Команда ping з'явилася у 4.3BSD.

На цій сторінці підручника описано її похідну, специфічну для Linux.

Починаючи з версії s20150815, виконуваний файл ping6 вилучено з пакунка. Його об'єднано із ping. Створення символічного посилання із назвою ping6, яке вказує на ping, надасть у ваше розпорядження ті самі функціональні можливості, що і у попередніх версіях.

БЕЗПЕКА

ping потребує можливості CAP_NET_RAW, щоб програму можна було виконати 1) якщо програму використовують для запитів, відмінних від луна-сигналів (див. параметр -N) або якщо для поля розпізнавання встановлено 0 для ECHO_REQUEST (див. -e), або 2) якщо у ядрі не передбачено підтримки сокетів датаграм ICMP, або 3) якщо користувачеві не дозволено створювати сокет луна-сигналу ICMP. Програмою можна користуватися із визначенням біта запуску від імені root.

ДОСТУПНІСТЬ

ping є частиною пакунка iputils.

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Yuri Chornoivan <yurchor@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html). НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.