linux ssh-network

ping

Проверка сетевой доступности хоста и измерение задержки (round-trip time)

Описание

ping — сетевая утилита для проверки доступности хоста по IP-сети и измерения времени прохождения пакетов (RTT — Round Trip Time). Команда отправляет ICMP-пакеты типа "Echo Request" на целевой хост и ждёт ответа "Echo Reply". По результатам видно: доступен ли хост, каков маршрут, есть ли потери пакетов, какова задержка. Название утилиты — аллюзия на звук гидролокатора (sonar ping), разработана Майком Муссом в 1983 году.

На Linux ping по умолчанию отправляет пакеты бесконечно (до прерывания Ctrl+C), в отличие от Windows, где выполняются 4 пакета. Итоговая статистика показывает минимальное, среднее и максимальное время ответа, а также процент потерь. Высокие потери или высокий RTT сигнализируют о проблемах с сетью: перегрузка канала, firewall, проблемы с маршрутизацией или физические неполадки.

ping — первый инструмент диагностики при проблемах с сетью: проверить доступность сервера, проверить DNS-резолюцию (ping domain.com → видим IP), измерить базовую задержку до хоста. Важно понимать, что сервер может не отвечать на ping (ICMP заблокирован firewall), но при этом быть полностью рабочим — отсутствие ответа на ping не означает недоступность сервиса.

Синтаксис

ping [опции] хост # хост — IP-адрес или доменное имя: ping 8.8.8.8 ping google.com ping -6 ipv6.google.com # IPv6
ЧастьОписание
[опции]Флаги для управления количеством пакетов, размером, интервалом
хостIP-адрес (IPv4 или IPv6) или доменное имя. Доменное имя резолвится автоматически
Ctrl+CОстановить и показать итоговую статистику

Флаги и опции

ФлагОписание
-c COUNT Отправить ровно N пакетов и завершиться (без флага — бесконечно)
-i INTERVAL Интервал между пакетами в секундах (по умолчанию 1с). Можно дробное: -i 0.2
-W TIMEOUT Время ожидания ответа на каждый пакет в секундах
-w DEADLINE Максимальное суммарное время работы в секундах (deadline)
-s SIZE Размер ICMP-пакета в байтах (по умолчанию 56 байт данных + 8 заголовок = 64 байта)
-t TTL Установить TTL (Time To Live) пакета — максимальное число хопов
-f Flood ping: отправлять пакеты максимально быстро (требует root). Стресс-тест сети
-q Тихий режим: не выводить каждый пакет, только итоговую статистику
-v Подробный режим: показывать ICMP-сообщения, не являющиеся ответами (TTL exceeded и др.)
-4 Принудительно использовать IPv4
-6 Принудительно использовать IPv6
-n Не резолвить IP-адреса в имена хостов (числовой вывод)
-I IFACE/IP Указать сетевой интерфейс или исходящий IP-адрес для отправки пакетов

Паттерны использования

Базовая проверка доступности

Быстро проверить, отвечает ли хост.

# Ограничить 4 пакетами (как в Windows)
ping -c 4 google.com

# Проверить IP напрямую
ping -c 3 8.8.8.8

# Тихий режим — только статистика
ping -c 10 -q ya.ru

Мониторинг задержки

Непрерывно наблюдать за качеством соединения.

# Пинговать каждые 0.5 секунды
ping -i 0.5 server.example.com

# Ограничить время работы (10 секунд)
ping -w 10 8.8.8.8

# Крупные пакеты для нагрузочного теста
ping -s 1400 -c 100 server.example.com

Проверка DNS-резолюции

Убедиться, что домен разрешается в правильный IP.

# ping показывает IP в первой строке
ping -c 1 example.com
# PING example.com (93.184.216.34)...

# Только IP, без DNS-резолюции обратно
ping -n -c 3 example.com

# IPv6 DNS
ping -6 -c 3 ipv6.google.com

Диагностика потерь пакетов

Выявить нестабильность сети по проценту потерь.

# Отправить 100 пакетов и смотреть статистику
ping -c 100 -q server.example.com
# --- результат ---
# 100 packets transmitted, 97 received,
# 3% packet loss
# rtt min/avg/max/mdev = 1.2/2.3/8.1/0.9 ms

Проверка конкретного интерфейса

Пинговать через определённый сетевой интерфейс.

# Через конкретный интерфейс
ping -I eth0 8.8.8.8
ping -I wlan0 8.8.8.8

# Через конкретный исходящий IP
ping -I 192.168.1.5 8.8.8.8

# Сравнить задержку через два интерфейса
ping -c 5 -I eth0 -q 8.8.8.8
ping -c 5 -I wlan0 -q 8.8.8.8

Использование в скриптах

Автоматическая проверка доступности хоста.

# Проверить и вернуть код выхода
if ping -c 1 -W 2 server.example.com > /dev/null 2>&1; then
    echo "Сервер доступен"
else
    echo "Сервер недоступен"
fi

# Ждать, пока сервер не поднимется
until ping -c 1 -W 1 server &>/dev/null; do
    echo "Ждём сервер..."
    sleep 5
done
echo "Сервер готов!"

Советы и предупреждения

Совет: интерпретация статистики RTT
В итоговой строке rtt min/avg/max/mdev: min — лучшая задержка, avg — средняя, max — худшая, mdev — среднее отклонение (jitter). Высокий mdev при нормальном avg указывает на нестабильное соединение — проблема для VoIP и видеозвонков.
Совет: код выхода ping в скриптах
ping возвращает код 0 если хотя бы один пакет получил ответ, и ненулевой код — если все пакеты потеряны или хост не разрешился. Это удобно в условиях if ping -c 1 host &>/dev/null для автоматической проверки доступности перед подключением или деплоем.
Совет: traceroute для углублённой диагностики
Если ping показывает высокую задержку или потери — используйте traceroute (или mtr) для трассировки маршрута и определения, на каком именно хопе возникает проблема. mtr объединяет ping и traceroute в интерактивный интерфейс с историей.
Осторожно: ICMP может быть заблокирован
Многие серверы и облачные провайдеры блокируют ICMP на firewall. Если ping не отвечает — это не означает, что сервис недоступен. Проверьте доступность через curl -I https://server или nc -zv server 443 (проверка TCP-порта) перед выводом заключения о недоступности.
Осторожно: flood ping требует прав root
Флаг -f (flood) отправляет пакеты с максимальной скоростью и требует root-прав. Использование flood ping против чужих серверов может быть расценено как DoS-атака и нарушает законодательство. Применяйте только в контролируемой среде для нагрузочного тестирования собственной сети.