Приложение 2. ТРЕБОВАНИЯ К РЕАЛИЗАЦИИ ПРОТОКОЛА ICMP
1. Назначением протокола ICMP является формирование и управление передачей сообщений:
а) об ошибках при обработке пакетов IP;
б) о состоянии узлов сети передачи данных.
2. Сообщения ICMP передаются в поле данных пакета IP. При этом значение первого байта поля данных пакета IP указывает на тип сообщения ICMP.
3. Любое неиспользованное поле сообщения ICMP устанавливается в "0".
4. Формат сообщений об ошибках при обработке пакетов IP соответствует структуре, приведенной в таблице N 1.
Таблица N 1
┌───────────────────────────────────────┬──────────────────────────────────────┐ │ Заголовок IP │ Переменная длина (байт) │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Тип сообщения │ 1 │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Код сообщения │ 1 │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Контрольная последовательность │ 2 │ │сообщения ICMP │ │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Не используется │ 4 │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Заголовок пакета IP и первые 64 бита │ Переменная длина │ │пакета IP, в котором обнаружена ошибка │ │ └───────────────────────────────────────┴──────────────────────────────────────┘
5. Сообщения протокола ICMP об ошибках в пакетах IP:
1) Сообщение "Получатель недоступен" (Destination Unreachable Message) формируется и отправляется по адресу отправителя в случае, если:
а) недоступен адрес получателя;
б) недоступен порт в требуемом направлении передачи;
в) не поддерживается требуемый стек протоколов;
г) невозможна передача пакета без фрагментации при установленном флаге запрета фрагментации.
Кодирование поля сообщения "Получатель недоступен" осуществляется в соответствии с таблицей N 2.
Таблица N 2
┌──────────────────────────────────────────────────────────┬───────────────────┐ │ Название поля │ Значение │ ├──────────────────────────────────────────────────────────┼───────────────────┤ │ Тип сообщения │ 3 │ ├─────────────┬────────────────────────────────────────────┼───────────────────┤ │ │сеть недоступна │ 0 │ │ ├────────────────────────────────────────────┼───────────────────┤ │ │узел недоступен │ 1 │ │ ├────────────────────────────────────────────┼───────────────────┤ │ │протокол недоступен │ 2 │ │ ├────────────────────────────────────────────┼───────────────────┤ │ │порт недоступен │ 3 │ │ ├────────────────────────────────────────────┼───────────────────┤ │ │фрагментация необходима, но запрещена │ 4 │ │ ├────────────────────────────────────────────┼───────────────────┤ │ │исходный маршрут недействителен │ 5 │ └─────────────┴────────────────────────────────────────────┴───────────────────┘
2) Сообщение "Время пребывания пакета IP в сети истекло" (Time Exceeded Message - TEM) передается по адресу источника данного пакета в следующих случаях:
а) при обнаружении, что поле "Время прерывания пакета" в данном пакете содержит нулевое значение;
б) при обнаружении, что заданное время пребывания данного пакета в сети истекает прежде окончания сборки его фрагментов.
Кодирование полей сообщения осуществляется в соответствии с таблицей N 3.
Таблица N 3
┌─────────────────────────────────────────────────────────────────┬────────────┐ │ Название поля │ Значение │ ├─────────────────────────────────────────────────────────────────┼────────────┤ │ Тип сообщения │ 11 │ ├────────────────┬────────────────────────────────────────────────┼────────────┤ │ Код сообщения: │Время пребывания пакета IP в сети истекло на │ 0 │ │ │транспортном участке │ │ │ ├────────────────────────────────────────────────┼────────────┤ │ │Время сборки фрагментированного пакета IP │ 1 │ │ │превышает время пребывания пакета IP в сети │ │ └────────────────┴────────────────────────────────────────────────┴────────────┘
3) Сообщение "Проблемы в параметрах" (Parameter Problem Message - PPM) формируется, если значения параметров заголовка пакета IP не позволяют завершить его корректную обработку.
Сообщение передается по адресу источника данного пакета, при этом первый байт поля "Не используется" в заголовке сообщения ICMP содержит указатель, идентифицирующий байт заголовка пакета IP (порядковый номер байта), содержание которого привело к возникновению проблем.
Кодирование полей сообщения осуществляется в соответствии с таблицей N 4.
Таблица N 4
┌───────────────────────────────────────────────────────────┬──────────────────┐ │ Название поля │ Значение │ ├───────────────────────────────────────────────────────────┼──────────────────┤ │Тип сообщения │ 12 │ ├───────────────────────────────────────────────────────────┼──────────────────┤ │Код-индикатор наличия проблем в параметрах заголовка │ 0 │ │пакета IP (принимается как от шлюза, так и от узла) │ │ └───────────────────────────────────────────────────────────┴──────────────────┘
4) Сообщение "Подавление источника" (Source Quench Message - SQM) формируется в случае невозможности обработки принимаемых пакетов по причинам:
а) переполнения буферной памяти;
б) высокой интенсивности поступления пакетов.
Сообщение передается по адресу источника удаляемого из обработки пакета.
Формируется сообщение "Подавление источника" для каждого удаленного из обработки пакета.
В случае приема сообщения "Подавление источника" уменьшается интенсивность передачи пакетов.
Кодирование полей сообщения осуществляется в соответствии с таблицей N 5.
Таблица N 5
┌──────────────────────────────────────────────────┬───────────────────────────┐ │ Название поля │ Значение │ ├──────────────────────────────────────────────────┼───────────────────────────┤ │Тип сообщения │ 4 │ ├──────────────────────────────────────────────────┼───────────────────────────┤ │Код │ 0 │ └──────────────────────────────────────────────────┴───────────────────────────┘
5) Сообщение "Перенаправление" (Redirect Message - RM) формируется в случае, если шлюз, через который надлежит продолжить передачу, принадлежит той же сети, что и узел-отправитель.
Сообщение передается по адресу источника пакета.
Поле "Не используется" в данном сообщении содержит адрес шлюза, к которому источник направляет свои пакеты.
Кодирование полей сообщения осуществляется в соответствии с таблицей N 6.
Таблица N 6
┌─────────────────────────────────────────────────────────────────┬────────────┐ │ Название поля │ Значение │ ├─────────────────────────────────────────────────────────────────┼────────────┤ │ 1 │ 2 │ ├─────────────────────────────────────────────────────────────────┼────────────┤ │Тип сообщения │ 5 │ ├──────────────┬──────────────────────────────────────────────────┼────────────┤ │Код сообщения │Перенаправление пакетов по критерию подполя "Адрес│ 0 │ │ │сети" │ │ │ ├──────────────────────────────────────────────────┼────────────┤ │ │Перенаправление пакетов по критерию подполя "Адрес│ 1 │ │ │узла" │ │ │ ├──────────────────────────────────────────────────┼────────────┤ │ │Перенаправление пакетов по критерию подполя "Тип │ 2 │ │ │обслуживания" и подполя "Адрес сети" │ │ │ ├──────────────────────────────────────────────────┼────────────┤ │ │Перенаправление пакетов по критерию подполя "Тип │ 3 │ │ │обслуживания" и подполя "Адрес узла" │ │ └──────────────┴──────────────────────────────────────────────────┴────────────┘
Сообщение "Перенаправление" не формируется для пакетов, в заголовке которых указаны функции маршрутизации от узла-отправителя и адрес шлюза в поле адреса получателя, даже если этот маршрут не оптимален.
6. Сообщения ICMP о состоянии узлов сети:
Сообщения "Запрос эхо/Отклик эхо" формирует сообщение "Запрос эхо" (Echo) по инициативе системы административного управления.
При получении сообщения "Запрос эхо" сформировывается сообщение "Отклик эхо" (Echo Reply Message - EoERM).
Сообщение имеет формат, приведенный в таблице N 7.
Таблица N 7
┌───────────────────────────────────────┬──────────────────────────────────────┐ │ Заголовок IP │ Переменная длина │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Тип сообщения │ 1 байт │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Код сообщения │ 1 байт │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Контрольная последовательность │ 2 байта │ │сообщения ICMP │ │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Идентификатор │ 2 байта │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Порядковый номер │ 2 байта │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Данные │ Переменная длина │ └───────────────────────────────────────┴──────────────────────────────────────┘
Значение поля "Тип сообщения" устанавливается в "8" для "Запроса эхо" и в "0" для "Отклика эхо".
Поле данных, принятое в сообщении "Запрос эхо", посылается обратно в сообщении "Отклик эхо" без изменений.
Поля "Идентификатор" и "Порядковый номер" являются параметрами для отслеживания соответствия многократной посылки сообщений и получения откликов.
Поле "Код сообщения" устанавливается в значение "0".
7. Сообщения "Отметка времени/Отклик на отметку времени" (Timestamp/Timestamp Reply Message - ToTRM) формируется по инициативе системы административного управления.
Сообщение имеет формат, приведенный в таблице N 8.
Таблица N 8
┌──────────────────────────────────────────────────────────────────────────────┐ │ Заголовок пакета IP │ ├─────────────────┬──────────────────┬─────────────────────────────────────────┤ │ Тип сообщения │ Код (1 байт) │ Контрольная последовательность сообщения│ │ (1 байт) │ │ ICMP (2 байта) │ ├─────────────────┴──────────────────┼─────────────────────────────────────────┤ │ Идентификатор │ Порядковый номер │ ├────────────────────────────────────┴─────────────────────────────────────────┤ │ Отметка исходного времени (4 байта) │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Отметка времени приема (4 байта) │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Отметка времени передачи (4 байта) │ └──────────────────────────────────────────────────────────────────────────────┘
Кодирование сообщений осуществляется по следующим правилам:
а) поля "Идентификатор" и "Порядковый номер" используются параметрами для отслеживания соответствия многократной посылки сообщения и получения откликов;
б) значение поля "Тип сообщения" устанавливается в "13" для сообщения "Отметка времени" и в "14" для сообщения "Отклик на отметку времени";
в) поле "Код сообщения" устанавливается в "0";
г) в поле "Отметка исходного времени" фиксируется момент времени, когда отправитель завершил формирование данного сообщения для его отправки;
д) в поле "Отметка времени приема" фиксируется момент времени, когда получатель принял сообщение, но еще не приступил к его обработке;
е) в поле "Отметка времени передачи" фиксируется момент времени, когда получатель завершил обработку сообщения для его возврата.
8. Сообщение "Информационный запрос/Ответ на информационный запрос" (Information Request/Information Reply Message - IRoIRM) формируется по инициативе системы административного управления.
Сообщение имеет формат, приведенный в таблице N 9.
Таблица N 9
┌───────────────────────────────────────────────┬──────────────────────────────┐ │ Заголовок IP │ Переменная длина (байт) │ ├───────────────────────────────────────────────┼──────────────────────────────┤ │Тип сообщения │ 1 │ ├───────────────────────────────────────────────┼──────────────────────────────┤ │Код сообщения │ 1 │ ├───────────────────────────────────────────────┼──────────────────────────────┤ │Контрольная последовательность сообщения ICMP │ 2 │ ├───────────────────────────────────────────────┼──────────────────────────────┤ │Идентификатор │ 2 │ ├───────────────────────────────────────────────┼──────────────────────────────┤ │Порядковый номер │ 2 │ └───────────────────────────────────────────────┴──────────────────────────────┘
Кодирование полей сообщений "Информационный запрос/Ответ на информационный запрос" осуществляется по следующим правилам:
а) поля "Идентификатор" и "Порядковый номер" используются для отслеживания соответствия многократной посылки информационных запросов и получения откликов;
б) значение поля "Тип сообщения" устанавливается в "15" для информационного запроса (Information Request Message) и в "16" для отклика на информационный запрос (Information Reply Message);
в) поле "Код сообщения" устанавливается в "0";
г) сообщение "Information Request" отправляется с установкой адреса отправителя в заголовке пакета IP, но с нулевым значением адреса получателя. В ответном сообщении "Information Reply Message" поля адресов полностью определяются.
9. Сообщение "Объявление маршрутизатора" (Router Advertisement Message) формируется по инициативе системы административного управления.
Кодирование полей сообщений "Router Advertisement Message" осуществляется по следующим правилам:
а) в поле "Адрес отправителя пакета" заголовка IP, в котором передается сообщение "Router Advertisement Message", содержится адрес IP, принадлежащий интерфейсу, от которого отправлено сообщение;
б) в поле "Адрес пакета получателя" заголовка IP, в котором передается сообщение "Router Advertisement Message", содержится адрес IP смежного узла или специально задаваемый адрес "Advertisement Address".
Сообщение имеет формат, приведенный в таблице N 10.
Таблица N 10
┌──────────────────────────────────────────────────────────────────────────────┐ │ Заголовок IP - переменная длина │ ├────────────────────────┬────────────────────────┬────────────────────────────┤ │ Тип сообщения (1 байт) │ Код (1 байт) │ Контрольная │ │ │ │последовательность (2 байта)│ ├────────────────────────┼────────────────────────┼────────────────────────────┤ │ Число адресов │ Размер входа адреса (1 │ Срок действия адресов (2 │ │маршрутизатора (1 байт) │ байт) │ байта) │ ├────────────────────────┴────────────────────────┴────────────────────────────┤ │ Адрес 1 маршрутизатора - 4 байта │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Уровень предпочтения 1 - 4 байта │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Адрес 2 маршрутизатора - 4 байта │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Уровень предпочтения 2 - 4 байта │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Адрес n маршрутизатора - 4 байта │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Уровень предпочтения n - 4 байта │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Примечание: n = 1, 2, 3..., бесконечность │ └──────────────────────────────────────────────────────────────────────────────┘
В поле "Счетчик допустимого времени пребывания пакета IP в сети" устанавливается значение 1 с, если в поле "Адрес получателя" задан групповой адрес вещания IP (IP multicast) или не менее 1 с в остальных случаях.
Значение поля "Тип сообщения" в заголовке пакета ICMP устанавливается в "9", поле "Код" устанавливается в значение "0".
Поле "Число адресов" маршрутизатора соответствует числу адресов, объявляемых в данном сообщении.
Поле "Размер входа адреса" содержит число 32-битовых слов информации для каждого адреса маршрутизатора (данный параметр зависит от версии протокола ICMP).
Поле "Срок действия адресов" содержит максимальное время в секундах, в течение которого адреса маршрутизатора могут считаться действительными.
Поле "Адрес маршрутизатора" содержит адрес IP отправляющего маршрутизатора на i-м интерфейсе, от которого отправляется данное сообщение (i = 1, 2,..., n, где n - число адресов).
Поле "Уровень предпочтения" содержит адрес маршрутизатора, который используется по умолчанию и является предпочтительным по отношению к другим адресам маршрутизатора в одной и той же подсети.
10. Сообщение "Запрос маршрутизатора" (Router Solicitation Message) формируется по инициативе системы административного управления.
Сообщение имеет формат, приведенный в таблице N 11.
Таблица N 11
┌───────────────────────────────────────┬──────────────────────────────────────┐ │ Заголовок IP │ Переменная длина │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Тип сообщения │ 1 байт │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Код сообщения │ 1 байт │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Контрольная последовательность │ 2 байта │ │сообщения ICMP │ │ ├───────────────────────────────────────┼──────────────────────────────────────┤ │Зарезервировано │ 4 байта │ └───────────────────────────────────────┴──────────────────────────────────────┘
Поля сообщения "Запрос маршрутизатора" (Router Solicitation Message) кодируются по следующим правилам:
а) в поле "Адрес отправителя пакета" заголовка пакета IP, в котором передается сообщение "Router Solicitation Message", содержится адрес IP, принадлежащий интерфейсу, от которого отправлено сообщение, или нулевое значение;
б) в поле "Адрес получателя пакета" заголовка пакета IP, в котором передается сообщение "Router Solicitation Message", содержится специально задаваемый адрес "Solicitation Address";
в) в поле "Счетчик допустимого времени пребывания пакета IP в сети" устанавливается значение 1 с, если в поле "Адрес получателя" задан групповой адрес вещания IP (IP multicast), или не менее 1 с в остальных случаях;
г) значение поля "Тип сообщения" в заголовке пакета ICMP устанавливается в "10", поле "Код" устанавливается в значение "0";
д) поле "Зарезервировано" устанавливается в "0" и игнорируется при приеме сообщения.