Открыть сервисСервис

ICMP — протокол контроля сообщений интернета

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

Общие сведения

ICMP описан в стандарте RFC 792, опубликованном в 1981 году Джоном Постелом и Джоном Рейнхартом как часть первоначального набора протоколов TCP/IP. Протокол работает на сетевом (третьем) уровне модели OSI, однако по формату напоминает транспортный: у него собственный заголовок и полезная нагрузка. Тем не менее ICMP не выделяется в отдельный уровень и не предоставляет сервис приложениям напрямую.

Ключевые свойства ICMP:

  • инкапсуляция в дейтаграмму IP с полем «протокол» равным 1 (для IPv4) или 58 (для IPv6);
  • отсутствие механизмов надёжной доставки — сообщения ICMP могут теряться, дублироваться и приходить вне порядка;
  • сообщения об ошибках никогда не сопровождаются ответом ICMP, чтобы избежать циклических сообщений;
  • ICMP-сообщения генерируются узлами (маршрутизаторами или конечными хостами), но не источником исходного пакета.

Формат сообщения

Заголовок ICMP начинается с байта типа (Type) и байта кода (Code), которые определяют назначение сообщения. Далее следует контрольная сумма (Checksum), вычисляемая по всему сообщению, и 4 байта, интерпретация которых зависит от типа. За заголовком следует обычно первые 8 байт дейтаграммы IP, вызвавшей ошибку, а при необходимости — дополнительные данные.

Основные типы сообщений

ТипНазначение
0Echo Reply — ответ на запрос ping
3Destination Unreachable — назначение недоступно
4Source Quench — просьба снизить скорость отправки (устарел)
5Redirect — перенаправление маршрута
8Echo Request — запрос ping
11Time Exceeded — превышено время жизни пакета (TTL)
12Parameter Problem — проблема в заголовке пакета
13 / 14Timestamp Request / Reply — запрос и ответ метки времени
17 / 18Address Mask Request / Reply — запрос и ответ маски подсети

Коды уточняют причину внутри типа. Например, тип 3 имеет коды: 0 — сеть недоступна, 1 — хост недоступен, 3 — порт недоступен, 4 — фрагментация запрещена, но не выполнена.

Основные применения

Диагностика: ping

Утилита ping использует пару ICMP-сообщений: Echo Request (тип 8) и Echo Reply (тип 0). Отправитель формирует запрос с идентификатором и порядковым номером, принимающая сторона возвращает его содержимое в ответе. По времени между отправкой и получением ответа вычисляется время кругового прохождения (RTT), а по количеству полученных ответов — процент потерь. Ping работает на уровне IP и не требует открытия портов на принимающей стороне.

Трассировка маршрута: traceroute

Утилита traceroute (в Windows — tracert) строится на двух свойствах ICMP. Первый: отправка пакетов с последовательно увеличивающимся полем TTL (Time To Live). Каждый маршрутизатор, уменьшающий TTL до нуля, возвращает сообщение Time Exceeded (тип 11), что позволяет идентифицировать промежуточный узел. Второй: когда пакет достигает конечного назначения, тот отвечает Destination Unreachable с кодом 3 (порт недоступен), что завершает трассировку.

Уведомление об ошибках

ICMP Destination Unreachable отправляется маршрутизатором, который не может доставить пакет: нет маршрута, сеть или хост недоступны, порт закрыт, фрагментация запрещена. Сообщение Redirect (тип 5) говорит источнику, что для данной сети существует более подходящий маршрут через другой интерфейс.

ICMPv6

В сетях IPv6 ICMP играет ещё более значимую роль, чем в IPv4. Протокол ICMPv6 (RFC 4443) объединяет функции ICMP, IGMP (управление групповой рассылкой) и ARP (разрешение адресов). Для IPv6 обязательны сообщения Neighbor Discovery — обнаружение соседей, определение MAC-адресов, обнаружение роутеров и автоконфигурация адресов. Отказ от работы ICMPv6 может привести к отказу работы сети IPv6 в целом.

Ограничения и проблемы безопасности

ICMP изначально не предусматривал механизмов аутентификации, что породило ряд атак. Наиболее известная — ping of death («смертельный пинг»): отправка аномально большого ICMP-пакета, вызывавшего переполнение буферов при его фрагментации и сборке. Среди других векторов — smurf-атака (спуфинг источника и рассылка широковещательных Echo Request, что приводит к флуду жертвы ответами), ICMP flood (перегрузка канала запросами) и ICMP tunneling — туннелирование произвольных данных внутри полезной нагрузки ICMP для обхода межсетевых экранов.

Межсетевые экраны и маршрутизаторы часто фильтруют или ограничивают ICMP-трафик, что снижает риск атак, но одновременно ухудшает диагностику: блокировка Echo Request делает ping бесполезным, а блокировка Time Exceeded — затрудняет трассировку маршрута.

Роль в работе сети

Полное блокирование ICMP нередко приводит к деградации работы TCP/IP-сети. Например, сообщение Fragmentation Needed (тип 3, код 4) используется механизмом Path MTU Discovery, который подбирает оптимальный размер пакета для конкретного канала. Если это сообщение блокируется, TCP-соединения могут «зависать» при попытке передать данные, не помещающиеся в MTU промежуточного канала. Поэтому рекомендуется фильтровать ICMP избирательно, а не запрещать его полностью.

Источники

  • RFC 792. Internet Control Message Protocol (J. Postel, 1981)
  • RFC 4443. Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification
  • RFC 1122. Requirements for Internet Hosts — Communication Layers
  • Курьин В. А. «TCP/IP и безопасность сетей»
  • Таненбаум Э., Уэзеролл Д. «Компьютерные сети»
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru