ICMP ( — протокол межсетевых управляющих сообщений) — сетевой протокол, входящий в стек протоколов TCP/IP. В основном ICMP используется для передачи сообщений об ошибках и других исключительных ситуациях, возникших при передаче данных, например, запрашиваемая услуга недоступна или хост или маршрутизатор не отвечают. Также на ICMP возлагаются некоторые сервисные функции (services).

Технические подробности Протокол ICMP описан в RFC 792 от 1981 года Jon Postel (с дополнениями в RFC 950). ICMP является стандартом Интернета (входит в стандарт STD 5 вместе с IP). Хотя формально протокол использует IP (ICMP-пакеты инкапсулируются в IP пакеты), он является неотъемлемой частью IP и обязателен при реализации стека TCP/IP. Текущая версия ICMP для IPv4 называется ICMPv4. В IPv6 существует аналогичный протокол ICMPv6.

ICMP-сообщение строится из IP-пакетов, сгенерировавших ICMP-ответ. Протокол IP инкапсулирует соответствующее ICMP-сообщение с новым заголовком IP (чтобы отправить ICMP-сообщение обратно отправителю) и передает полученные пакеты дальше.

Например, каждая машина, которая перенаправляет IP-пакеты (например маршрутизатор), уменьшает значение поля Time to live (TTL) заголовка IP-пакета на единицу; если TTL достигает 0, на источник пакета отправляется ICMP-сообщение о превышении TTL.

ICMP основан на протоколе IP. Каждое ICMP-сообщение инкапсулируется непосредственно в пределах одного IP-пакета, и, таким образом, как и UDP и в отличие от TCP, ICMP является т. н. «ненадежным» (не контролирующим доставку и её правильность). В отличие от UDP, где реализация надёжности возложена на ПО прикладного уровня, ICMP (в силу специфики применения) обычно не нуждается в реализации надёжной доставки. Его цели отличны от целей транспортных протоколов, таких как TCP и UDP: он, как правило, не используется для передачи и приёма данных между конечными системами. ICMP не используется непосредственно в приложениях пользователей сети (исключение составляют инструменты Ping и Traceroute). Тот же Ping, например, служит обычно как раз для проверки потерь IP-пакетов на маршруте.

Использование ICMP-сообщений ICMP-сообщения (тип 1,2) генерируются при нахождении ошибок в заголовке IP-пакета (за исключением самих ICMP-пакетов, дабы не привести к бесконечно растущему потоку ICMP-сообщений об ICMP-сообщениях).

ICMP-сообщения (тип 3) генерируются маршрутизатором при отсутствии маршрута к адресату.

Утилита Ping, служащая для проверки возможности доставки IP-пакетов, использует ICMP-сообщения с типом 8 (эхо-запрос) и 0 (эхо-ответ).

Утилита Traceroute, отображающая путь следования IP-пакетов, использует ICMP-сообщения с типом 11.

ICMP-сообщения с типом 5 используются маршрутизаторами для обновления записей в таблице маршрутизации отправителя.

ICMP-сообщения с типом 4 используются получателем (или маршрутизатором) для управления скоростью отправки сообщений отправителем.

Формат пакета ICMP Октет (байт)012345678910111213141516171819202122232425262728293031 [0—3]ТипКодКонтрольная сумма …Данные (формат зависит от значений полей «Код» и «Тип»)

+ Типы пакетов ICMP ТипСтатусКодСообщениеДанные (длина, бит) 00Эхо-ответ Идентификатор (16)Номер последовательности (16) Данные (переменная)

1, 2не используется Зарезервировано 3Адресат недоступен Не используется (32) Заголовок IP, Начало исходной дейтаграммы (64)

0Сеть недостижима 1Узел недостижим 2Протокол недостижим 3Порт недостижим 4Необходима фрагментация, но установлен флаг её запрета (DF) 5Неверный маршрут от источника 6Сеть назначения неизвестна 7Узел назначения неизвестен 8Узел источник изолирован 9Сеть административно запрещена 10 Узел административно запрещён 11Сеть недоступна для ToS 12Узел недоступен для ToS 13Коммуникации административно запрещены 14Нарушение порядка предпочтения узлов 15Активно отсечение порядка предпочтения 4устарел0Сдерживание источника (отключение источника при переполнении очереди) 5Перенаправление Адрес маршрутизатора (32) Заголовок IP, Начало исходной дейтаграммы (64)

0Перенаправление пакетов в сеть 1Перенаправление пакетов к узлу 2Перенаправление для каждого типа обслуживания (ToS) 3Перенаправление пакета к узлу для каждого типа обслуживания 6устарел0Альтернативный адрес узла 7не используется Зарезервировано 80Эхо-запрос Идентификатор (16)Номер последовательности (16) Данные (переменная)

90Объявление маршрутизатора Количество адресов (8) Размер элемента (8) Срок действия (16) Адрес (32) Предпочтительность (32) … Адрес[N] (32) Предпочтительность[N] (32)

100Запрос маршрутизатора Не используется (32)

11Время жизни дейтаграммы истекло Не используется (32) Заголовок IP, Начало исходной дейтаграммы (64)

0Время жизни пакета (TTL) истекло при транспортировке 1Время жизни пакета истекло при сборке фрагментов 12Неверный параметр (проблема с параметрами дейтаграммы: ошибка в IP-заголовке или отсутствует необходимая опция) 0Указатель говорит об ошибке Указатель (8)Не используется (24) Заголовок IP, Начало исходной дейтаграммы (64)

1Отсутствует требуемая опция Не используется (32) Заголовок IP, Начало исходной дейтаграммы (64)

2Некорректная длина 130Запрос метки времени Идентификатор (16)Номер последовательности (16) Начальное время (32) Время приёма (32) Время отправки (32)

140Ответ с меткой времени 15устарел0Информационный запрос Идентификатор (16)Номер последовательности (16)

16устарел0Информационный ответ 17устарел0Запрос адресной маски Идентификатор (16)Номер последовательности (16) Маска (32)

18устарел0Отклик на запрос адресной маски 19зарезервирован Зарезервировано (для обеспечения безопасности) 20—29зарезервирован Зарезервировано (для экспериментов на устойчивость к ошибкам) 30устарелТрассировка маршрута Идентификатор (16) Не используется (16) Количество хопов исходящего пакета (16)Количество хопов возвращающегося пакета (16) Скорость линии связи (32) MTU линии связи (32)

0Исходящий пакет успешно отправлен 1Путь для исходящего пакета не найден, пакет уничтожен 31устарелОшибка преобразования датаграммы Указатель (32) Заголовок IP и транспортного протокола исходной дейтаграммы

0Неизвестная или неуказанная ошибка 1Невозможно конвертировать опцию 2Неизвестная обязательная опция 3Неподдерживаемая обязательная опция 4Неподдерживаемый транспортный протокол 5Превышена полная длина 6Превышена длина заголовка IP 7Номер транспортного протокола больше 255 8Номер порта вне допустимого диапазона 9Превышена длина заголовка транспортного протокола 10Переход через границу 32 бит и установлен бит ACK 11Неизвестная обязательная опция транспортного протокола 32устарел Перенаправление для мобильного узла 33устарел IPv6 Where-Are-You (где вы находитесь) 34устарел IPv6 I-Am-Here (я здесь) 35устарел Запрос перенаправления для мобильного узла 36устарел Отклик на запрос перенаправления для мобильного узла 37устарел Запрос доменного имени 38устарел Ответ на запрос доменного имени 39устарел Обнаружение алгоритма безопасности SKIP (SKIP algorithm discovery ICMP message) 40Photuris  0Зарезервировано 1Неизвестный индекс параметров безопасности 2Параметры безопасности верны, но произошла ошибка аутентификации 3Параметры безопасности верны, но произошёл сбой при расшифровке 4Требуется проверка подлинности 5Требуется авторизация41экспериментальный 42—252 Зарезервировано253-254экспериментальныйЗарезервировано для экспериментов по RFC 3692255зарезервированЗарезервировано

Правила генерации ICMP-пакетов При потере ICMP-пакета никогда не генерируется новый. ICMP-пакеты никогда не генерируются в ответ на IP-пакеты с широковещательным или групповым адресом, чтобы не вызывать перегрузку в сети (так называемый широковещательный шторм). При повреждении фрагментированного IP-пакета ICMP-сообщение отправляется сразу после получения первого повреждённого фрагмента, поскольку отправитель всё равно повторит передачу всего IP-пакета целиком.

См. также ICMP-туннель

Примечания

Ссылки RFC 792 (ICMPv4) RFC 950 Address Mask RFC 1122 (дополнительные типы ICMP-сообщений для существующих кодов) RFC 1393 Traceroute RFC 1256 Router Advertisement Solicitation RFC 1475 Conversion Failed RFC 1812 (дополнительные типы ICMP-сообщений для существующих кодов) RFC 4443 (ICMPv6) RFC 2463 (ICMPv6) RFC 1885 (ICMPv6) RFC 4884 Расширение сообщений и обратная совместимость Навязывание хосту ложного маршрута с использованием протокола ICMP ICMP-атаки с 01 по 05 документ Правила чтения таблиц, описывающих структуру заголовков сетевых протоколов

Категория:Протоколы сетевого уровня Категория:Интернет-протоколы Категория:TCP/IP