ICMP
ICMP (Internet Control Message Protocol — протокол межсетевых управляющих сообщений) — сетевой протокол, входящий в стек протоколов 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-пакета, и, таким образом, как и UDP, ICMP является ненадежным (надежным является TCP).
ICMP основан на протоколе IP. Его цели отличны от целей транспортных протоколов, таких как TCP и UDP: он, как правило, не используется для передачи и приема данных между конечными системами. ICMP не используется непосредственно в приложениях пользователей сети (исключение составляют инструменты Ping и Traceroute).
Использование ICMP-сообщений
ICMP-сообщения (тип 12) генерируются при нахождении ошибок в заголовке IP-пакета (за исключением самих ICMP-пакетов, дабы не привести к бесконечно растущему потоку ICMP-сообщений об ICMP-сообщениях).
ICMP-сообщения (тип 3) генерируются маршрутизатором при отсутствии маршрута к адресату.
Утилита Ping, служащая для проверки возможности доставки IP-пакетов использует ICMP-сообщения с типом 8 (эхо-запрос) и 0 (эхо-ответ).
Утилита Traceroute, отображающая путь следования IP-пакетов, использует ICMP-сообщения с типом 11.
ICMP-сообщения с типом 5 используются маршрутизаторами для обновления записей в таблице маршрутизации отправителя.
ICMP-сообщения с типом 4 используются получателем (или маршрутизатором) для управления скоростью отправки сообщений отправителем.
Формат пакета ICMP
Бит | 0—7 | 8—15 | 16—31 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Тип | Код | Контрольная сумма | |||||||||||||||||||||||||||||
32 | Содержание сообщения (зависит от значений полей «Код» и «Тип») |
Типы пакетов ICMP (полный список)
- 0 — Эхо-ответ
- 1 — Зарезервировано
- 2 — Зарезервировано
- 3 — Адресат недоступен
код 0 — Сеть недостижима
код 1 — Узел недостижим
код 2 — Протокол недостижим
код 3 — Порт недостижим
код 4 — Необходима фрагментация, но установлен флаг ее запрета (DF)
код 5 — Неверный маршрут от источника
код 6 — Сеть назначения неизвестна
код 7 — Узел назначения неизвестен
код 8 — Узел источник изолирован
код 9 — Сеть административно запрещена
код 10 — Узел административно запрещен
код 11 — Сеть недоступна для ToS
код 12 — Узел недоступен для ToS
код 13 — Коммуникации административно запрещены
код 14 — Нарушение порядка предпочтения узлов
код 15 — Активно отсечение порядка предпочтения
- 4 — Сдерживание источника (отключение источника при переполнении очереди)
- 5 — Перенаправление
код 0 — Перенаправление пакетов в сеть
Код 1 — Перенаправление пакетов к узлу
Код 2 — Перенаправление для каждого типа обслуживания (TOS)
Код 3 — Перенаправление пакета к узлу для каждого типа обслуживания
- 6 — Альтернативный адрес узла
- 7 — Зарезервировано
- 8 — Эхо-запрос
- 9 — Объявление маршрутизатора (RFC-1256)
код 0 — Нормальное объявление маршрутизатора
код 16 — Не маршрутизировать обычный трафик
- 10 — Запрос маршрутизатора (RFC-1256)
- 11 — Превышение временного интервала (для дейтаграммы время жизни истекло)
код 0 — Время жизни пакета (TTL) истекло при транспортировке
код 1 — Время жизни пакета (время сборки фрагментов) истекло при дефрагментации
- 12 — Неверный параметр (проблема с параметрами дейтаграммы: ошибка в IP-заголовке или отсутствует необходимая опция)
код 0 — Указатель говорит об ошибке
код 1 — Отсутствует требуемая опция
код 2 — Некорректная длина
- 13 — Запрос метки времени
- 14 — Ответ с меткой времени
- 15 — Информационный запрос
- 16 — Информационный ответ
- 17 — Запрос адресной маски (RFC-950)
- 18 — Отклик на запрос адресной маски (RFC-950)
- 19 — Зарезервировано (для обеспечения безопасности)
- 20-29 — Зарезервировано (для экспериментов на устойчивость к ошибкам)
- 30 — Трассировка маршрута (RFC-1393)
- 31 — Ошибка преобразования датаграммы (RFC-1475)
- 32 — Перенаправление для мобильного узла
- 33 — IPv6 Where-Are-You (где вы находитесь)
- 34 — IPv6 I-Am-Here (я здесь)
- 35 — Запрос перенаправления для мобильного узла
- 36 — Отклик на запрос перенаправления для мобильного узла
- 37 — Запрос доменного имени (Domain Name Request)
- 38 — Ответ на запрос доменного имени (Domain Name Reply)
- 39 — SKIP
- 40 — Photuris
код 0 — Зарезервировано
код 1 — Неизвестный индекс параметров безопасности (Unkown Security Parameters Index)
код 2 — Параметры безопасности верны, но произошла ошибка аутентификации (Valid Security Parameters, but Authentication Failed)
код 3 — Параметры безопасности верны, но произошел сбой при расшифровке (Valid Security Parameters, but Decryption Failed)
код 4 — Требуется проверка подлинности (Need Authentication)
код 5 — Требуется авторизация (Need Authorization)
- 41-255 — Зарезервировано