ICMP — часть стека TCP/IP, работающая поверх IP (протокол номер 1). Не используется для передачи данных приложений — только для управляющих сообщений: «хост недоступен», «сеть недостижима», «превышено время жизни», «нужна фрагментация». Без ICMP диагностика сети была бы невозможна.
Как работает
Каждое ICMP-сообщение имеет тип (type) и код (code). Основные типы: Echo Request (8) / Echo Reply (0) — это то, что делает ping. Time Exceeded (11) — TTL истёк, используется traceroute. Destination Unreachable (3) — пункт назначения недостижим (коды: 0=net, 1=host, 3=port unreachable, 4=fragmentation needed).
Traceroute использует ICMP TTL Exceeded: отправляет пакеты с TTL=1, 2, 3... Первый маршрутизатор на пути уменьшает TTL до 0 и возвращает ICMP Time Exceeded — так traceroute узнаёт каждый хоп на пути к цели.
ICMP Redirect (5) — маршрутизатор сообщает хосту, что есть более короткий путь. Это создаёт угрозу безопасности: злоумышленник может отправить поддельный ICMP Redirect и перенаправить трафик. Поэтому многие системы игнорируют ICMP Redirect: net.ipv4.conf.all.accept_redirects=0 в Linux.
История
ICMP стандартизирован в RFC 792 (1981). ICMPv6 (RFC 4443, 2006) разработан для IPv6 и заменяет также ARP — функцию обнаружения соседей выполняет NDP (Neighbor Discovery Protocol) поверх ICMPv6.
На что обращать внимание
Полная блокировка ICMP на сервере — распространённая ошибка. Без ICMP перестают работать: path MTU discovery (определение максимального MTU на пути), traceroute для диагностики, корректная обработка ошибок TCP. Правильная политика: разрешить Echo Request/Reply и Destination Unreachable, заблокировать Redirect и Timestamp для безопасности.
Типы ICMP-сообщений
Type 0/8 (Echo Reply/Request) — ping. Type 3 (Destination Unreachable) — хост или порт недоступен; подтип 3 — Port Unreachable (Connection refused). Type 11 (Time Exceeded) — TTL истёк; используется traceroute.
ICMP и фаерволы
Полная блокировка ICMP — ошибка: без ICMP Type 3 (Destination Unreachable) не работает Path MTU Discovery, что приводит к «чёрным дырам» в маршрутизации. Правильная политика: разрешить Type 3 и Type 8; блокировать остальные при необходимости.
ICMP для мониторинга доступности
Сервисы мониторинга (Uptime Robot, Zabbix) используют ICMP ping. Рост round-trip time выше базового значения сигнализирует о перегрузке маршрута или сети хостинг-провайдера. Packet loss в ping-тесте — индикатор деградации качества канала.
Утилиты на основе ICMP
ping: ICMP Type 8 (echo request). traceroute/tracert: ICMP Type 11 (time exceeded) или UDP. mtr (My Traceroute): комбинирует ping + traceroute, показывает потери на каждом хопе. hping3: расширенный ping, поддерживает TCP SYN ping. Все используют ICMP или схожие механизмы диагностики сети.
ICMP Redirect
ICMP Type 5 (Redirect): маршрутизатор сообщает хосту об альтернативном маршруте. Потенциальный вектор атаки (ICMP redirect injection). На серверах отключить: sysctl -w net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.send_redirects=0. В /etc/sysctl.conf для постоянства.