ICMP (англ. Internet Control Message Protocol — протокол межсетевых управляющих сообщений[1]) — сетевой протокол, входящий в стек протоколов TCP/IP. В основном ICMP используется для передачи сообщений об ошибках и других исключительных ситуациях, возникших при передаче данных, например, запрашиваемая услуга недоступна или хост или маршрутизатор не отвечают. Также на ICMP возлагаются некоторые сервисные функции (services).
Технические подробности
Протокол ICMP описан в RFC 792 от 1981 года Jon Postel (с дополнениями в RFC 950). ICMP является стандартом Интернета (входит в стандарт STD 5 вместе с IP). Хотя формально протокол использует 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. Каждое ICMP-сообщение инкапсулируется непосредственно в пределах одного IP-пакета, и, таким образом, как и UDP и в отличие от TCP, ICMP является т. н. «ненадежным» (не контролирующим доставку и её правильность). В отличие от UDP, где реализация надёжности возложена на ПО прикладного уровня, ICMP (в силу специфики применения) обычно не нуждается в реализации надёжной доставки. Его цели отличны от целей транспортных протоколов, таких как TCP и UDP: он, как правило, не используется для передачи и приёма данных между конечными системами. ICMP не используется непосредственно в приложениях пользователей сети (исключение составляют инструменты Ping и Traceroute). Тот же Ping, например, служит обычно как раз для проверки потерь IP-пакетов на маршруте.
Использование ICMP-сообщений
ICMP-сообщения (тип 1,2) генерируются при нахождении ошибок в заголовке IP-пакета (за исключением самих ICMP-пакетов, дабы не привести к бесконечно растущему потоку ICMP-сообщений об ICMP-сообщениях).
ICMP-сообщения (тип 3) генерируются маршрутизатором при отсутствии маршрута к адресату.
Утилита Ping, служащая для проверки возможности доставки IP-пакетов, использует ICMP-сообщения с типом 8 (эхо-запрос) и 0 (эхо-ответ).
Утилита Traceroute, отображающая путь следования IP-пакетов, использует ICMP-сообщения с типом 11.
ICMP-сообщения с типом 5 используются маршрутизаторами для обновления записей в таблице маршрутизации отправителя.
ICMP-сообщения с типом 4 используются получателем (или маршрутизатором) для управления скоростью отправки сообщений отправителем.
Формат пакета ICMP
Правила генерации ICMP-пакетов
- При потере ICMP-пакета никогда не генерируется новый.
- ICMP-пакеты никогда не генерируются в ответ на IP-пакеты с широковещательным или групповым адресом, чтобы не вызывать перегрузку в сети (так называемый широковещательный шторм).
- При повреждении фрагментированного IP-пакета ICMP-сообщение отправляется сразу после получения первого повреждённого фрагмента, поскольку отправитель всё равно повторит передачу всего IP-пакета целиком.
См. также
Примечания
- ↑Протокол ICMP. Дата обращения: 29 октября 2017. Архивировано 14 марта 2016 года.
Ссылки
- RFC 792 (ICMPv4)
- RFC 950 Address Mask
- RFC 1122 (дополнительные типы ICMP-сообщений для существующих кодов)
- RFC 1393 Traceroute
- RFC 1256 Router Advertisement Solicitation
- RFC 1475 Conversion Failed
- RFC 1812 (дополнительные типы ICMP-сообщений для существующих кодов)
- RFC 4443 (ICMPv6)
- RFC 2463 (ICMPv6)
- RFC 1885 (ICMPv6)
- RFC 4884 Расширение сообщений и обратная совместимость
- Навязывание хосту ложного маршрута с использованием протокола ICMP
- ICMP-атаки с 01 по 05 документ
Правила чтения таблиц, описывающих структуру заголовков сетевых протоколов