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