Scroll to navigation

PING(8) iputils PING(8)

НАИМЕНОВАНИЕ

ping - посылает пакеты ICMP ECHO_REQUEST хостам сети

СИНОПСИС

ping [-aAbBdCDfhHLnOqrRUvV346] [-c count] [-e identifier] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop...] {destination}

ОПИСАНИЕ

Утилита ping использует протокол ICMP (обязательная дейтаграмма ECHO_REQUEST для получения ICMP ECHO_RESPONSE от хоста или шлюза. Дейтаграммы ECHO_REQUEST содержат заголовок IP и ICMP, за которым следует значение времени, а затем произвольное количество байтов, используемых для заполнения пакета.

Утилита ping работает как с протоколом IPv4, так и с протоколом IPv6. Можно принудительно использовать только один из них, указав -4 или -6.

ping также может отправлять запросы информации об узлах IPv6 (RFC4620). Использование промежуточных переходов hop может быть запрещено, поскольку исходная маршрутизация IPv6 устарела (RFC5095).

ОПЦИИ

-3

Точность RTT (не округлять время результата).

-4

Использовать только IPv4.

-6

Использовать только IPv6.

-a

Звуковой пинг.

-A

Адаптивный ping. Интервал между пакетами подстраивается под время прохождения сигнала в обе стороны, так что в сети фактически присутствует не более одного (или больше, если включена предварительная загрузка) неотвеченных запросов. Интервал по умолчанию составляет 2 мс. Подробнее смотрите в описании опции -i. В сетях с низким RTT этот режим по сути эквивалентен режиму flood.

-b

Разрешить ping на широковещательный адрес.

-B

Не позволять ping изменять исходный адрес зондирования. Адрес привязывается к тому, который был выбран при запуске ping.

-c count

Останов после отправки count пакетов ECHO_REQUEST. При использовании опции deadline утилита ping ожидает count пакетов ECHO_REPLY до окончания времени ожидания.

-C

Вызвать системный вызов connect() при создании сокета.

-d

Установить опцию SO_DEBUG для используемого сокета. По сути, эта опция сокета не используется ядром Linux.

-D

Выводить метку времени (время Unix + микросекунды, как в gettimeofday) перед каждой строкой.

-e identifier

Задаёт поле идентификации ECHO_REQUEST. Значение 0 подразумевает использование raw socket (не поддерживается для ICMP datagram socket). Значение поля можно вывести с помощью опции -v.

-f

Flood ping. Для каждого отправленного ECHO_REQUEST выводится точка “.”, а для каждого полученного ECHO_REPLY — символ возврата каретки. Это позволяет быстро определить, сколько пакетов было потеряно. Если интервал не указан, он устанавливается равным нулю, и пакеты выводятся с той же скоростью, с какой приходят, или сто раз в секунду, в зависимости от того, что больше. Использовать эту опцию с нулевым интервалом может только суперпользователь.

-F flow label

Только для IPv6. Выделить и установить 20-битную метку потока (в шестнадцатеричном формате) для пакетов эхо-запроса. Если значение равно нулю, то ядро выделяет случайную метку потока.

-h

Показать справочные сведения.

-H

Принудительное разрешение DNS-именований для вывода. Полезно при указании числового адреса назначения или при использовании опции -f, которая по умолчанию этого не делает. Это также может помочь обойти проблемы с разрешением DNS. Переопределяет ранее заданную опцию -n. Смотрите также переменную среды IPUTILS_PING_PTR_LOOKUP.

-i interval

Ожидать interval секунд между отправкой каждого пакета. Допустимы действительные числа с точкой в качестве десятичного разделителя (независимо от настроек локали). По умолчанию между отправкой каждого пакета обычно проходит одна секунда, а в режиме flood ожидание не предусмотрено. Только суперпользователь может установить значение интервала менее 2 мс. Для обычного пользователя при широковещательной и многоадресной проверке связи ограничение еще выше: минимум 1 секунда.

-I interface

Значение interface — это либо адрес, либо название интерфейса, либо название VRF. Если interface — это адрес, то исходный адрес устанавливается равным указанному адресу интерфейса. Если interface — это название интерфейса, то исходящий интерфейс устанавливается равным указанному интерфейсу. Если interface — это название VRF, то каждый пакет маршрутизируется с использованием соответствующей таблицы маршрутизации; в этом случае можно повторить опцию -I, чтобы указать исходящий адрес. ПРИМЕЧАНИЕ. Для IPv6 при проверке связи с локальным адресом можно использовать спецификацию канала (с помощью нотации '%' в destination или с помощью этой опции), но это больше не является обязательным требованием.

-l preload

Если указано значение preload, то ping посылает указанное количество пакетов, не дожидаясь ответа. Только суперпользователь может выбрать значение preload больше 3.

-L

Подавлять циклические петли для широковещательных пакетов. Этот флажок применяется только если в качестве целевого адреса указан широковещательный.

-m mark

Использовать метку mark, чтобы пометить исходящие пакеты. Это может быть полезно по целому ряду причин, например для использования маршрутизации на основе политик для выбора конкретной обработки исходящих данных. Требуется возможность CAP_NET_ADMIN или CAP_NET_RAW (начиная с Linux 5.17), смотрите socket(7).

-M pmtudisc_opt

Выберать путь MTU Discovery strategy. pmtudisc_option может быть либо do (установить флажок DF, но при условии проверки ядром PMTU слишком большие пакеты будут отклонены), want (выполнить обнаружение PMTU, фрагментировать локально при большом размере пакета), probe (установить флажок DF и обойти PMTU проверки, полезные для зондирования), или dont (не устанавливать флажок DF).

-N nodeinfo_option

Только IPv6. Отправлять запросы на получение информации об узлах IPv6 (RFC4620) вместо эхо-запросов. Требуется возможность CAP_NET_RAW.

help

Показать справку по поддержке NI.

name

Запросы для получения названий узлов.

ipv6

Запросы для IPv6-адресов. Существует несколько флажков, специфичных для IPv6.

ipv6-global

Запросить глобальные IPv6-адреса.

ipv6-sitelocal

Запросить локальные IPv6-адреса.

ipv6-linklocal

Запросить локальные IPv6-адреса канала.

ipv6-all

Запросить IPv6-адреса на других интерфейсах.

ipv4

Запросы для IPv4-адресов. Существует один флажок, специфичный для IPv4.

ipv4-all

Запросить IPv4-адреса на других интерфейсах.

subject-ipv6=ipv6addr

IPv6 адрес субъекта.

subject-ipv4=ipv4addr

IPv4 адрес субъекта.

subject-name=nodename

Наименование субъекта. Если в нем больше одной точки, предполагается использование полного доменного наименования.

subject-fqdn=nodename

Наименование субъекта. Полное доменное наименование всегда подразумевается.

-n

Только числовой вывод. Попытки поиска символьных наименований для адресов хостов (без обратного разрешения DNS) не предпринимаются. Это значение по умолчанию для числового назначения или опции -f. Переопределяет ранее заданную опцию -H. Смотрите также переменную среды IPUTILS_PING_PTR_LOOKUP.

-O

Перед отправкой следующего пакета сообщить о неотправленном ответе ICMP ECHO. Это полезно делать вместе с установкой временной метки -D для записи вывода в диагностический файл и поиска отсутствующих ответов.

-p pattern

Вы можете указать до 16 “pad” байт для заполнения отправляемого пакета. Это полезно для диагностики проблем с передачей данных в сети. Например, -p ff приведет к тому, что отправленный пакет будет заполнен единицами.

-q

Тихий вывода данных. При запуске и по завершении работы отображаются только итоговые строки.

-Q tos

Установить биты, связанные с качеством обслуживания, в дейтаграммах ICMP. tos может быть десятичным (только ping) или шестнадцатеричным числом.

В RFC2474 эти поля интерпретируются как 8-битные дифференцированные службы (Differentiated Services, DS), состоящие из битов 0-1 (2 младших бита) для отдельных данных и битов 2-7 (6 старших битов) для кодовой точки дифференцированных служб (Differentiated Services Codepoint, DSCP). В RFC2481 и RFC3168 биты 0-1 используются для ECN.

Исторически (согласно RFC1349, устаревшему по сравнению с RFC2474) они интерпретировались следующим образом: бит 0 (младший бит) — зарезервирован (в настоящее время переопределяется как контроль перегруженности), биты 1–4 — тип службы, биты 5–7 (старшие биты) — приоритет.

-r

Обходить обычные таблицы маршрутизации и отправлять данные напрямую на хост через подключенный интерфейс. Если хост не подключен напрямую к сети, возвращается сообщение об ошибке. Эту опцию можно использовать для проверки связи с локальным хостом через интерфейс, для которого нет маршрута, при условии, что также используется опция -I.

-R

Только ping. Запись маршрута. Включает опцию RECORD_ROUTE в пакет ECHO_REQUEST и отображает буфер маршрута в возвращаемых пакетах. Обратите внимание, что размер IP-заголовка позволяет записать только девять таких маршрутов. Многие хосты игнорируют эту опцию или отбрасывают ее.

-s packetsize

Указывает количество отправляемых байтов данных. Значение по умолчанию — 56, что в сочетании с 8 байтами данных заголовка ICMP соответствует 64 байтам данных ICMP. Максимально допустимое значение — 65507 для IPv4 (65467 при -R или -T или промежуточных переходов hop) или 65527 для IPv6, но большинство систем ограничивают это значение меньшим числом, зависящим от системы.

-S sndbuf

Set socket sndbuf. If not specified, it is selected to buffer not more than one packet.

-t ttl

Только ping. Установить время жизни IP.

-T timestamp option

Установить специальные опции временных меток IP. Опция timestamp option может быть tsonly (только временные метки), tsandaddr (временные метки и адреса) или tsprespec host1 [host2 [host3 [host4]]] (временные метки для заранее заданных переходов).

-U

Вывести полную задержку между пользователями (прежнее поведение). Обычно ping выводит время прохождения сигнала по сети в обе стороны, которое может отличаться, например, из-за сбоев DNS.

-v

Подробный вывод. Не подавлять ответы DUP при проверке многоадресного адреса (multicast address).

-V

Показать версию программы и выйти.

-w deadline

Определяет время ожидания в секундах, по истечении которого ping завершит работу независимо от того, сколько пакетов было отправлено или получено. В этом случае ping не останавливается после отправки count пакетов, а ждет либо окончания deadline, либо ответа на count запросов, либо уведомления об ошибке в сети.

-W timeout

Время ожидания ответа в секундах. Эта опция влияет только на время ожидания при отсутствии ответов, в противном случае ping ожидает два значения RTT. Допустимое значение — действительное число с точкой в качестве десятичного разделителя (независимо от настроек локали). 0 означает бесконечное время ожидания.

При использовании ping для изоляции сбоев сначала следует запустить его на локальном хосте, чтобы убедиться, что интерфейс локальной сети настроен и работает. Затем все более удаленные хосты и шлюзы должны быть проверены на наличие сбоев “pinged”. Вычисляется время прохождения в оба конца и статистика потерь пакетов. Если получены повторяющиеся пакеты, они не учитываются при расчете потерь пакетов, хотя время прохождения этих пакетов в оба конца используется при расчете минимальных, средних или максимальных значений времени прохождения туда и обратно.

Стандартное отклонение для совокупности (mdev) — это, по сути, среднее значение отклонения каждого пинга RTT от среднего значения RTT. Чем выше mdev, тем более изменчив показатель RTT (с течением времени). При высокой изменчивости RTT возникают проблемы со скоростью при массовой передаче данных (она занимает больше времени, чем необходимо, поскольку из-за изменчивости - отправителю приходится ждать подтверждения ACK), а качество VoIP-связи снижается.

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

Эта программа предназначена для тестирования, измерения и управления сетью. Из-за нагрузки, которую она может оказывать на сеть, не рекомендуется использовать ping в обычном режиме или в автоматизированных скриптах.

ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ

Переменная среды IPUTILS_PING_PTR_LOOKUP со значением 0 по умолчанию отключает обратное разрешение DNS (поиск PTR). Это значение переопределяется опцией -H или -n.

СТАТУС ВЫХОДА

Если ping не получит ни одного ответного пакета, то завершится с кодом 1. Если указаны опции count и deadline, и к моменту наступления deadline будет получено менее count пакетов, то утилита также завершится с кодом 1. При других ошибках утилита завершается с кодом 2. В противном случае она завершается с кодом 0. Таким образом, по коду завершения можно определить, активен ли хост.

ЛОКАЛЬНЫЕ АДРЕСАТЫ IPv6

Для IPv6, когда адрес назначения имеет локальную для канала область видимости, а ping использует сокеты для передачи дейтаграмм ICMP, ICMP datagram sockets, то необходимо указать выходной интерфейс. Если ping использует сокеты raw (raw sockets), то указывать выходной интерфейс не обязательно, но желательно, чтобы избежать неоднозначности при наличии нескольких возможных выходных интерфейсов.

Есть два способа указать выходной интерфейс:

u0441] использованием нотации %

К адресу назначения добавляется постфикс % и название выходного интерфейса или его индекс, например:

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

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

u0441] пользованием опции -I option

При использовании сокетов для передачи дейтаграмм ICMP ICMP datagram sockets этот метод поддерживается в следующих версиях ядра: 5.17, 5.15.19, 5.10.96, 5.4.176, 4.19.228, 4.14.265. Однако, он не поддерживается в musl libc.

ПОДРОБНОСТИ ПАКЕТА ICMP

Заголовок IP без параметров имеет размер 20 байтов. Пакет ICMP ECHO_REQUEST содержит дополнительные 8 байтов, предназначенные для заголовка ICMP. Если указан параметр packetsize, то он обозначает размер этого дополнительного фрагмента данных (по умолчанию — 56). Таким образом, объем данных, содержащихся в IP-пакете типа ICMP ECHO_REPLY, всегда будет на 8 байт больше, чем запрошенное пространство данных (заголовок ICMP).

Если размер области данных не меньше размера структуры timeval, то ping использует начальные байты этой области для хранения метки времени, которая используется при вычислении времени прохождения сигнала в обе стороны. Если размер области данных меньше, то время прохождения сигнала в обе стороны не учитывается.

ДУБЛИРУЮЩИЕСЯ И ПОВРЕЖДЁННЫЕ ПАКЕТЫ

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

Поврежденные пакеты, очевидно, являются серьезной причиной для тревоги и часто указывают на неисправность аппаратуры где-то в цепочке ping packet's path (в сети или на хостах).

КОЛЛИЗИИ ИДЕНТИФИКАТОРА ID

В отличие от TCP и UDP, которые используют порт для уникальной идентификации получателя данных, ICMP использует для идентификации поле идентификатора (ID). Таким образом, если на одном компьютере в одно и то же время два процесса ping используют один и тот же идентификатор, эхо-ответ может быть отправлен не тому получателю. Это известная проблема, связанная с ограниченным размером 16-битного поля идентификатора. Это историческое ограничение протокола, которое на данный момент невозможно устранить, если только мы не будем кодировать идентификатор в полезную нагрузку пакета ping. ping выводит ошибку DIFFERENT ADDRESS, а потеря пакетов отрицательна.

ping использует PID для получения уникального номера. Значение по умолчанию для /proc/sys/kernel/pid_max равно 32768. В системах, где часто используется ping и где pid_max превышает 65535, неизбежно возникновение коллизий.

ТРУДНОСТИ РАЗЛИЧНЫХ ШАБЛОНОВ ДАННЫХ

Сетевой уровень (между) никогда не должен обрабатывать пакеты по-разному в зависимости от данных, содержащихся в части данных. К сожалению, известно, что проблемы, зависящие от данных, проникают в сети и остаются незамеченными в течение длительного периода времени . Во многих случаях конкретный шаблон, с которым могут возникнуть проблемы, - это то, что не содержит достаточного количества переходов, таких как все единицы или все нули, или шаблон прямо на краю, такой как почти все нули. Необязательно указывать шаблон данных со всеми нулями (например) в командной строке, потому что интересующий шаблон находится на уровне канала передачи данных, и связь между тем, что вы вводите, и тем, что передают контроллеры, может быть сложной.

Это значит, что если у вас проблема, связанная с данными, вам, скорее всего, придется провести множество тестов, чтобы ее выявить. Если вам повезет, вы сможете найти файл, который либо не может быть отправлен по вашей сети (can't be sent), либо передается гораздо дольше, чем другие файлы аналогичной длины. Затем вы можете проверить этот файл на наличие повторяющихся шаблонов с помощью опции -p ping.

ПОДРОБНОСТИ TTL


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

Поле TTL для TCP-пакетов может принимать различные значения. Максимально возможное значение этого поля — 255, рекомендуемое начальное значение — 64. Подробнее смотрите в разделе «Интерфейс TCP низшего уровня» в RFC9293.

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

Не изменять это значение; так было в системах Berkeley Unix до выпуска 4.3BSD Tahoe. В этом случае значение TTL в полученном пакете будет равно 255 минус количество маршрутизаторов на пути туда и обратно.

Установить его в 255: это то, что системы Berkeley Unix делают сейчас. В этом случае значение TTL в принятом пакете будет 255 минус количество пройденных маршрутизаторов от from удалённой системы до to хоста.

Установливать другое значение. Некоторые машины используют для ICMP-пакетов то же значение, что и для TCP-пакетов, например 30 или 60. Другие могут использовать совершенно произвольные значения.

ПРОГРАММНЫЕ ОШИБКИ

Многие хосты и шлюзы игнорируют опцию RECORD_ROUTE.

Однако, максимальная длина заголовка IP слишком мала, чтобы такие опции, как RECORD_ROUTE, были полностью полезны. Однако с этим мало что можно сделать.

В целом Flood -пингование не рекомендуется, а Flood -пингование на широковещательный адрес следует проводить только в строго контролируемых условиях.

СМОТРИТЕ ТАКЖЕ

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. Программа может использоваться с установленным битом set-uid root.

ДОСТУПНОСТЬ

Утилита ping является частью пакета iputils.

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Николай Шафоростов <shafff@ukr.net> и Aleksandr Felda <afelda@ro.ru>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.

iputils 20250605