Протокол 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)
Утилита traceroute (в Windows — tracert) использует 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 →


