ICMP — Internet Control Message Protocol

Служебный протокол сетевого уровня (L3, номер 1 в поле protocol IP-заголовка). Не переносит пользовательские данные — используется для передачи сообщений об ошибках, диагностики и управления сетью.

Где живёт в стеке

ICMP — надстройка над IP, не над TCP или UDP. Не имеет портов. ICMP-пакет заворачивается прямо в IP с protocol=1 (для IPv6 — protocol=58, ICMPv6).

Основные типы (IPv4)

TypeНазваниеЗачем
0Echo Replyответ на ping
3Destination Unreachableхост/сеть/порт недостижим
5Redirect«ходи через другой роутер»
8Echo Requestзапрос ping
11Time ExceededTTL=0, база traceroute
12Parameter Problemошибка в заголовке пакета

Ping

Утилита ping шлёт Echo Request (type 8), получает Echo Reply (type 0). Считает RTT и потери. Подробнее — ping.

Traceroute через ICMP

Классический traceroute (Unix) шлёт UDP с растущим TTL и ловит ICMP Time Exceeded от каждого хопа. Windows tracert шлёт сам ICMP Echo Request.

Path MTU Discovery

Отправитель ставит флаг DF (Don't Fragment). Если пакет слишком большой — роутер шлёт ICMP Type 3 Code 4 «Fragmentation needed». Отправитель уменьшает MTU и повторяет. Если ICMP заблокирован — PMTUD ломается, соединения зависают на больших пакетах.

ICMP и фаерволы

Многие блокируют ICMP «на всякий случай». Плохая идея:

Правильно: rate-limit на Echo Request (напр. 10 pps), разрешить Type 3 (Destination Unreachable) и Type 11 (Time Exceeded).

ICMPv6

В IPv6 роль ICMP расширена. Заменяет ARP (Neighbor Discovery), несёт Router Advertisement, участвует в SLAAC (автоконфигурация адресов). Блокировать ICMPv6 нельзяIPv6-сеть сразу перестанет работать.

Атаки через ICMP

Диагностика

См. также