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

Протокол ICMP

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

История

Протокол ICMP был разработан как часть оригинального стека протоколов ARPANET для обеспечения обратной связи между узлами при передаче IP-датаграмм. В ранних версиях IP отсутствовали механизмы уведомления отправителя о недоставке пакетов или сетевых ошибках. ICMP впервые был описан в RFC 777 (1981 год), а затем стандартизирован в RFC 792 (сентябрь 1981 года). Разработчики, в первую очередь Джон Постел, заложили в протокол минимальный набор функций: сообщения о недостижимости адресата, превышении времени жизни (TTL), ошибках фрагментации и эхо-запросы для проверки связности.

С развитием IPv6 протокол ICMP был адаптирован для новой версии стека — ICMPv6 (RFC 4443, 2006 год), который выполняет дополнительные функции, такие как обнаружение соседей (Neighbor Discovery Protocol, NDP) и автоконфигурация адресов, отсутствующие в ICMP для IPv4. Несмотря на возраст, ICMP остаётся критически важным для диагностики и управления сетями.

Архитектура и инкапсуляция

ICMP-сообщения передаются внутри IP-пакетов. В заголовке IP-пакета для ICMP указывается протокол номер 1 (для IPv4). Структура ICMP-сообщения включает:

  • Тип (1 байт) — определяет класс сообщения (например, 8 — эхо-запрос, 0 — эхо-ответ, 3 — недостижимость узла, 11 — превышение времени).
  • Код (1 байт) — уточняет причину внутри типа (например, для типа 3: код 0 — сеть недоступна, код 1 — хост недоступен, код 3 — порт недоступен).
  • Контрольная сумма (2 байта) — вычисляется по всему ICMP-сообщению, включая заголовок и данные.
  • Данные — обычно содержат часть исходного IP-пакета (первые 8 байт заголовка IP и начало payload), вызвавшего ошибку, что позволяет отправителю идентифицировать проблемный пакет.

В ICMPv6 формат аналогичен, но контрольная сумма рассчитывается с учётом псевдозаголовка IPv6, а номера типов частично отличаются.

Классификация сообщений ICMP

Сообщения ICMP для IPv4 делятся на несколько функциональных групп:

Ошибки (Error Messages)

Эти сообщения генерируются маршрутизатором или узлом-получателем в случае проблем при доставке IP-пакетов. Ключевые типы:

  • Destination Unreachable (тип 3) — пакет не может быть доставлен (сеть, хост, протокол, порт недоступны; требуется фрагментация, но DF-флаг установлен; маршрут к сети не найден).
  • Source Quench (тип 4) — устаревшее сообщение о перегрузке сети; рекомендовано не использовать (RFC 1812).
  • Time Exceeded (тип 11) — превышено поле Time To Live (TTL) в заголовке IP (код 0) или время сборки фрагментов истекло (код 1). Используется в утилите traceroute.
  • Parameter Problem (тип 12) — ошибка в заголовке IP (неверная версия, опция, длина).

Информационные (Informational Messages)

Не сообщают об ошибках, а служат для диагностики и запроса информации:

  • Echo и Echo Reply (типы 8 и 0) — основа утилиты ping.
  • Timestamp и Timestamp Reply (типы 13 и 14) — запрос времени узла (устаревшее, не всегда поддерживается).
  • Address Mask Request и Reply (типы 17 и 18) — запрос маски подсети (устаревшее для IPv4).
  • Router Solicitation и Advertisement (типы 9 и 10) — запрос/объявление присутствия маршрутизатора (в современных сетях заменяется другими протоколами).

ICMPv6 (расширенный набор)

В IPv6 протокол ICMPv6 включает дополнительные типы:

  • Echo Request/Reply (типы 128 и 129) — аналог ping для IPv6.
  • Neighbor Solicitation/Advertisement (типы 135 и 136) — обнаружение соседей, разрешение MAC-адресов.
  • Router Solicitation/Advertisement (типы 133 и 134) — сообщения маршрутизаторов для автоконфигурации адресов.
  • Multicast Listener Discovery (MLD) — управление подпиской на многоадресные группы.

Применение

Проверка связности (ping)

Утилита ping отправляет ICMP-сообщение типа Echo Request на узел-получатель и ожидает Echo Reply. Это позволяет проверить:

  • Доступность удалённого хоста.
  • Время кругового обхода (RTT) и его вариацию.
  • Потери пакетов.

Ping является одним из самых распространённых инструментов сетевого администратора. Его поведение может быть изменено настройками брандмауэра (фильтрация ICMP).

Маршрутная трассировка (traceroute)

Утилита tracerouteWindowstracert) использует ICMP-сообщения Time Exceeded. Она отправляет эхо-запросы с последовательно увеличивающимися значениями TTL (1, 2, 3…). Каждый маршрутизатор при уменьшении TTL до нуля отбрасывает пакет и отправляет обратно ICMP Time Exceeded (тип 11, код 0), указывая свой IP-адрес. Таким образом, удаётся определить путь пакета.

Сообщения об ошибках

Маршрутизаторы и хосты генерируют ICMP-сообщения об ошибках для информирования отправителя о проблемах:

  • Fragmentation Needed (тип 3, код 4 с указанием MTU) — используется для Path MTU Discovery (RFC 1191), позволяя отправителю динамически определить максимальный размер пакета, не требующий фрагментации.
  • Host Unreachable — когда маршрутизатор не может найти путь в локальной сети.
  • Protocol Unreachable — если на узле-получателе не запущен протокол, указанный в пакете.

Управление перегрузкой (устаревшее)

Сообщение Source Quench (тип 4) исторически использовалось для сигнала о перегрузке, но от него отказались из-за низкой эффективности и риска атак.

Значение и безопасность

ICMP является критическим для нормальной работы IP-сетей, но его уязвимости и особенности требуют осторожного администрирования:

Положительные аспекты

  • Диагностика без дополнительных протоколов — ICMP позволяет выявлять проблемы на сетевом уровне без установления транспортных соединений (TCP/UDP).
  • Поддержка Path MTU Discovery — автоматическое определение MTU между узлами, что снижает фрагментацию и повышает пропускную способность.
  • Работа NAT и брандмауэров — корректная обработка ICMP необходима для прохождения пакетов через трансляторы адресов и файрволы.

Проблемы безопасности

  • Атаки с использованием ICMP:
  • Ping of Death (устаревшая атака) — отправка пакета ICMP размером более 65535 байт (фрагментированного), вызывавшая переполнение буфера в старых системах.
  • ICMP Flood — DDoS-атака с массовыми эхо-запросами, истощающая ресурсы жертвы.
  • Smurf-атака — отправка ICMP Echo Request с подменённым адресом отправителя на широковещательный адрес сети; все хосты сети отвечают жертве, создавая лавину трафика.
  • Туннелирование — возможность встраивания данных в ICMP-сообщения (например, в инструментах Covert Channel), что используется для обхода брандмауэров.
  • Фильтрация — многие администраторы ограничивают ICMP-трафик на периметре сети (например, блокируют входящие эхо-запросы), что может затруднить диагностику, но повышает защиту от простейших атак. Рекомендуется разрешать только критически важные сообщения (Destination Unreachable, Time Exceeded, Parameter Problem) и блокировать типы, не требующиеся для работы сети.

Ограничения

  • ICMP не имеет аутентификации и шифрования (в IPv4). В ICMPv6 добавлена поддержка IPsec, но на практике используется редко.
  • Некоторые типы сообщений (Source Quench, Timestamp) считаются устаревшими и не поддерживаются многими современными маршрутизаторами.

Интересные факты

  • ICMP не является протоколом верхнего уровня; он считается частью IP-уровня, хотя формально инкапсулируется в IP и обрабатывается отдельно. Поэтому некоторые анализаторы (например, Wireshark) показывают ICMP как протокол с номером 1.
  • В Windows при выполнении ping по умолчанию используется ICMP Echo Request, и приоритет пакетов не указывается. В Linux можно задать метку QoS с помощью опций.
  • Протокол ICMP используется в некоторых механизмах обнаружения неработающих маршрутов (например, ICMP Router Discovery и ICMP Redirect) — сообщение Redirect (тип 5) позволяет маршрутизатору указывать хосту лучший маршрут к сети.
  • В сетях с NAT (Network Address Translation) ICMP-сообщения об ошибках должны модифицироваться, чтобы содержать корректные IP-адреса и порты, иначе диагностика за NAT может быть неточной.
  • В ICMPv6 существенно расширена роль: он заменяет ARP (через NDP) и IGMP (через MLD), делая протокол многофункциональным, но и более критичным к потерям — некорректная обработка ICMPv6 может нарушить работу всей сети IPv6.

Источники

  • RFC 777 (ICMPv4, замена), RFC 792 (Internet Control Message Protocol), RFC 1812 (Requirements for IP Version 4 Routers), RFC 4443 (ICMPv6), RFC 1191 (Path MTU Discovery), RFC 4884 (Extended ICMP to Support Multi-Part Messages)
  • W. R. Stevens, «TCP/IP Illustrated, Vol. 1: The Protocols», Addison-Wesley, 1994
  • Д. Таненбаум, Т. Уэзеролл, «Компьютерные сети», 5-е издание, Питер, 2012
  • Сетевые инструменты и документация (Wireshark, ping, traceroute, iptables man-страницы)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →