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-заголовки, за которыми следует структура timeval, а затем произвольное количество байтов «заполнителя», используемых для заполнения пакета.
ping работает как с IPv4, так и с IPv6. Использование только одного из них можно принудительно установить, указав -4 или -6.
ping также может отправлять запросы на получение информации узла IPv6 (RFC4620). Промежуточные переходы могут быть запрещены, поскольку маршрутизация IPv6 с указанием источника была прекращена (RFC5095).
ОПЦИИ
-3
Точность измерения времени (не округлять полученное время).
-4
Использовать только IPv4.
-6
Использовать только IPv6.
-a
Звуковой пинг.
-A
Адаптивный пинг. Интервал между пакетами адаптируется к времени кругового обмена, так что в сети фактически присутствует не более одного (или более, если preload установлен) неотвеченного зонда. Значение по умолчанию — 2 мс, для получения дополнительной информации см. опцию -i. В сетях с низким временем задержки этот режим по сути эквивалентен режиму flood.
-b
Разрешить пинговать широковещательный адрес.
-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 подразумевает использование необработанного сокета (не поддерживается в ICMP-пакете). Значение поля может быть выведено с помощью опции -v.
-f
Пинг в режиме flood. Для каждого отправленного пакета ECHO_REQUEST печатается точка «.», а для каждого полученного пакета ECHO_REPLY печатается символ возврата. Это обеспечивает быстрое отображение количества отбрасываемых пакетов. Если интервал не указан, он устанавливает интервал на ноль и выводит пакеты так быстро, как они приходят, или со скоростью сто раз в секунду, в зависимости от того, что больше. Только суперпользователь может использовать эту опцию с нулевым интервалом.
-F flow_label
Только для IPv6. Выделяет и устанавливает 20-битный flow label (в шестнадцатеричном формате) для пакетов echo request. Если значение равно нулю, ядро выделяет случайный flow label.
-h
Показать справку.
-H
Принудительно выполнить разрешение DNS для вывода. Полезно для числовых адресов назначения или опции -f, которые по умолчанию не выполняют его. Также может помочь обойти проблемы с разрешением DNS. Отменяет ранее определенную опцию -n. См. также переменную окружения IPUTILS_PING_PTR_LOOKUP.
-i интервал
Интервал ожидания в секундах между отправкой каждого пакета. Допускается использование числа с плавающей точкой с точкой в качестве десятичного разделителя (независимо от настроек локали). По умолчанию интервал ожидания составляет одну секунду между каждым пакетом или отсутствие ожидания в режиме flood. Только суперпользователь может установить интервал на значения меньше 2 мс. Пинг для широковещательных и многоадресных адресов имеет еще более высокое ограничение для обычных пользователей: минимум 1 секунда.
-I интерфейс
Интерфейс может быть адресом, именем интерфейса или именем VRF. Если интерфейс является адресом, он устанавливает исходный адрес в указанный адрес интерфейса. Если интерфейс является именем интерфейса, он устанавливает исходный интерфейс в указанный интерфейс. Если интерфейс является именем VRF, каждый пакет маршрутизируется с использованием соответствующей таблицы маршрутизации; в этом случае опцию -I можно повторить для указания исходного адреса. ПРИМЕЧАНИЕ: для IPv6, при пинге на адрес с областью действия link-local, можно использовать указание области действия (с помощью нотации '%', в адресе назначения, или с помощью этой опции), но это больше не требуется.
-l предварительная_загрузка
Если указана предварительная_загрузка, ping отправляет столько пакетов, не дожидаясь ответа. Только суперпользователь может выбрать предварительную_загрузку больше 3.
-L
Подавляет зацикливание многоадресных пакетов. Этот флаг применяется только в том случае, если адрес назначения ping является многоадресным.
-m метка
Использовать метку для маркировки пакетов, отправляемых наружу. Это полезно для различных целей внутри ядра, таких как использование политической маршрутизации для выбора конкретной исходящей обработки. Требуется возможность CAP_NET_ADMIN или CAP_NET_RAW (начиная с Linux 5.17), см. socket(7).
-M pmtudisc_opt
Выберите стратегию Path MTU Discovery. pmtudisc_option может быть либо do (установить флаг DF, но подвергать проверкам PMTU ядром, пакеты, превышающие размер, будут отклонены), want (выполнить PMTU discovery, фрагментировать локально, когда размер пакета большой), probe (установить флаг DF и обойти проверки PMTU, полезно для зондирования) или dont (не устанавливать флаг DF).
-N nodeinfo_option
Только для IPv6. Отправлять IPv6 Node Information Queries (RFC4620) вместо Echo Request. Требуется возможность 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 байтов «заполнителя» для заполнения отправляемого пакета. Это полезно для диагностики проблем в сети, зависящих от данных. Например, -p ff приведет к тому, что отправленный пакет будет заполнен единицами.
-q
Тихий режим. Ничего не отображается, кроме строк сводки во время запуска и после завершения.
-Q tos
Установить биты, связанные с качеством обслуживания (QoS), в пакетах 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 packetsize
Указывает количество байтов данных для отправки. По умолчанию используется значение 56, что в сочетании с 8 байтами заголовка ICMP дает 64 байта данных ICMP. Максимальное допустимое значение — 65507 для IPv4 (65467 при использовании опций -R, -T или промежуточных узлов) или 65527 для IPv6, но большинство систем ограничивают это значение меньшим, зависящим от системы числом.
-S sndbuf
Установить размер буфера сокета sndbuf. Если не указано, он выбирается таким образом, чтобы буферизировать не более одного пакета.
-t ttl
Только для ping. Установить время жизни IP (TTL).
-T timestamp option
Установить специальные IP-опции временной метки. Опция временной метки может быть tsonly (только временные метки), tsandaddr (временные метки и адреса) или tsprespec host1 [host2 [host3 [host4]]] (временные метки для предопределенных узлов).
-U
Выводить полную задержку между пользователями (прежнее поведение). Обычно ping выводит сетевое время кругового обмена, которое может отличаться, например, из-за сбоев DNS.
-v
Подробный вывод. Не подавлять ответы DUP при отправке запросов на многоадресный адрес.
-V
Показать версию и выйти.
-w deadline
Укажите время ожидания в секундах, после которого ping завершит работу, независимо от количества отправленных или полученных пакетов. В этом случае ping не останавливается после отправки указанного количества пакетов, а ждет либо истечения срока действия, либо получения ответов на все запросы, либо получения уведомления об ошибке из сети.
-W timeout
Время ожидания ответа в секундах. Эта опция влияет только на время ожидания в отсутствие каких-либо ответов, в противном случае ping ждет в течение двух периодов времени кругового обмена данными (RTT). Допустимо использование чисел с плавающей запятой, где десятичным разделителем является точка (независимо от настроек локали). 0 означает бесконечное время ожидания.
При использовании ping для изоляции неисправностей, сначала следует запустить его на локальном хосте, чтобы убедиться, что локальный сетевой интерфейс включен и работает. Затем следует "проверить" хосты и шлюзы, находящиеся все дальше и дальше. Вычисляются время кругового обмена данными и статистика потерь пакетов. Если получены дублирующиеся пакеты, они не включаются в расчет потерь пакетов, хотя время кругового обмена данными этих пакетов используется для вычисления минимального/среднего/максимального/стандартного отклонения времени кругового обмена данными.
Стандартное отклонение (mdev) представляет собой среднее значение того, насколько каждый RTT-запрос ping отличается от среднего RTT. Чем выше mdev, тем больше изменчивость RTT (со временем). При высокой изменчивости RTT вы столкнетесь с проблемами скорости при массовых передачах данных (они займут больше времени, чем это строго необходимо, поскольку изменчивость в конечном итоге заставит отправителя ждать подтверждения), а также у вас будет среднее или плохое качество VoIP.
Когда указанное количество пакетов отправлено (и получено) или когда программа завершается сигналом SIGINT, отображается краткое резюме. Более короткую текущую статистику можно получить без завершения процесса с помощью сигнала SIGQUIT.
Эта программа предназначена для использования в сетевых тестах, измерениях и управлении. Из-за нагрузки, которую она может оказывать на сеть, нецелесообразно использовать ping во время нормальной работы или из автоматизированных скриптов.
Окружающая среда
Переменная окружения IPUTILS_PING_PTR_LOOKUP, установленная в 0, отключает обратное разрешение DNS (PTR-поиск) по умолчанию. Она будет переопределена опцией -H или -n.
КОДЫ ВЫХОДА
Если ping не получает никаких ответных пакетов, он завершается с кодом 1. Если указано как количество пакетов, так и время ожидания, и к моменту истечения времени ожидания получено меньше, чем указанное количество пакетов, он также завершается с кодом 1. При возникновении других ошибок он завершается с кодом 2. В противном случае он завершается с кодом 0. Это позволяет использовать код выхода для определения, активен ли хост или нет.
IPv6-адреса локальной сети
Для IPv6, когда адрес назначения имеет локальную область видимости, и ping использует ICMP-датаграммы, необходимо указать выходной интерфейс. Когда ping использует необработанные сокеты, указание выходного интерфейса не является строго необходимым, но это следует сделать, чтобы избежать неоднозначности, если существует несколько возможных выходных интерфейсов.
Существует два способа указать выходной интерфейс:
используя нотацию %
Адрес назначения дополняется символом % и именем выходного интерфейса или индексом интерфейса (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. Также он не поддерживается в musl libc.
ДЕТАЛИ ICMP-ПАКЕТОВ
IP-заголовок без опций имеет 20 байт. ICMP-пакет ECHO_REQUEST содержит дополнительные 8 байт ICMP-заголовка и произвольное количество данных. Если указан размер пакета (packetsize), это указывает размер этой дополнительной части данных (по умолчанию — 56). Таким образом, объем данных, полученный внутри IP-пакета типа ICMP ECHO_REPLY, всегда на 8 байт больше, чем запрошенный объем данных (ICMP-заголовок).
Если размер области данных составляет не менее размера структуры timeval, ping использует первые байты этой области для включения метки времени, которую он использует при вычислении времени кругового обмена. Если область данных короче, время кругового обмена не выводится.
ДУБЛИКАТЫ И ПОВРЕЖДЕННЫЕ ПАКЕТЫ
ping будет сообщать о дубликатах и поврежденных пакетах. Дубликаты не должны возникать и, по-видимому, вызываются ненадлежащими повторными передачами на уровне канала связи. Дубликаты могут возникать в различных ситуациях и редко (если вообще когда-либо) являются хорошим признаком, хотя наличие небольшого количества дубликатов не всегда должно вызывать тревогу.
Поврежденные пакеты, очевидно, являются серьезной причиной для беспокойства и часто указывают на неисправное оборудование где-то на пути пакета ping (в сети или на хостах).
КОЛЛИЗИИ ID
В отличие от TCP и UDP, которые используют порты для однозначной идентификации получателя при доставке данных, ICMP использует поле идентификатора (ID) для идентификации. Поэтому, если на одной и той же машине в одно и то же время два процесса ping используют один и тот же ID, эхо-ответ может быть доставлен не тому получателю. Это известная проблема из-за ограниченного размера 16-битного поля ID. Это историческое ограничение протокола, которое нельзя исправить в данный момент, если мы не закодируем ID в полезную нагрузку пакета ping. ping выводит сообщение об ошибке DIFFERENT ADDRESS, и потеря пакетов становится отрицательной.
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 из полученного пакета. Когда удаленная система получает пакет ping, она может выполнить одно из трех действий с полем TTL в своем ответе:
Не изменять его; это делали системы Berkeley Unix до выпуска 4.3BSD Tahoe. В этом случае значение TTL в полученном пакете будет равно 255 минус количество маршрутизаторов в пути в обе стороны.
Установить его в 255; это делают современные системы Berkeley Unix. В этом случае значение TTL в полученном пакете будет равно 255 минус количество маршрутизаторов в пути от удаленной системы до хоста, выполняющего ping.
Установить его в другое значение. Некоторые машины используют одно и то же значение для ICMP-пакетов, которое они используют для TCP-пакетов, например, 30 или 60. Другие могут использовать совершенно произвольные значения.
ОШИБКИ
Многие хосты и шлюзы игнорируют опцию RECORD_ROUTE.
Максимальная длина IP-заголовка слишком мала, чтобы опция, такая как RECORD_ROUTE, была полностью полезной. Однако мало что можно с этим сделать.
Не рекомендуется выполнять массовую отправку ping, а массовая отправка ping на широковещательный адрес должна выполняться только в строго контролируемых условиях.
ССЫЛКИ
ИСТОРИЯ
Команда 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.