← Все вопросы

Что такое ICMP и при чём тут ping? Как ping использует ICMP?

Задан 1 месяц назад295 просмотров2 ответа
10

Все говорят «пингани сервер». Я понимаю, что ping проверяет доступность, но как именно он это делает? Читал, что ping работает через ICMP — что конкретно при этом происходит под капотом?

2 ответа

16
✓ Принятый ответ — помог автору

ping — это утилита, которая проверяет доступность хоста, и работает она именно на ICMP. Под капотом всё очень просто:

  1. Ваш компьютер отправляет хосту ICMP-сообщение типа Echo Request («ты тут?»).
  2. Если хост жив и не заблокировал ICMP, он отвечает Echo Reply («тут!»).
  3. ping замеряет время между отправкой и ответом — это и есть тот самый RTT (время в миллисекундах).

Выглядит это так:

ping codechick.io

PING codechick.io (185.12.34.56): 56 data bytes
64 bytes from 185.12.34.56: icmp_seq=0 ttl=55 time=24.3 ms
64 bytes from 185.12.34.56: icmp_seq=1 ttl=55 time=23.8 ms
64 bytes from 185.12.34.56: icmp_seq=2 ttl=55 time=25.1 ms

Что читаем из вывода:

  • time=24.3 ms — за столько пакет сходил туда-обратно (меньше = лучше);
  • icmp_seq — порядковый номер пакета (помогает увидеть потери);
  • ttl — сколько «прыжков» между роутерами осталось у пакета.

Важный нюанс: если ping не отвечает, это не всегда значит, что хост недоступен. Многие серверы и файрволы специально блокируют ICMP Echo, поэтому хост может прекрасно работать (отдавать сайты по HTTP), но на пинг молчать.

8

Хочу подчеркнуть последнюю мысль из принятого ответа отдельно, потому что на этом многие спотыкаются: «не пингуется» ≠ «сервер лежит». Я не раз видел, как люди паникуют, что прод упал, хотя сайт открывается нормально — просто ICMP зарезан на файрволе. Если нужно проверить именно доступность сервиса, лучше стучаться в его порт (например, через curl или telnet host 443), а не полагаться только на ping.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект