ping

Отправка ICMP-пакетов ECHO_REQUEST хостам в сети (UNIX)

Синтаксис:

ping [-aDdfLnoPQqRrv] [-c количество] [-E политика] [-g шлюз] [-h хост] [-I адрес_интерфейса] [-i интервал] [-l предварительная_нагрузка] [-p шаблон] [-s размер_пакета] [-t тип_обслуживания] [-T предельное_время_существования] [-w максимальный_период_ожидания] хост

Опции:

-a
Воспроизводить звуковой сигнал (путем отправки символа ASCII BEL в стандартный поток ошибок) после получения каждого недублированного ответа. В целях защиты психического здоровья пользователя эта опция отключается при использовании опции -f для выполнения тестирования в режиме лавинной отправки пакетов.
-c количество
Остановиться после отправки (и получения) указанного количества пакетов ECHO_RESPONSE.
-D
Установить бит Не фрагментировать в заголовке IP-пакета. Эта опция предназначена для определения максимального размера передаваемого по маршруту пакета.
-d
Установить опцию SO_DEBUG для используемого сокета.
-E политика
Определить политику IPsec для пакетов.
-f
Выполнить тестирование в режиме "лавинной отправки пакетов": отправлять пакеты сразу после получения или со скоростью сто раз в секунду, в зависимости от того, какой из этих двух методов работает быстрее. Для каждого отправленного пакета ECHO_REQUEST выводится символ ".", для каждого полученного пакета ECHO_REPLY выводится символ возврата на позицию. Это позволяет оперативно предоставить информацию о количестве проигнорированных пакетов.

Note: Только пользователь с полномочиями суперпользователя (root) может использовать опцию -f. Тем не менее, применять ее следует с осторожностью, поскольку это может повлечь за собой возникновение высокой нагрузки на сеть.

-g шлюз
Использовать маршрутизацию через заданные узлы (Loose Source Routing) для отправки пакетов ECHO_REQUEST через указанный шлюз. По умолчанию используется таблица маршрутизации.
-h хост
Альтернативный способ определения хоста-получателя (вместо последнего аргумента).
-I адрес_интерфейса
Передавать направленные дейтаграммы через сетевой интерфейс, заданный посредством имени хоста или IP-адреса интерфейса.
-i интервал
Отправлять пакеты с указанным интервалом (в секундах). Значение по умолчанию – одна секунда. Для опции -f значение аргумента интервал составляет 0,01 секунды.
-l предварительная_нагрузка
Отправить указанное количество пакетов с максимально возможной скоростью и затем вернуться к нормальному поведению. Эта опция может применяться только суперпользователем.
-L
Отключить кольцевую проверку при отправке адресатам многоадресной передачи для исключения обнаружения ICMP-запросов передающим хостом.
-n
Вывести только числовые данные. Поиск адресов хостов по символьным именам не выполняется.
-o
Завершить работу в штатном режиме после получения одного пакета ответа.
-P
Использовать псевдослучайную последовательность для данных вместо фиксированной последовательности по умолчанию с приращением 8-битовых целых чисел. Данную опцию удобно использовать для тестирования соединений типа PPP при сжатии данных.
-p шаблон
Заполнить пакет указанным количеством "заполняющих" байтов. Максимальное значение – 16. Использование данной опции может оказаться целесообразным для диагностики проблем в сети, связанных с данными. Например, выполнение команды -p ff обеспечивает заполнение отправляемых пакетов единицами.
-Q
Не отображать ответы, например, ICMP-сообщения о недостижимости сети (Network Unreachable), связанные с отправленными пакетами ECHO_REQUEST.
-q
Режим вывода краткой информации. Отображать только строки со сводной информацией при запуске и завершении работы.
-R
Записать маршрут.
-r
Игнорировать стандартные таблицы маршрутизации и выполнить передачу непосредственно хосту в сети, с которой установлено прямое соединение. Если хост расположен вне сети, с которой установлено прямое соединение, возвращается ошибка. Данную опцию можно использовать для отправки ping-запросов локальному хосту через интерфейс, не включенный в маршрут (например, после игнорирования интерфейса утилитой routed).
-s размер_пакета
Отправить указанное количество байтов данных. Значение по умолчанию – 56, преобразуемое в 64 байта данных ICMP в результате объединения с 8 байтами данных заголовка ICMP.
-T предельное_время_существования
Использовать указанное значение предельного времени существования (Time-To-Live, TTL). Данное значение указывает количество переходов пакета до его отклонения (по достижении значения 0). Значение по умолчанию – 255.
-t тип_обслуживания
Использовать указанный в шестнадцатеричном формате тип обслуживания.
-v
Режим вывода расширенной информации (значение по умолчанию отсутствует).
-w максимальный_период_ожидания
Задать таймаут (в секундах) завершения работы утилиты ping вне зависимости от количества отправленных и полученных пакетов.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

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


Note: Для этой утилиты в полномочиях пользователя необходимо установить бит Setuid ("set user ID" (установить идентификатор пользователя)). В случае использования утилит mkefs, mketfs или mkifs на хосте Windows для добавления этой утилиты в образ необходимо задать атрибут perms для явного определения полномочий, а также атрибуты uid и gid для корректной настройки принадлежности.

При использовании утилиты ping для выявления неисправностей следует сначала запустить ее на локальном хосте для проверки доступности и работоспособности локального сетевого интерфейса. После этого следует выполнить команду ping для удаленных на различное расстояние хостов и шлюзов. Во время работы утилиты вычисляется время на передачу и прием пакетов и статистика по потере пакетов. Полученные дублирующие пакеты не учитываются при вычислении статистики по потере пакетов, однако время на передачу и прием таких пакетов используется для подсчета минимальных/средних/максимальных значений времени на передачу и прием. После отправки (и получения) указанного количества пакетов или в случае завершения работы утилиты ping с помощью сигнала SIGINT выводится краткая сводная информация.


Note: Утилита ping предназначена для тестирования, оценки сетей и управления ими. С учетом нагрузки на сеть, которая может возникнуть во время ее работы, не следует использовать утилиту ping во время работы в нормальном режиме или в автоматических сценариях.

Отладка

Утилиту ping можно применять для определения наличия связи с другими хостами. Предположим, был настроен канал "точка-точка" (PPP; Point-to-Point Protocol), но маршрут по умолчанию указан не был. Для определения наличия соединения с дальним концом линии связи можно ввести следующую команду:

ping isp.com

Если запрос выполнен успешно, утилита ping выводит информацию, аналогичную следующей:

PING isp.com (10.0.0.1): 56 data bytes 64 bytes from 10.0.0.1: icmp_seq=0 ttl=255 time=0 ms 64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=0 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=0 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=255 time=0 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=255 time=0 ms 64 bytes from 10.0.0.1: icmp_seq=5 ttl=255 time=0 ms 64 bytes from 10.0.0.1: icmp_seq=6 ttl=255 time=0 ms

Вывод отчета продолжается до завершения работы утилиты ping. Для завершения работы утилиты ping нажмите Ctrl - C. На экран будет выведен следующий отчет:

--- isp.com ping statistics --- 7 packets transmitted, 7 packets received, 0% packet loss round-trip min/avg/max = 0/0/0 ms

Ошибки в работе утилиты ping могут возникать по различным причинам:

Информация об ICMP-пакетах

Без учета опций размер заголовка IP-пакета составляет 20 байтов. В ICMP-пакете ECHO_REQUEST содержатся дополнительные 8 байтов, соответствующие заголовку ICMP, за которыми следует произвольный объем данных. (Размер этого дополнительного блока данных определяется с помощью аргумента размер_пакета опции -s. Значение по умолчанию – 56.) Таким образом, объем данных, получаемых в IP-пакете типа ECHO_REPLY ICMP, всегда на 8 байтов превышает требуемое пространство данных (заголовок ICMP).

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

Дублированные и поврежденные пакеты

Утилита ping выводит информацию о дублированных и поврежденных пакетах.

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

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

Применение различных шаблонов данных

Обработка пакетов на (меж)сетевом уровне в любом случае должна осуществляться вне зависимости от того, какие данные содержатся в информационной части пакета. К сожалению, известно, что в сетях возникают и долгое время оставаются необнаруженными проблемы, связанные с передачей данных. Во многих случаях шаблоны, вызывающие проблемы, не имеют достаточного количества "переходов" (например, шаблоны "все единицы" или "все нули") либо находятся в "приграничном" состоянии (например, шаблоны "почти все нули"). Таким образом, не всегда бывает достаточно указать шаблон данных "все нули", например, в командной строке, поскольку требуемый шаблон находится на уровне передачи данных (канальном уровне) – связь между данными, вводимыми пользователем, и данными, передаваемыми контроллерами, может быть весьма сложной.

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

Информация о TTL

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

Максимально возможное значение данного поля – 255, и в большинстве систем UNIX (включая ЗОСРВ «Нейтрино») поле TTL ICMP-пакетов ECHO_REQUEST установлено в значение 255. Поэтому может возникнуть ситуация, в которой передача ping-запросов некоторым хостам будет успешной, но эти хосты будут недоступны при работе по telnet или ftp.

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

Возвращаемое значение:

0
Успешно (хост находится в работоспособном состоянии).
≠0
Возникла ошибка. Заданы некорректные аргументы или отсутствует ответ от хоста.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», UNIX, NetBSD

Тематические ссылки:

ifconfig, io-pkt-*, netstat, ping6




Предыдущий раздел: Утилиты