Команда ping: опции ping в Linux и проверка 100% packet loss
На сервере Linux команда ping проверяет, доходят ли пакеты до другого сервера и сколько длится путь туда и обратно. При отправке на example.com с серверов AlmaLinux 9 и Debian 12 с числом, заданным через -c, время приёма-передачи составило 1–3 мс, а сервер, блокирующий ICMP, показал в ping 100% packet loss, хотя отвечал на веб-запросы.
Вывод ниже получен на сервере AlmaLinux 9.8 (учётная запись root) и на сервере Debian 12 (обычная учётная запись). Каждый ping запускался с числом отправок, заданным через -c. Частные IP-адреса промежуточных маршрутизаторов заменены примерами, а адреса, полученные из публичных доменов вроде example.com, оставлены как есть.
1️⃣ Как пользоваться командой ping
ping отправляет другому серверу эхо-запрос ICMP и построчно выводит, сколько времени шёл эхо-ответ. В Linux ping без числа, заданного через -c, отправляет пакеты, пока вы не остановите его клавишами Ctrl+C (по официальному руководству), поэтому сразу запускайте его с числом, например -c 4.
ping -c 4 example.comPING example.com (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.46 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.30 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=58 time=1.28 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=4 ttl=58 time=1.30 ms
--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 1.279/1.336/1.464/0.074 msПри четырёх отправках на example.com с сервера Debian 12 пришли все четыре ответа, время приёма-передачи — 1,28–1,46 мс. Что показывает каждая строка, описано ниже.
| Вывод | Что показывает |
|---|---|
| PING example.com (172.66.147.243) 56(84) bytes of data. | Адрес, полученный из имени, и отправляемый размер — 56 байт данных плюс 20 байт заголовка IP и 8 байт заголовка ICMP дают 84 байта |
| 64 bytes from … | Размер пришедшего ответа (56 байт данных + 8 байт заголовка ICMP) |
| icmp_seq=1 | Порядковый номер отправки |
| ttl=58 | TTL, оставшийся в пакете ответа, — уменьшается на 1 на каждом пройденном маршрутизаторе |
| time=1.46 ms | Время приёма-передачи этого пакета |
| 4 packets transmitted, 4 received, 0% packet loss | Отправлено, получено и доля без ответа |
| time 3003ms | Время от первой отправки до завершения |
| rtt min/avg/max/mdev | Минимальное, среднее и максимальное время приёма-передачи и его разброс (mdev) |
mdev показывает, насколько время приёма-передачи отклоняется от среднего, и в официальном руководстве сказано, что чем больше это значение, тем неравномернее время. В этом результате все четыре ответа уложились в 1,5 мс, и mdev составил 0,074 мс.
Та же команда на сервере AlmaLinux 9 отправила пакеты на IPv6-адрес example.com, и в первой строке было только 56 data bytes без 84.
ping -c 4 example.comPING example.com(2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3)) 56 data bytes
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=1 ttl=51 time=2.20 ms
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=2 ttl=54 time=2.30 ms
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=3 ttl=51 time=2.55 ms
64 bytes from 2606:4700:10::ac42:93f3 (2606:4700:10::ac42:93f3): icmp_seq=4 ttl=54 time=2.26 ms
--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 2.203/2.326/2.547/0.131 msВерсию установленного ping проверяют через -V. На сервере Debian 12 был iputils 20221126, на сервере AlmaLinux 9 — iputils 20210202.
ping -Vping from iputils 20221126
libcap: yes, IDN: yes, NLS: no, error.h: yes, getrandom(): yes, __fpending(): yesping -Vping from iputils 202102022️⃣ Опции числа и интервала ping
Среди опций ping -c — число отправок, а -i — интервал между ними (в секундах). Интервал по умолчанию — 1 секунда, а с -i 0.5 время на четыре отправки сократилось с 3003 мс до 1502 мс.
ping -c 4 -i 0.5 example.comPING example.com (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.26 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.31 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=58 time=1.37 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=4 ttl=58 time=1.44 ms
--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 1502ms
rtt min/avg/max/mdev = 1.264/1.343/1.436/0.065 msПо руководству iputils 20210202 на сервере AlmaLinux 9 задать интервал короче 0,2 секунды может только root, а руководство iputils 20221126 на сервере Debian 12 указывает этот порог как 2 мс. Короткие интервалы могут нагружать другой сервер и сеть.
-w — время (в секундах), через которое ping полностью завершается, сколько бы пакетов ни было отправлено. Вместе с -c он завершается, когда получено заданное число ответов или истекло время -w. При запуске с -c 10 -w 3 через 3 секунды было отправлено только три пакета, и ping завершился.
ping -c 10 -w 3 example.comPING example.com (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.34 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.27 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=58 time=1.34 ms
--- example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.272/1.318/1.342/0.032 msВсе три ответа пришли, но заданные 10 не набрались, поэтому код выхода ping был 1. В официальном руководстве тоже сказано, что при совместном использовании -c и -w ping завершается с кодом 1, если не получено заданное число ответов.
-W — время (в секундах) ожидания одного ответа. По официальному руководству это значение действует, только когда ответов нет вообще; для узла, который отвечает, ping ждёт вдвое больше времени приёма-передачи.
Чтобы видеть только итог без строк результата, добавьте -q. После четырёх отправок остались только первая строка и статистика в конце.
ping -c 4 -q example.comPING example.com (104.20.23.154) 56(84) bytes of data.
--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.551/1.649/1.715/0.060 ms3️⃣ Опции размера пакета и IPv6 в ping
Размер отправляемых данных меняют через -s. С -s 1000 первая строка стала 1000(1028) bytes, а строки ответа — 1008 bytes.
ping -c 2 -s 1000 example.comPING example.com (172.66.147.243) 1000(1028) bytes of data.
1008 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=58 time=1.21 ms
1008 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=58 time=1.31 ms
--- example.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.214/1.262/1.311/0.048 ms1028 — это 1000 байт данных плюс 20 байт заголовка IP и 8 байт заголовка ICMP, а 1008 — данные плюс только заголовок ICMP. Время приёма-передачи составило 1,21–1,31 мс, почти как при размере по умолчанию (56 байт).
-t задаёт TTL отправляемых пакетов. TTL уменьшается на 1 на каждом маршрутизаторе, а когда доходит до 0, этот маршрутизатор отбрасывает пакет и возвращает [Time to live exceeded].
ping -c 2 -t 3 example.comPING example.com (172.66.147.243) 56(84) bytes of data.
From 192.0.2.103 (192.0.2.103) icmp_seq=1 Time to live exceeded
From 192.0.2.103 (192.0.2.103) icmp_seq=2 Time to live exceeded
--- example.com ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1001msПри TTL, сниженном до 3, третий маршрутизатор оба раза вернул [Time to live exceeded]. При увеличении TTL по одному начиная с 1 первый ответ от example.com пришёл на 8.
-4 и -6 ограничивают тип адреса назначения только IPv4 или только IPv6. Сервер AlmaLinux 9 отправлял на IPv6-адрес example.com даже без опций, поэтому для отправки на IPv4-адрес добавили -4.
ping -4 -c 4 example.comPING (172.66.147.243) 56(84) bytes of data.
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=1 ttl=54 time=2.64 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=2 ttl=54 time=2.55 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=3 ttl=54 time=2.57 ms
64 bytes from 172.66.147.243 (172.66.147.243): icmp_seq=4 ttl=54 time=2.58 ms
--- ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 2.553/2.585/2.642/0.033 msВ iputils 20210202 на сервере AlmaLinux 9 с -4 поле имени в первой строке и в строке статистики оказалось пустым. Та же команда в iputils 20221126 на сервере Debian 12 показала example.com как обычно.
На сервере Debian 12 без IPv6-маршрута по умолчанию с -6 команда сразу завершилась сообщением [connect: Network is unreachable] без строк ответа.
ping -6 -c 2 example.comping: connect: Network is unreachable🔲 Опции команды ping
📌 Основные опции: результаты из этой статьи
| Опция | Назначение | Результат в этой статье | |
|---|---|---|---|
| -c число | Задаёт, сколько пакетов отправить, и завершается после отправки | -c 4 на сервере Debian 12: четыре отправки, четыре ответа, приём-передача 1,28–1,46 мс | |
| -i интервал | Интервал между отправками пакетов (в секундах), по умолчанию 1 секунда | С -i 0.5 время на четыре отправки сократилось с 3003 мс до 1502 мс | |
| -w время | Время (в секундах), через которое ping полностью завершается, сколько бы пакетов ни было отправлено | -c 10 -w 3 за 3 секунды отправил только три пакета и завершился с кодом выхода 1 | |
| -W время | Время (в секундах) ожидания одного ответа, когда ответов нет вообще | Две отправки на 192.0.2.1 с -W 1: [100% packet loss], код выхода 1 | |
| -q | Выводит только первую строку и статистику в конце, без строк ответа | После четырёх отправок остались только первая строка и строка статистики | |
| -s размер | Размер отправляемых данных (в байтах), по умолчанию 56 | С -s 1000 в первой строке 1000(1028) bytes, в строках ответа 1008 bytes | |
| -t TTL | TTL отправляемых пакетов | С -t 3 третий маршрутизатор оба раза вернул [Time to live exceeded] | |
| -4 | Отправляет только на IPv4-адреса | На сервере AlmaLinux 9 отправка на IPv4-адрес вместо IPv6; поле имени пустое | |
| -6 | Отправляет только на IPv6-адреса | На сервере Debian 12 без IPv6-маршрута по умолчанию: [connect: Network is unreachable] | |
| -D | Ставит время Unix (секунды.микросекунды) в начало каждой строки ответа | В начале каждой строки ответа появляется метка времени вида [1793227536.574201] | |
| -V | Выводит сведения о версии | Debian 12 — iputils 20221126, AlmaLinux 9 — iputils 20210202 |
📎 Другие опции: по официальному руководству
| Опция | Назначение | |
|---|---|---|
| -n | Выводит адреса только числами, не преобразуя их в имена | |
| -I интерфейс | Задаёт интерфейс или адрес источника для отправки | |
| -A | Сам подстраивает интервал отправки под время приёма-передачи; без root минимальный интервал 200 мс | |
| -f | Флуд-пинг, который отправляет быстро, не дожидаясь ответов; интервал 0 только для root | |
| -l число | Число пакетов, отправляемых заранее без ожидания ответа; больше 3 только для root | |
| -M do | Задаёт режим Path MTU Discovery; do запрещает фрагментацию (принимаются также want и dont) | |
| -p шаблон | Шаблон байтов для заполнения отправляемых пакетов, до 16 байт | |
| -O | Сообщает о запросах без ответа до отправки следующего пакета; используется вместе с -D при записи | |
| -R | Записывает пройденный маршрут (только IPv4; многие узлы игнорируют эту опцию) | |
| -b | Разрешает отправку на широковещательный адрес | |
| -a | Подаёт звуковой сигнал при каждом ответе |
🔲 Симулятор команды ping
В симуляторе ниже можно самому вводить команды и смотреть результаты для числа отправок и интервала, размера пакета и отправки на адрес, который не отвечает.
4️⃣ ping не получает ответа
[100% packet loss] означает, что на отправленные пакеты не пришло ни одного ответа. При двух отправках с -W 1 на 192.0.2.1, адрес, зарезервированный для документации, вывелась только статистика без строк ответа.
ping -c 2 -W 1 192.0.2.1PING 192.0.2.1 (192.0.2.1) 56(84) bytes of data.
--- 192.0.2.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1024msКогда ответов не было вообще, код выхода ping был 1, а при полученных ответах — 0. Скрипты используют это значение, чтобы проверить, отвечает ли другой сервер.
ping -c 2 -W 1 192.0.2.1 > /dev/null; echo $?; ping -c 1 example.com > /dev/null; echo $?1
0ping проверяет только ICMP, поэтому сервер, блокирующий ICMP, может отвечать на веб-запросы и при этом не отвечать на ping. Две отправки на amazon.com с сервера Debian 12 дали [100% packet loss], а веб-запрос через curl на тот же адрес получил ответ 301.
ping -c 2 -W 1 amazon.comPING amazon.com (98.82.161.185) 56(84) bytes of data.
--- amazon.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1002mscurl -sI https://amazon.com/ | head -1HTTP/1.1 301 Moved PermanentlyСервер, блокирующий ICMP, похож на магазин, который снял дверной звонок.
Некоторые облачные серверы отвечают на ping только после того, как ICMP разрешён в правилах брандмауэра. Экземпляр ВМ в Oracle Cloud начал отвечать на ping после того, как тип ICMP в списке безопасности публичной подсети изменили на 8.
Если ping не может преобразовать имя в IP-адрес, он сразу завершается сообщением [Name or service not known] без первой строки, и код выхода был 2. .invalid — имя, зарезервированное так, чтобы нигде не разрешаться, поэтому его использовали для проверки этой ошибки.
ping -c 1 no-such-host.invalidping: no-such-host.invalid: Name or service not knownЕсли эта ошибка появляется для реального домена, смотрите: Команда nslookup — проверьте, возвращает ли DNS-сервер адрес для этого имени. Четыре варианта вывода без ответа и что проверять дальше — ниже.
| Вывод | Назначение | Что проверить дальше |
|---|---|---|
| 100% packet loss | На отправленные пакеты не пришло ни одного ответа | Веб-службу — через curl, брандмауэр — правило, разрешающее ICMP |
| Name or service not known | Не удалось преобразовать имя в IP-адрес | Ответ DNS через nslookup |
| connect: Network is unreachable | Нет исходящего маршрута для этого типа адреса | Отправить на IPv4-адрес с -4 |
| Time to live exceeded | TTL дошёл до 0 на промежуточном маршрутизаторе | Увеличить значение -t или убрать его и отправить снова |
🔢 FAQ & рекомендуемые материалы
Сеть · Настройка
[Linux] Команда ip: управление сетевыми интерфейсами и настройками
Команда ip для проверки и настройки сетевых интерфейсов, IP-адресов и маршрутизации сервера.
Сеть · DNS
Команда host в Linux | команда для DNS-запросов
Команда host для поиска IP-адреса по имени хоста или преобразования IP-адреса в имя хоста.
Удалённый доступ · передача
Команда SSH: опции и использование
Опции и использование команды SSH, которая подключается к удалённому серверу по зашифрованному соединению для выполнения команд.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.