### 2.4 Протокол ICMP

Протокол обмена управляющими сообщениями ICMP описан в документе RFC 792. Он является вспомогательным протоколом стека TCP/IP и позволяет маршрутизатору сообщать конечному узлу об ошибках или необычных условиях, с которыми он столкнулся при передаче какой-либо IP-дейтаграммы от данного узла. Этот протокол является необходимой частью протокола IP и должен обязательно включаться в каждую его реализацию.
Как и весь трафик, сообщения ICMP передаются по сети в поле данных IP-дейтаграмм. Конечным получателем сообщений, вырабатываемых протоколом ICMP, является программное обеспечение протокола IP с загруженным модулем ICMP. То есть прибывшее сообщение ICMP об ошибке обрабатывает модуль программного обеспечения ICMP. Если ICMP определит, что ошибка была вызвана конкретным протоколом более высокого уровня или прикладной программой, то он сообщит об этом соответствующему модулю, который связан с источником возникновения ошибки.
Протокол ICMP позволяет получать два вида сообщений: управляющие и об ошибках. Эти сообщения могут быть посланы как на другие маршрутизаторы, так и на конечные узлы. Протокол ICMP обеспечивает взаимодействие между программным обеспечением протокола IP разных устройств в сети и представляет простой механизм, используемый для всех управляющих и информационных сообщений. ICMP – это протокол сообщения об ошибках, а не коррекции ошибок. Причина использования протокола IP для транспортировки сообщений протокола ICMP заключается в том, что для достижения конечного пользователя у них может возникнуть необходимость пересечь несколько физических сетей. Эти сообщения не могут быть доставлены только с помощью физической передачи, им необходим носитель, способный преодолевать все разнообразие сетевых топологий. Дейтаграммы, несущие сообщение ICMP, маршрутизируются точно так же, как и дейтаграммы, несущие информацию для пользователя. Формат заголовка протокола ICMP показан на рисунке 2.5.

Рисунок 2.5 – Формат заголовка протокола ICMP
Тип (8 бит) | Код (8 бит) | Контрольная сумма
Идентификатор (16 бит) | Последовательный номер (16 бит)
Необязательные данные (32 бита)
Начало дейтаграммы (64 бита, опционально)