ping использует обязательные датаграммы ECHO_REQUEST протокола ICMP
для получения по этому протоколу ответов ECHO_RESPONSE от хоста или шлюза.
Датаграммы ECHO_REQUEST состоят из заголовков IP и ICMP,
структуры данных struct timeval и произвольного числа несмысловых байтов для заполнения пакета.
ОПЦИИ
-a
Сопровождать работу программы звуком.
-A
Адаптировать интервал между отправками пакетов к длительности их доставки и возврата.
Таким образом, если только не выполняется преднагрузка, в любой момент времени может быть не больше одного пакета, на который не получен ответ.
Минимальный интервал для не администратора - 200 мс.
В сетях с низким rtt данный режим эквивалентен лавинообразному.
-b
Разрешить использование широковещательного адреса в качестве целевого.
-B
Запретить изменение исходного адреса для пакетов во время работы программы.
Исходный адрес определяется в начале работы ping.
-c количество
Остановить работу после передачи заданного количества пакетов ECHO_REQUEST.
Если задано ограничение-на-время-работы, программа будет ждать
указанное количество ответных пакетов ECHO_REPLY в указанный период.
-d
Устанавливает параметр SO_DEBUG на используемый сокет. Примечание: этот параметр не используется ядром Linux.
-F идентификатор-потока
Устанавливать идентификатор-потока в отправляемых пакетах
(только для ping6). Если указан нуль, идентификатор-потока будет генерироваться случайно ядром.
-f
Лавинообразный режим. Для каждого пакета ECHO_REQUEST выводится точка (`.'), для каждого
ответного пакета ECHO_REPLY - забой (удаление последней точки).
Это позволяет наглядно представлять число потерянных пакетов.
Если интервал между отправками не задан, последние производятся
с наибольшей скоростью (по мере получения ответов) или со скоростью 100 раз в секунду,
в зависимости от того, в каком случае получается большая скорость.
Задавать нулевой интервал между отправками может только суперпользователь.
-i интервал
Интервал в секундах между отправкой пакетов.
По умолчанию между отправкой пакетов делается пауза в 1 секунду,
либо, в случае лавинообразного режима, отправка производится без пауз.
Задавать значения меньше 0.2 может только суперпользователь.
-I адрес
Установить адрес источника в указанный.
В качестве аргумента может выступать числовой IP-адрес или имя устройства.
Этот параметр обязателен при отправке запросов на локально соединённый адрес IPv6.
-l преднагрузка
Послать с максимальной скоростью указанное количество пакетов, не дожидаясь ответов,
и затем перейти в обычный режим работы.
Значения больше 3 может указывать только суперпользователь.
-L
Подавлять циклические петли для широковещательных пакетов.
Этот ключ применяется только если в качестве целевого адреса указан широковещательный.
-n
Только цифровой вывод. Не расшифровывать имена (символьный вид) адресов.
-p шаблон
Можно указать до 16 несмысловых байтов для заполнения пакетов.
Это полезно при диагностике проблем в сети.
Например, -p ff заполнит все пакеты единицами символами.
-Q тип-обслуживания
Разряды байта QoS (Quality of Service - качество обслуживания) для датаграмм ICMP.
Тип-обслуживания может быть либо десятичным либо шестнадцатеричным числом.
Обычно (согласно RFC 1349) это значение интерпретируется так: младший (нулевой) разряд зарезервирован
(сейчас используется для управления событиями при переполнении),
разряды 1-4 используются для указания собственно типа обслуживания,
и разряды 5-7 для приоритета (IP-предпочтения).
Возможные типы обслуживания: минимизация стоимости - 0x02,
максимизация надёжности - 0x04, максимизация пропускной способности - 0x08
минимизация задержек - 0x10. Одновременно можно указывать только один из четырёх перечисленных разрядов.
Возможный диапазон значения приоритета - от приоритетного (0x20) до управляемого сетью (0xe0).
Для указания высокого приоритета необходимы права суперпользователем (точнее, должно быть доступна возможность CAP_NET_ADMIN).
Разряд 0x01 можно устанавливать только если в ядре включен ECN.
В RFC 2474 этот байт переопределён как DS (Differentiated Services - дифференцированные службы):
разряды 0-1 отведены для отдельных данных (тут будет использоваться ECN)
разряды 2-7 для DSCP (Differentiated Services Codepoint - точка кода дифференцированных служб)
-q
Выводить только начальные и итоговые данные (не выводить информацию об отдельных запросах).
-R
Записывать маршрут.
Для пакетов ECHO_REQUEST будет включен параметр RECORD_ROUTE и на экран
будет выведен буфер маршрута для возвращённых пакетов.
Заметим, что в заголовок IP помещается не больше 9 таких маршрутов.
Многие узлы игнорируют или не отбрасывают этот параметр.
-r
Не использовать обычные таблицы маршрутизации и передавать данные прямо на компьютер, подключенный к интерфейсу.
Если компьютер не находится в сети с прямым подключением, то возвращается сообщение об ошибке.
Этот параметр может использоваться вместе с -I для проверки локальной системы через интерфейс,
по которому не идет маршрутизация (например после того, как интерфейс был сброшен routed(8)).
-s размер-пакета
Размер пакетов для пересылки. По умолчанию - 56,
что соответствует размеру 64 байта после добавления 8 байтов заголовка ICMP.
-S буфер-отправки
Размер буфера отправки соединения. По умолчанию буферизируется не больше одного пакета.
-t ttl
Время актуальности пакета IP (ttl - Time to Live).
-T параметр-временной-метки
Параметры временной метки IP.
Возможные значения параметра-временной-метки:
tsonly (только временная метка),
tsandaddr (временная метка и адреса) и
tsprespec хост1 [хост2 [хост3 [хост4]]]
(отмечать переходы).
-M указание
Стратегия обнаружения маршрута MTU.
Возможные значения:
do (запретить фрагментацию, даже локальную),
want (выполнять обнаружение PMTU, фрагментировать локально если размер пакета слишком большой)
и dont (не устанавливать флаг DF).
-U
Выводить полное время прохода (старое поведение).
По умолчанию выводится сетевое время прохода,
которое может отличаться от реального, например из-за ошибок DNS.
-v
Выводить подробную информацию.
-V
Вывести информацию о версии и закончить работу.
-w ограничение-на-время-работы
Время, по истечении которого ping
завершит свою работу независимо от количества посланных и принятых пакетов.
При указании этого параметра время ожидания для одного пакета игнорируется
и работа может быть завершена ранее указанного срока только в случае получения
информации об ошибке (т.е. уведомления о том, что ответных пакетов точно не будет).
-W время-ожидания-ответа
Время ожидания (в секундах) ответного пакета.
Принимается во внимание только если не было принято ни одного ответа.
В противном случае программа ожидает получения двух ответов.
При использовании команды ping для локализации неполадки сначала запустите её с адресом локального хоста
для проверки работоспособности локального сетевого интерфейса.
Затем проверяйте связь посредством ping со всё более удалёнными компьютерами и шлюзами.
Время прохождения сигналов в обе стороны и потери пакетов подсчитываются и анализируются позднее.
Если принимаются дублированные пакеты, то они не включаются в статистику
утерянных пакетов, хотя время прохода таких пакетов включается в статистику
минимального/среднего/максимального времени.
После отправки и получения указанного количества пакетов или при
прерывании работы программы сигналом
SIGINT
выводится краткий итог работы.
Более краткую статистику можно получить без прерывания процесса с помощью сигнала SIGQUIT.
Если ответные пакеты не будут получены, то программа завершит работу с кодом выхода 1.
Если указаны количество пакетов и ограничение-на-время-работы,
но по истечении этого времени принято менее запрошенного числа пакетов,
то программа также завершит работу с кодом выхода 1.
При других ошибках выход будет произведен с кодом 2.
Иначе программа завершает работу с кодом 0.
Эти значения позволяют использовать коды выхода для определения доступности серверов и компьютеров в сети.
Эта программа предназначена для тестирования сетей,
управления сетями и измерения производительности.
Из-за нагрузок, которые она создаёт в сети, неразумно использовать ping
в рабочее время или в автоматических сценариях.
ОПИСАНИЕ ПАКЕТОВ ICMP
Заголовок IP без параметров имеет размер 20 байтов.
Пакет ICMP ECHO_REQUEST содержит дополнительные 8 байтов, предназначенные для
заголовка ICMP, и произвольное количество заполняющих байтов (для обеспечения требуемого размера пакета),
определяемое аргументом размер-пакета данных (по умолчанию 56).
Поэтому количество полученных данных из пакета IP типа ICMP ECHO_REPLY всегда будет на 8 байтов (заголовок ICMP) больше, чем задаваемое.
Если заданный размер данных не меньше размера struct timeval,
то программа включает в них временную метку,
используемую для измерения времени прохода сигнала в обе стороны.
В противном случае такое время не будет измеряться.
ПОВТОРЯЮЩИЕСЯ И ПОВРЕЖДЁННЫЕ ПАКЕТЫ
Программа выводит сообщения о дублированных и повреждённых пакетах.
Дублированные пакеты свидетельствуют о ненадёжной связи на уровне канала.
Они могут появляться в разных ситуациях и если это происходит с небольшой частотой, то на это можно не обращать внимания.
Повреждённые пакеты являются прямым свидетельством неполадок в аппаратной части на одном из участков сети,
через который проходили пакеты.
ТЕСТИРОВАНИЕ НА РАЗЛИЧНЫХ ДАННЫХ
(Меж)сетевая часть механизма передачи данных не должна обрабатывать пакеты по-разному,
в зависимости от содержащихся в них данных.
К сожалению такие проблемы часто встречаются в сетях и остаются невыявленными достаточно долго.
Во многих случаях оказывается, что некорректно обрабатывается некоторый вырожденный шаблон,
например, состоящий из одних нулей или единиц, либо близкий к нему.
Простой проверки по вырожденным шаблонам данных недостаточно,
т.к речь идёт о данных на уровне канала данных,
которые могут соотноситься с указываемыми вами данными самым сложным образом.
В любом случае, такие проблемы означают, что вам предстоит очень много работ по тестированию и выявлению вышедшего из строя элемента.
Если вам повезёт, то вы найдёте файл, который вообще не будет передаваться по сети, или будет передаваться очень долго (по сравнению с файлами такого же размера),
и затем сможете исследовать его на предмет возможных проблемных шаблонов,
проверить которые можно с помощью ключа -p программы ping.
ВРЕМЯ АКТУАЛЬНОСТИ (TTL)
Значение TTL для пакетов IP задаёт максимальное количество IP-маршрутизаторов,
через которое пакет ещё будет доставляться, а не считаться утерянным.
Сейчас каждый маршрутизатор в Интернете уменьшает поле TTL при обработке пакета на единицу.
Согласно спецификации TCP/IP значение поля TTL для пакетов TCP должно быть равно 60,
но многие системы используют меньшие значения (4.3 BSD использует 30, 4.2 использует 15).
Максимальное значение данного поля равно 255, и многие Unix-системы устанавливают поле TTL для пакетов ICMP ECHO_REQUEST в 255.
Поэтому иногда получается, что вы можете проверить связь командой `ping' до некоторых компьютеров, но не можете связаться с ними программами telnet(1) или ftp(1).
В обычном режиме ping выводит значения времени актуальности принятых (возвращённых) пакетов.
При приёме пакета удалённой системой она может выполнить одно из трёх возможных действий с полем TTL в ответ:
*
Не изменять его; это делали системы Berkeley Unix до выпуска BSD 4.3 Tahoe.
TTL в принятом пакете будет 255 минус количество пройденных маршрутизаторов на пути в обе стороны.
*
Установить его в 255: это то, что системы Berkeley Unix делают сейчас.
В этом случае значение TTL в принятом пакете будет 255 минус количество пройденных маршрутизаторов от удалённой системы до исходной.
*
Установить его в какое-либо другое значение.
Некоторые машины устанавливают его равным используемому для TCP пакетов,
например, либо 30 либо 60. Другие системы могут использовать вообще непредсказуемые значения.
ИЗВЕСТНЫЕ ОШИБКИ
*
Многие узлы и шлюзы игнорируют параметр RECORD_ROUTE.
*
Максимальная длина заголовка IP слишком мала для полноценной работы таких параметров, как RECORD_ROUTE.
*
Использовать лавинообразный режим вообще не рекомендуется,
а в случаях когда целью является широковещательный адрес,
лавинообразный режим следует применять в условиях тщательного контроля.