ICMP

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

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

Технические подробности

Протокол ICMP описан в RFC 792 (с дополнениями в RFC 950) и является стандартом Интернета (входит в стандарт STD 5 вместе с IP). Хотя формально ICMP использует 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-сообщения (тип 12) генерируются при нахождении ошибок в заголовке IP-пакета (за исключением самих ICMP-пакетов, дабы не привести к бесконечно растущему потоку ICMP-сообщений об ICMP-сообщениях).

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

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

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

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

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

Формат пакета ICMP

Октет 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
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
40 Photuris  
0 Зарезервировано
1 Неизвестный индекс параметров безопасности
2 Параметры безопасности верны, но произошла ошибка аутентификации
3 Параметры безопасности верны, но произошел сбой при расшифровке
4 Требуется проверка подлинности
5 Требуется авторизация
41—255 Зарезервировано

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

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

См. также

Примечания

  1. Протокол ICMP

Ссылки