ICMP (Internet Control Message Protocol)
ICMP (Internet Control Message Protocol) — служебный протокол стека TCP/IP, с помощью которого узлы и маршрутизаторы сообщают об ошибках доставки IP-пакетов и обмениваются диагностической информацией. Пользовательские данные ICMP не переносит. Для IPv4 он описан в RFC 792, для IPv6 действует ICMPv6 (RFC 4443).

Формат и типы сообщений
Сообщение ICMP вкладывается непосредственно в IP-пакет с номером протокола 1; портов у ICMP нет, поскольку протокол относится к сетевому уровню. Заголовок содержит поля «тип», «код» и контрольную сумму. Основные типы: 8 и 0 — эхо-запрос и эхо-ответ, 3 — адресат недостижим (код уточняет причину: сеть, узел, порт, запрет фильтром), 11 — истекло время жизни пакета, 5 — перенаправление маршрута. В сообщение об ошибке включается начало исходного пакета, чтобы отправитель определил, к какому потоку оно относится.
Диагностика: ping, traceroute и Path MTU
Утилита ping отправляет эхо-запросы и измеряет время отклика и долю потерянных пакетов. Traceroute отправляет пакеты с возрастающим TTL: каждый маршрутизатор, обнуливший счётчик, возвращает сообщение типа 11 и тем самым раскрывает свой адрес. Механизм Path MTU Discovery опирается на сообщение типа 3 с кодом 4 «требуется фрагментация»: по нему отправитель уменьшает размер пакетов и избегает фрагментации в пути.
ICMP и безопасность
Протокол применяют в атаках: ICMP-флуд, Smurf с широковещательными эхо-запросами, скрытые туннели в поле данных. Полная блокировка ICMP, однако, вредна: без сообщений «требуется фрагментация» соединения с крупными пакетами зависают. Рекомендуемая практика — пропускать необходимые типы и ограничивать их частоту. В IPv6 фильтровать нужно осторожнее: через ICMPv6 работает обнаружение соседей (NDP), заменяющее ARP.
Вопросы и ответы
Вопрос 1: Почему узел не отвечает на ping, хотя работает?
Эхо-запросы часто блокируют межсетевые экраны или сама
операционная система. Отсутствие ответа говорит лишь
о фильтрации ICMP; доступность службы проверяют
подключением к её порту.
Вопрос 2: На каком порту работает ICMP?
Ни на каком. ICMP относится к сетевому уровню и не
использует порты; в правилах фильтрации его указывают
по номеру протокола, типу и коду сообщения.
Вопрос 3: Можно ли полностью запретить ICMP на межсетевом экране?
Не рекомендуется. Как минимум следует разрешить
сообщения «адресат недостижим» (включая «требуется
фрагментация») и «истекло время», иначе нарушатся
определение MTU пути и диагностика.

