ICMP
(
англ.
Internet Control Message Protocol
— протокол межсетевых управляющих сообщений
) —
сетевой протокол
, входящий в
стек протоколов TCP/IP
. В основном ICMP используется для передачи сообщений об ошибках и других исключительных ситуациях, возникших при передаче данных, например, запрашиваемая услуга недоступна или хост или
маршрутизатор
не отвечают. Также на ICMP возлагаются некоторые сервисные функции (services).
Технические подробности
Протокол ICMP описан в
от 1981 года Jon Postel (с дополнениями в
). 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
Октет (байт)
|
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
|
Запрос маршрутизатора
|
|
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
|
экспериментальный
|
|
Зарезервировано для экспериментов по
|
|
255
|
зарезервирован
|
|
Зарезервировано
|
|
Правила генерации ICMP-пакетов
-
При потере ICMP-пакета никогда не генерируется новый.
-
ICMP-пакеты никогда не генерируются в ответ на IP-пакеты с широковещательным или групповым адресом, чтобы не вызывать перегрузку в сети (так называемый
широковещательный шторм
).
-
При повреждении фрагментированного IP-пакета ICMP-сообщение отправляется сразу после получения первого повреждённого фрагмента, поскольку отправитель всё равно повторит передачу всего IP-пакета целиком.
См. также
Примечания
-
(неопр.)
. Дата обращения: 29 октября 2017.
14 марта 2016 года.
Ссылки
-
(ICMPv4)
-
Address Mask
-
(дополнительные типы ICMP-сообщений для существующих кодов)
-
Traceroute
-
Router Advertisement Solicitation
-
Conversion Failed
-
(дополнительные типы ICMP-сообщений для существующих кодов)
-
(ICMPv6)
-
(ICMPv6)
-
(ICMPv6)
-
Расширение сообщений и обратная совместимость
-
-
с 01 по 05 документ