Основные теоретические сведения. Межсетевой протокол управляющих сообщений ICMP

Межсетевой протокол управляющих сообщений ICMP

Межсетевой протокол управляющих сообщений ICMP (Internet Control Message Protocol), специфицированный в RFC 792, играет роль транспортного протокола для управляющей и диагностической информации, которой обмениваются между собой IP-, TCP- или UDP-модули скрытно от приложений. Протокол ICMP поддерживается в обязательном порядке каждым IP-модулем. Сообщения ICMP должны отправляться в некоторых затруднительных ситуациях. Например, когда дейтаграмма не может достичь своего адресата, когда шлюз не имеет достаточно места в своем буфере для передачи какой-либо дейтаграммы, или когда шлюз приказывает хост-компьютеру отправлять информацию по более короткому маршруту.

Заголовок ICMP-пакета

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

Рис.5.1. Формат ICMP пакета

· Тип – однобайтовое поле, содержащее идентификатор типа ICMP-пакета. Возможные значения этого поля приведены в таблице.

Таблица 5.1.

Значения идентификаторов типа ICMP пакета

Поле «Тип» Назначение
Ответ на запрос эха
Адресат недоступен
Подавление источника
Перенаправление
Запрос эха
Исчерпано время жизни
Ошибка в параметре
Запрос временной метки
Ответ на запрос временной метки

· Код – однобайтовое поле, значение которого конкретизирует назначение ICMP-пакета определенного типа.

· Контрольная сумма – 16-битовое поле, содержащее Internet-контрольную сумму, подсчитанную для всего ICMP-пакета целиком.

· Разное – четырехбайтовое поле, предназначенное для хранения разнообразной информации, специфичной для ICMP-пакетов определенного типа (например, номера в TCP-последовательности, IP-адреса и т.п.).

· Тело пакета – здесь содержится заголовок IP-сегмента, явившегося порождения данного ICMP-пакета, и первые 8 байт данных тела этого IP-сегмента. Если ICMP-пакет есть результат проявления аномалии в TCP- или UDP-взаимодействии, то эти 8 байт будут представлять собой первые восемь байтов, соответственно, TCP- или UDP-заголовка, что дает возможность определить, в частности, номера портов (а, следовательно, и использующие их прикладные программы).

Для ICMP-пакетов некоторых типов тело может содержать не начало IP-сегмента, а тестовые данные.

Источниками и обработчиками ICMP-пакетов могут быть как IP-модули, так и TCP- и UDP-модули (но никогда прикладные программы).

Проблемы в доставке и обработке ICMP-пакетов никогда не приводят к порождению новых ICMP-пакетов, уведомляющих об этих проблемах. Сделано это с целью ликвидации возможных бесконечных циклов генерации ICMP-пакетов в сети.

Типы ICMP-пакетов

Рассмотрим несколько основных типов ICMP сообщений.

1. Сообщение о превышении времени жизни.

Рис. 5.2. Формат ICMP пакета о превышении контрольного времени

Поля IP заголовка – заимствованы сеть и адрес отправителя из исходной дейтаграммы с данными.

Поля ICMP сообщения:

· Тип – 11

· Код – 0 – при передаче превышено время жизни

1 – превышено контрольное время при сборке фрагментов дейтаграммы.

· Контрольная сумма – является 16-битным дополнением до единицы суммы дополнений в ICMP сообщении, начиная с поля типа ICMP.

· Internet заголовок + 64 бита данных из исходной дейтаграммы – используются хост-компьютером для привязки сообщения к соответствующему процессу. Если протокол более высокого уровня использует номера портов, то предполагается, что эти номера входят в первые 64 бита данных в исходной дейтаграмме.

2. Эхо-сообщение.

Для реализации эха IP-модуль на узле A отправляет узлу B ICMP-пакет типа "запрос эха", содержащий в своем теле вместо IP-заголовка тестовые данные произвольной длины. Узел B, получив такой запрос, возвращает узлу A ICMP-пакет типа "ответ на запрос эха", содержащий те же данные, что и в запросе. Эхо-посылки используются для проверки достижимости удаленных узлов сети и измерения времени прохождения данных.

Рис. 5.3. Формат эхо-сообщения и сообщения в ответ на эхо

Поля IP заголовка: адрес отправителя в эхо-сообщении будет адресом получателя в ответном сообщении. Чтобы сформировать сообщение ответа, следует просто переставить местами адреса отправителя и получателя, код типа изменить на 0 и пересчитать контрольную сумму.

Поля ICMP сообщения:

· Тип – 8 – эхо-сообщение;

0 – сообщение в ответ на эхо

· Код – 0

· Контрольная сумма – то же, что и в предыдущем ICMP-сообщении

· Идентификатор – если код = 0, то идентификатор для соотнесения эхо-сообщений и ответов на них должен быть обнулен.

· Номер очереди – если код = 0, то номер очереди, служащий для соотнесения эхо-сообщений и ответов на них, должен быть обнулен.

Описание – данные из эхо-сообщения должны быть переданы в ответе на это сообщение. Идентификатор и номер очереди могут использоваться отправителем эхо-сообщения с целью идентификации приходящих пакетов. Например, идентификатор может использоваться в качестве порта подобно протоколам TCP и UDP для идентификации сеанса. Номер очереди может увеличиваться на единицу при посылке каждого эхо-сообщения (запроса). Компьютер, отозвавшийся на это сообщение, возвращает в своем ответе те же значения для идентификатора и номера очереди, что были в исходном эхо-сообщении.

Наши рекомендации