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 |
Запрос маршрутизатора |
|
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-пакетов
- При потере ICMP-пакета никогда не генерируется новый.
- ICMP-пакеты никогда не генерируются в ответ на IP-пакеты с широковещательным или групповым адресом, чтобы не вызывать перегрузку в сети (так называемый «широковещательный шторм»).
- При повреждении фрагментированного IP-пакета ICMP-сообщение отправляется только после получения первого повреждённого фрагмента, поскольку отправитель всё равно повторит передачу всего IP-пакета целиком.
См. также
Примечания
- ↑ Протокол ICMP
Ссылки