
Чтобы иметь возможность обмениваться информацией о состоянии или сообщениями о неисправностях, узлы в сетях TCP/IP обращаются к протоколу Internet Control Message Protocol (ICMP). В частности, серверы приложений и шлюзы (маршрутизаторы) используют расширение IP для отображения уведомлений о проблемах с дейтаграммами отправителю пакетов. Структура, режим работы и классификация в стеке интернет-протокола были определены в RFC 792 в 1981 году RFC 792. Для шестой версии интернет-протокола RFC 4443 был определен как конкретная реализация ICMPv6.
По определению ICMP является отдельным протоколом, даже если различные уведомления интегрированы в обычные IP-пакеты. Для этого интернет-протокол рассматривает дополнительное расширение как протокол более высокого уровня. Многие часто используемые сетевые службы, такие как traceroute или ping, основаны на протоколе ICMP.
Как работает ICMP?
Чтобы понять, как работает протокол, сначала нужно рассмотреть структуру ICMP, или заголовок. Он напрямую связан с заголовком IP, который обозначается номером протокола 1 или 58 (ICMPv6) в поле IP «protocol». Область данных заголовка самого протокола Internet Control Message Protocol ограничена и имеет следующий вид:

Первое 8-битное поле «Тип» определяет, к какому типу уведомлений относится ICMP-пакет. Эта информация может быть уточнена с помощью следующего поля «код», длина которого также составляет 8 бит. Например, сообщение ICMP типа 3 указывает, что пункт назначения пакета данных недоступен, а код уточняет эту информацию, чтобы определить, была ли это сеть назначения (0), нужный хост (1) или целевой порт (3), который не ответил на предыдущий запрос. Контрольная сумма ICMP следует за информацией о типе сообщения и обеспечивает точность уведомления. Это делается так же, как и контрольные суммы других стандартных протоколов (IP, UDP, TCP).
Наконец, файлы ICMP строятся и структурируются по-разному в зависимости от соответствующего типа и инициирующего экземпляра. Заголовок IP часто содержит перечисление первых 64 битов пакета данных, которые отвечают за сообщение об ошибке или запрос статуса. При так называемом ICMP-туннелировании это поле используется для отправки полезных данных под радарами брандмауэров или для создания зашифрованного канала связи между двумя компьютерами.
Какие существуют виды пакетов ICMP?
Из-за длины поля в 8 бит теоретически возможны 256 различных ICMP-сообщений, из которых около 40 являются фиксированными (включая некоторых устаревших представителей), а некоторые заблокированы для экспериментального использования.
Большинство номеров (42-252) в настоящее время не назначены, но зарезервированы в принципе. IANA (Internet Assigned Numbers Authority) отвечает за присвоение номеров, а также регулирует назначение пространств IP-адресов и портов. В следующей таблице мы приводим некоторые из наиболее важных типов пакетов, основанных на протоколе управляющих сообщений Интернета:
Тип ICMP | Тип ICMPv6 | Имя типа | Код | Описание |
---|---|---|---|---|
3 | 129 | Эхо-ответ | Проверка присутствия путем ответа на сетевой запрос ping | |
1 | Место назначения недостижимо | 0-15 | ICMP-сообщение, информирующее, в частности, о недоступности конкретных компонентов (сеть, протокол, порт, хост) в поле «код» в связи с проблемами маршрутизации или блокировкой брандмауэра. | |
5 | 137 | Сообщение о перенаправлении | 0-3 | Уведомление о перенаправлении пакета для указанной сети (0), указанной службы и сети (2) или указанной службы и хоста (3). |
8 | 128 | Эхо-запрос | Пинг сети | |
9 | 134 | Объявление маршрутизатора | Используется маршрутизаторами для связи с различными сетевыми клиентами. | |
11 | 3 | Превышено время | 0 или 1 | Отчеты о состоянии, которые либо сообщают о времени жизни (time to Live, TTL) пакета (0), либо о времени ожидания до истечения сборки фрагментированных пакетов (1). |
13 | 13 | Временная метка | Сообщает соответствующему IP-пакету метку времени, которая соответствует времени отправки и служит для синхронизации двух компьютеров. | |
14 | — | Ответная метка времени | Ответное сообщение временной метки ICMP, которое адресат посылает после получения одного из них. | |
30 | — | Traceroute | устаревший тип ICMP-сообщений, используемый для отслеживания пути пакета данных в сети: сегодня для этой цели в основном используются запросы и повторы электронной почты. |
Где используются ICMP и ICMPv6
ICMP имеет огромное значение для связи в IP-сетях и используется, в частности, маршрутизаторами. Однако серверы и клиенты также используют возможности сообщений, связанных с интернет-протоколом, и при этом получают важную сетевую информацию.
Распространенным сценарием использования является так называемый сетевой ping, который может быть выполнен через командную строку соответствующей операционной системы с помощью одноименных приложений. Этот простой, но полезный диагностический инструмент является самым простым вариантом проверки доступности определенного узла в сети. Для этого ping отправляет IP-пакет, включающий ICMP (v6) «Echo Request» (тип 8 или 128). После получения этого пакета приемник отвечает пакетом данных, содержащим ICMP-запись «Echo Reply» (тип 0 или 129). Если система, которой был послан ping, недостижима, последняя оставшаяся достижимой сетевая станция посылает пакет ответа. Он также расширяется компонентом ICMP: тип 3 или 1 «Destination Unreachable».
Маршрутизаторы, в свою очередь, используют ICMP для различных целей: по объявлению маршрутизатора (ICMP тип 9; ICMPv6 тип 134) они задают, например, всем активным пользователям сети регулярные интервалы о своей посещаемости и знании различной сетевой информации. Они хранят полученные данные в своем кэше и делают маршрутизатор стандартным шлюзом. Кроме того, маршрутизаторы пытаются оптимизировать путь пакетов данных в сети с помощью ICMP-перенаправлений (тип 5 или 137). Используя этот тип сообщений, сетевые интерфейсы указывают хосту на существование лучшего первого хопа (промежуточной станции) для отправки IP-пакетов.