С чего начать Первые шаги трек · 15 ступеней
Linux Labs

ping — проверить, доходят ли пакеты до узла

6 мин Ubuntu 24.04 · iputils 20240117

Команда ping шлёт узлу эхо-запросы ICMP и печатает ответы, задержку и потери — первая проверка сетевой связи.

Шпаргалка

8 команд Версия для печати
  • ping -c 3 192.0.2.1 три запроса и итог; без -c — до Ctrl+C
  • ping -c 3 -W 1 192.0.2.1 ждать каждый ответ не дольше секунды
  • ping -c 3 -n 192.0.2.1 без поиска имён — быстрее и чище
  • ping -c 3 -I lab0 192.0.2.1 через определённый интерфейс
  • ping -c 10 -q 192.0.2.1 только итоговая статистика
  • ping -c 3 -O 192.0.2.1 писать о каждом запросе без ответа
  • ping -4 -c 3 example.com только IPv4; -6 — только IPv6
  • sudo ip netns exec lab-client ping -c 2 192.0.2.1 из пространства

Обзор

ping отправляет узлу эхо-запросы ICMP и печатает каждый ответ. Без -c он работает, пока не нажмёшь Ctrl+C, а затем печатает итог:

text
student@ubuntu:~$ ping -c 2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.052 ms

--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1013ms
rtt min/avg/max/mdev = 0.041/0.046/0.052/0.005 ms

icmp_seq — номер запроса, time — сколько шёл ответ, packet loss — доля запросов без ответа. Ответ доказывает одно: пакет дошёл до узла, и ответ вернулся. Работает ли на узле сайт или SSH, ping не проверяет — это делают по портам (см. ss).

Код возврата: 0 — ответы были, 1 — ни одного ответа, 2 — другая ошибка. На нём строят проверки в скриптах — и только с -c или -w, иначе ping не закончится.

Ключи

10

Без -c в Linux ping бесконечный — в отличие от Windows, где по умолчанию четыре запроса. Полный список — man ping.

Ключ Что делает Пример
-c count Остановиться после стольких запросов; без него ping бесконечен. ping -c 3 192.0.2.1
-W seconds Сколько ждать каждый ответ. ping -c 3 -W 1 192.0.2.1
-w seconds Общий срок работы ping в секундах. ping -w 5 192.0.2.1
-I interface Отправлять через указанный интерфейс или с указанного адреса. ping -c 3 -I lab0 192.0.2.1
-n Не искать имена по адресам — вывод только числами. ping -c 3 -n 192.0.2.1
-q Не печатать каждый ответ — только итог. ping -c 10 -q 192.0.2.1
-O Сообщать о каждом запросе, на который ещё нет ответа. ping -c 3 -O 192.0.2.1
-i seconds Пауза между запросами (по умолчанию 1 секунда). ping -c 20 -i 0.5 192.0.2.1
-4 Только IPv4; -6 — только IPv6. ping -4 -c 3 example.com
-s bytes Размер данных в запросе (по умолчанию 56). ping -c 3 -s 1472 -M do 192.0.2.1

Ничего не найдено. Попробуй запрос короче.

Рецепты

4

Отличить «нет пути» от «нет ответа»

text
student@ubuntu:~$ ping -c 2 192.0.2.1
ping: connect: Network is unreachable

Network is unreachable печатается сразу: у ядра нет маршрута к этому адресу, и запрос даже не ушёл. Смотри адрес и маршруты: ip -br a, ip r (см. ip).

Если путь есть, а ответа нет, строк ответа не будет вовсе, а итог покажет 100% packet loss: запросы ушли, но не вернулись. Узла нет, он выключен, или ответы режет межсетевой экран.

Destination Host Unreachable

text
From 192.0.3.10 icmp_seq=1 Destination Host Unreachable

Узел в твоей подсети не отозвался на ARP — его нет или он выключен. Строку пишет твоя машина (From — твой адрес) или шлюз по дороге. Это не таймаут: ответ-ошибка пришёл.

Проверка в скрипте

bash
if ping -c 1 -W 2 -q 192.0.2.1 >/dev/null; then
  echo доступен
else
  echo нет ответа
fi

Внутри учебной сети

bash
sudo ip netns exec lab-client ping -c 2 192.0.2.1

У учебной машины нет сети, кроме lo: клиент и сервер живут в сетевых пространствах имён, соединённых парой veth. ping без ip netns exec ищет адрес в сети самой машины и получает Network is unreachable.

Неполадки

5

ping: connect: Network is unreachable

Маршрута к адресу нет: нет адреса на интерфейсе, адрес из другой подсети или нет маршрута по умолчанию. Проверь ip -br a и ip r. На учебной машине так ответит любой адрес снаружи — она отрезана от внешней сети.

Temporary failure in name resolution

Имя не превратилось в адрес: нет DNS или нет сети. Проверь ping по IP-адресу; работает по адресу — дело в DNS (см. dns-resolv).

100% packet loss, хотя узел точно работает

ICMP режет межсетевой экран — на узле или по пути. Правило drop даёт тишину и потери, reject — сразу строку ошибки, например Destination Port Unreachable. Посмотри правила: sudo nft list ruleset (см. firewall). Проверь сам сервис по порту — nc -zv узел порт.

ping не заканчивается

Нет -c: ping в Linux шлёт запросы, пока не нажмёшь Ctrl+C. В скриптах всегда ставь -c или -w (общий срок в секундах).

Потери 10–30 %, ответы с большим разбросом

Путь перегружен или нестабилен. Пошли больше запросов (ping -c 100 -q) и найди, на каком участке потери, через mtr или tracepath — см. network-diagnostics.

См. также

  • network-diagnostics — лесенка проверки связи: адрес, маршрут, DNS, порт.
  • ip — адреса, подсети и маршруты, из-за которых ping не проходит.
  • veth — пара veth и пространства имён учебной сети.
  • firewall — правила, которые режут ICMP.
  • dns-resolv — когда ping по имени не работает, а по адресу работает.
  • ss — проверить, слушает ли сервис порт: ping этого не скажет.
Загрузка…