Linux: Полное руководство
Шрифт:
С помощью протокола ICMP можно определить не только тип неисправности, но и максимально уточнить ее причину. Например, тип сообщения 3 («Адресат недостижим») свидетельствует о том, что посланный нам пакет не может «добраться» до адресата. Кроме типа сообщения, возвращается его код, позволяющий детализировать неисправность. Например, код 0 означает, что сеть недоступна, 1 — узел недоступен. 2 — протокол недоступен и т.д. В таблице 27.8 ниже перечислены типы и коды сообщений ICMP.
Обязательно ли посылать сообщение об ошибке, получив некорректный пакет? Нет, из главы 19 вы узнали, что такие пакеты (например, отправленные на запрещенный для доступа извне порт) можно просто игнорировать. Первый подход «вежливее», второй безопаснее. Представьте, что злоумышленник отправляет с 1000 машин 1000 пакетов
27.2.2. Структура ICMP-пакета
Для лучшей диагностики ошибки вместе с ICMP-пакетом передается заголовок исходного пакета, вызвавшего ошибку. Также передается специальный указатель на позицию заголовка, позволяющий определить, что именно вызвала ошибку. В случае с неправильным номером порта указатель будет установлен на поле, содержащее номер порта. Благодаря этому система-источник может вычислить процесс и сокет, вызвавшие ошибку.
Структуры различных ICMP-пакетов отличаются друг от друга в зависимости от типа пакета. Например, пакет, сообщающий о недоступности адресата (Destination Unreachable Message), выглядит так:
Сообщение Destination Unreachable Message Таблица 27.6
Тип | Код | Контрольная сумма |
---|---|---|
Не используется | ||
Интернет-заголовок плюс первые 64 бита оригинального сообщения (пакета) |
Что такое тип и код, вы уже знаете, с контрольной суммой тоже все ясно. А последнее поле необходимо, поскольку оно поможет идентифицировать процесс, вызвавший ошибку.
Точно такую же структуру имеют сообщение об истечении лимита времени (Time Exceeded Message) и сообщение об обрыве источника Source Quench Message (тип 4).
А вот сообщение о неверном параметре (например, указан неверный номер порта) выглядит уже по-другому (таблица 27.7).
Сообщение Parameter Problem Message Таблица 27.7
Тип | Код | Контрольная сумма |
---|---|---|
Указатель | Не используется | |
Интернет-заголовок плюс первые 64 бита оригинального сообщения (пакета) |
Поле Указатель в сообщении о неверном параметре (Parameter Problem Message) указывает на то место в заголовке, которое вызвало ошибку.
Сообщение о переадресации (Redirect Message) имеет следующую структуру:
Сообщение Redirect Message Таблица 27.8
Тип | Код | Контрольная сумма |
---|---|---|
Адрес шлюза | ||
Интернет-заголовок плюс первые 64 бита оригинального сообщений (пакета) |
Чтобы понять, что такое сообщение о переадресации, рассмотрим следующий пример. Система Б определяет, что посланный системой А пакет некорректен. Системе Б нужно отправить системе А сообщение об ошибке. Система Б определяет, что единственным маршрутом назад для данного пакета является маршрут через систему А. Тогда система Б посылает системе А два пакета: первый с сообщением о некорректном пакете, а второе — сообщение переадресации, докладывающее, что у системы А проблемы с таблицей маршрутизации, которая, возможно, содержит ошибку.
Сообщения типа эхо-запрос (ping, тип 8) и эхо-ответ (pong, тип 0) имеют следующую структуру:
Сообщения Echo или Echo Reply Message Таблица 27.9
Тип | Код | Контрольная сумма |
---|---|---|
Идентификатор | Последовательность | |
Данные |
Поля
27.2.3. Тип и код ICMP-сообщения
В следующей таблице перечислены все типы ICMP-сообшений. Об их структуре вы можете прочитать в документе RFC 792. Типы 17 и 18 описаны в документе RFC 950.
Типы IСМР-сообщений Таблица 27.8
Тип | Код | Название сообщения | Описание |
---|---|---|---|
0 | Echo Reply Message | Эхо-ответ | |
0 | Код всегда равен 0 | ||
3 | Destination Unreachable Message | Адресат недоступен | |
0 | Сеть недоступна | ||
1 | Узел недоступен — что-то случилось с компьютером возможно, он просто выключен | ||
2 | Протокол недоступен — запрашиваемый протокол ни поддерживается | ||
3 | Порт недоступен — на машине ни одна служба не связана с указанным номером порта | ||
4 | Длина пакета слишком велика, а в его заголовке установлен флаг DF (Don't Fragment), то есть не фрагментировать. Для передачи большого пакета его нужно фрагментировать (разбить на части), а так как установлен флаг DF, фрагментация, а следовательно, и передача пакета невозможна | ||
5 | Ошибочный маршрут источника | ||
4 | Source Quench Message | Обрыв источника | |
0 | Код всегда равен 0 | ||
5 | Redirect Message | Переадресация | |
0 | Переадресация пакетов для сети | ||
1 | Переадресация пакетов для узла | ||
2 | Переадресация пакетов для сети и типа обслуживания (TOS, Type Of Service) | ||
3 | Переадресация пакетов для узла и типа обслуживания (TOS, Type Of Service) | ||
8 | Echo Message | Эхо-запрос | |
0 | Код всегда равен 0 | ||
11 | Time Exceeded Message | Превышен лимит времени | |
0 | При передаче превышено «время жизни» (TTL, Time То Live) | ||
1 | Превышено время реассемблирования (сборки) фрагментов | ||
12 | Parameter Problem Message | Ошибочный параметр | |
0 | Указатель на ошибочный параметр (табл. 27.7) |