Основные теоретические сведения. Межсетевой протокол управляющих сообщений 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 для идентификации сеанса. Номер очереди может увеличиваться на единицу при посылке каждого эхо-сообщения (запроса). Компьютер, отозвавшийся на это сообщение, возвращает в своем ответе те же значения для идентификатора и номера очереди, что были в исходном эхо-сообщении.