ICMP

Перейти к навигацииПерейти к поиску
ICMP
Название Internet Control Message Protocol
Уровень (по модели OSI) Сетевой
СемействоTCP/IP
Порт/ID1
СпецификацияRFC 792
Логотип Викисклада Медиафайлы на Викискладе

ICMP (англ. Internet Control Message Protocol — протокол межсетевых управляющих сообщений[1]) — сетевой протокол, входящий в стек протоколов 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
Тип СтатусКодСообщениеДанные (длина, бит)
0 0Эхо-ответ
Идентификатор (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 не используетсяЗарезервировано
8 0Эхо-запрос
Идентификатор (16)Номер последовательности (16)
Данные (переменная)
9 0Объявление маршрутизатора
Количество адресов (8)Размер элемента (8)Срок действия (16)
Адрес[1] (32)
Предпочтительность[1] (32)
Адрес[N] (32)
Предпочтительность[N] (32)
10 0Запрос маршрутизатора
Не используется (32)
11 Время жизни дейтаграммы истекло
Не используется (32)
Заголовок IP, Начало исходной дейтаграммы (64)
0Время жизни пакета (TTL) истекло при транспортировке
1Время жизни пакета истекло при сборке фрагментов
12 Неверный параметр (проблема с параметрами дейтаграммы: ошибка в IP-заголовке или отсутствует необходимая опция)
0Указатель говорит об ошибке
Указатель (8)Не используется (24)
Заголовок IP, Начало исходной дейтаграммы (64)
1Отсутствует требуемая опция
Не используется (32)
Заголовок IP, Начало исходной дейтаграммы (64)
2Некорректная длина
13 0Запрос метки времени
Идентификатор (16)Номер последовательности (16)
Начальное время (32)
Время приёма (32)
Время отправки (32)
14 0Ответ с меткой времени
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)
40 Photuris 
0Зарезервировано
1Неизвестный индекс параметров безопасности
2Параметры безопасности верны, но произошла ошибка аутентификации
3Параметры безопасности верны, но произошёл сбой при расшифровке
4Требуется проверка подлинности
5Требуется авторизация
41 экспериментальный
42—252 Зарезервировано
253-254 экспериментальный Зарезервировано для экспериментов по RFC 3692
255 зарезервирован Зарезервировано

Правила генерации ICMP-пакетов

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

См. также

Примечания

  1. Протокол ICMP. Дата обращения: 29 октября 2017. Архивировано 14 марта 2016 года.

Ссылки

Правила чтения таблиц, описывающих структуру заголовков сетевых протоколов