ICMP — Internet Control Message Protocol
Служебный протокол сетевого уровня (L3, номер 1 в поле protocol IP-заголовка). Не переносит пользовательские данные — используется для передачи сообщений об ошибках, диагностики и управления сетью.
Где живёт в стеке
ICMP — надстройка над IP, не над TCP или UDP. Не имеет портов. ICMP-пакет заворачивается прямо в IP с protocol=1 (для IPv6 — protocol=58, ICMPv6).
Основные типы (IPv4)
| Type | Название | Зачем |
|---|---|---|
| 0 | Echo Reply | ответ на ping |
| 3 | Destination Unreachable | хост/сеть/порт недостижим |
| 5 | Redirect | «ходи через другой роутер» |
| 8 | Echo Request | запрос ping |
| 11 | Time Exceeded | TTL=0, база traceroute |
| 12 | Parameter 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 «на всякий случай». Плохая идея:
- Ломает PMTU Discovery — соединения через VPN, IPsec, GRE молча зависают.
- Ломает traceroute — маршрут не диагностируется.
- Не помогает от атак: ICMP flood режется rate-limit'ом, а не полным запретом.
Правильно: 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
- ICMP flood / Ping flood — заваливание жертвы Echo Request'ами.
- Smurf — Echo Request с подменённым src=жертвы на broadcast, все хосты сети отвечают жертве. Современные сети блокируют.
- Ping of Death — фрагментированный оверсайз-пакет, ломал стек в 90-е.
- ICMP tunnel — данные в payload Echo Request/Reply. Инструмент:
ptunnel. Обходит примитивные фаерволы, легко детектируется DPI.
Диагностика
ping -c 4 8.8.8.8— 4 пакета.ping -s 1472 host— задать размер payload (тест MTU).ping -M do -s 1472 host— с DF, поиск PMTU.hping3 --icmp host— гибче штатного ping.