ICMP — это служебный протокол внутри стека TCP/IP, который занимается не пользовательскими данными, а сообщениями о состоянии сети: ошибках, недоступности узлов и прочих подобных вещах.
По сути, ICMP позволяет устройствам в сети «жаловатся» друг другу: мол, этот хост недостижим, этот маршрут не работает, этот пакет я доставить не смог. Самое известное применение — утилита ping, которая с помощью ICMP проверяет, отвечает ли удалённый узел.
Когда какой-то пакет не удаётся доставить, устройство может сформировать ICMP-сообщение об ошибке и отправить его обратно отправителю. Протокол живёт на сетевом уровне модели OSI и идёт прямо поверх IP, а не через TCP или UDP, поэтому у ICMP нет привычных «портов».
Ping как раз и строится на ICMP echo request и echo reply: один компьютер отправляет запрос, другой отвечает, и по этому обмену можно понять, доступен ли узел и какие задержки по пути.
Если объяснять простыми словами, ICMP — это система служебных уведомлений между устройствами в сети. Она помогает диагностикам и админам понять, что именно ломается и где искать проблему. В продвинутых сценариях встречаются и более хитрые штуки вроде ICMP tunneling, когда по ICMP скрытно гоняют данные, но это уже отдельная история.
