RFC 792
RFC 792 — это документ, опубликованный в 1981 году в серии Request for Comments (RFC), который определяет протокол Internet Control Message Protocol (ICMP). Данный протокол является неотъемлемой частью стека протоколов TCP/IP и используется для передачи сообщений об ошибках, диагностики сети и управления сетевым соединением. RFC 792, автором которого является Джон Постел (Jon Postel), устанавливает формат сообщений ICMP, их типы, коды и правила обработки, закладывая основу для сетевой отказоустойчивости и диагностики.
История и предпосылки
В 1981 году, когда сеть ARPANET переходила на протокол TCP/IP версии 4 (IPv4), возникла потребность в механизме, позволяющем конечным узлам и маршрутизаторам сообщать об ошибках, возникающих при отправке дейтаграмм IP. До этого такие функции не были стандартизированы, а разные реализации сетевого программного обеспечения обрабатывали ошибки по-разному. Джон Постел, один из ключевых разработчиков протоколов Интернета, предложил формализовать обмен контрольными сообщениями в рамках отдельного протокола — ICMP.
Изначально ICMP был разработан как неотъемлемая часть самого протокола IP, а не как отдельный протокол более высокого уровня. RFC 792 заменил более ранние черновики (RFC 760, RFC 777) и стал окончательным стандартом, действующим в течение десятилетий с минимальными изменениями. Позднее протокол был расширен, в частности, для поддержки IPv6 (ICMPv6, RFC 4443) и для реализации обнаружения соседей (NDP).
Типы сообщений ICMP
RFC 792 определяет несколько типов сообщений, каждое из которых имеет свой уникальный номер (тип). Сообщения ICMP инкапсулируются непосредственно в дейтаграммы IP и не используют протоколы транспортного уровня, такие как TCP или UDP. Основные типы сообщений включают:
- Echo Request (Тип 8) и Echo Reply (Тип 0) — основа утилиты ping. Узел отправляет запрос, а получатель отвечает эхо-ответом, что позволяет проверить связность сети и измерить время задержки (RTT).
- Destination Unreachable (Тип 3) — сообщение, отправляемое маршрутизатором или хостом, когда дейтаграмму невозможно доставить конечному получателю. Коды этого типа уточняют причину: сеть недоступна (0), хост недоступен (1), протокол запрещён (2), порт недоступен (3) и другие.
- Source Quench (Тип 4) — устаревшее сообщение, предназначенное для управления перегрузкой. Узел отправлял его отправителю, чтобы тот снизил скорость передачи. В современных реализациях практически не используется из-за агрессивного поведения и отсутствия масштабируемости.
- Redirect (Тип 5) — используется маршрутизаторами для информирования отправителя о том, что существует более короткий путь к получателю (например, доставка пакета напрямую через другой маршрутизатор в той же сети).
- Time Exceeded (Тип 11) — отправляется, когда время жизни дейтаграммы (TTL) истекает до достижения места назначения или когда фрагменты пакета не собраны за отведённое время. Этот тип лежит в основе утилиты traceroute.
- Parameter Problem (Тип 12) — указывает на ошибку в заголовке IP-дейтаграммы, например, отсутствие обязательного поля или неверное значение опции.
Формат сообщений ICMP
Каждое сообщение ICMP начинается с четырёхбайтового заголовка, обязательного для всех типов:
- Тип (Type) — 1 байт, определяет тип сообщения.
- Код (Code) — 1 байт, уточняет подтип или причину сообщения.
- Контрольная сумма (Checksum) — 2 байта, проверка целостности всего сообщения ICMP.
- Содержимое (Data) — остальная часть сообщения, которая зависит от типа. По стандарту, для сообщений об ошибках, таких как Destination Unreachable и Time Exceeded, в поле данных помещается заголовок IP исходной дейтаграммы, вызвавшей ошибку, плюс не менее 8 байт её полезной нагрузки. Это позволяет отправителю узнать, какой именно пакет вызвал проблему. Для запросов и ответов, например Echo, поле данных содержит идентификатор, номер последовательности и опциональный произвольный буфер (payload).
Применение и значение
RFC 792 определил не просто отдельный протокол, а критически важный инструмент управления сетью.
- Диагностика сети: Утилита
ping, использующая сообщения Echo Request/Reply, является наиболее распространённым инструментом для проверки сетевой связности, выявления потерь пакетов и оценки задержек. - Обнаружение путей:
tracerouteв UNIX/Linux (илиtracertв Windows) использует сообщения Time Exceeded и, в некоторых реализациях, Destination Unreachable для отображения промежуточных маршрутизаторов на пути к цели. - Управление трафиком: Хотя современная маршрутизация и перегрузка в основном управляются с помощью TCP, сообщения Redirect и Source Quench исторически сыграли роль в динамической коррекции маршрутов и управлении перегрузкой. В современных сетях Redirect иногда используется для оптимизации.
- Отказоустойчивость: Без сообщений об ошибках ICMP (Destination Unreachable, Time Exceeded, Parameter Problem) отправители не получали бы информации о недоступности хостов, сетей, протоколов или портов, что привело бы к неэффективным попыткам повторной отправки и увеличению нагрузки на сеть.
Критика и ограничения
RFC 792 не лишён недостатков, которые стали заметны с ростом и усложнением Интернета.
- Отсутствие аутентификации: Изначально документ не предусматривал никаких механизмов проверки подлинности сообщений ICMP. Это породило класс атак, связанных с подделкой ICMP-пакетов: атаки типа «ложное перенаправление» (spoofed Redirect), «смертельная атака пинга» (Ping of Death — злонамеренно большой ICMP Echo Request, вызывающий переполнение буфера) и использование ICMP для осуществления DoS-атак с отражением (amplification). Позднее, в RFC 1826 и других документах, была предложена аутентификация на основе IPsec, но она не была повсеместно внедрена.
- Управление перегрузкой: Сообщение Source Quench оказалось слишком грубым и неэффективным механизмом управления перегрузкой. Оно легко подделывалось и могло вызвать снижение производительности сети. В результате его реализация не рекомендуется (deprecated) с середины 1990-х годов.
- Фильтрация ICMP: Из-за соображений безопасности многие сетевые администраторы блокируют или ограничивают прохождение определённых типов ICMP-пакетов через фаерволы. Например, блокировка всех Echo Request делает сеть «невидимой» для пинга, но нарушает работу средств диагностики. С другой стороны, полная блокировка сообщений об ошибках (Destination Unreachable) приводит к тому, что TCP-соединения, например, зависают при попытке доступа к несуществующему порту, ожидая пустого таймаута.
- Устаревание: Некоторые сообщения, такие как Information Request (Тип 15) и Information Reply (Тип 16), полностью потеряли актуальность и не используются современными системами.
Влияние на современные протоколы
Несмотря на критику, концепции, заложенные в RFC 792, оказались настолько удачными, что были перенесены в IPv6. Протокол ICMPv6 (RFC 4443) не только сохранил базовые функции диагностики и сообщений об ошибках, но и дополнил их функциями, которые в IPv4 обеспечивались ARP (Address Resolution Protocol) — например, Neighbor Solicitation и Neighbor Advertisement. Единственным значительным изменением стало исключение устаревших типов (Source Quench) и добавление новых кодов для Parameter Problem. Полная совместимость ICMP во многом обеспечила возможность поэтапного перехода с IPv4 на IPv6.
Интересные факты
- RFC 792 является одним из самых коротких и понятных документов серии, занимая всего около 10 страниц в печатном виде.
- Несмотря на отсутствие надёжности (ICMP не гарантирует доставку), он повсеместно используется в ядре операционной системы для отчётности о неисправностях. Некоторые типы сообщений, такие как Echo Request и Time Exceeded, имеют столь высокий приоритет, что процессор сетевого стека генерирует их немедленно.
- Символ «Ping» — не только утилита, но и метафора для сетевой связности; его название происходит от звука сонара, что отражает суть запроса и ответа.
Источники
- Postel, J. (1981). Internet Control Message Protocol. RFC 792. DOI: 10.17487/RFC0792.
- Stevens, W. R. (1994). TCP/IP Illustrated, Volume 1: The Protocols. Addison-Wesley.
- Comer, D. E. (2006). Internetworking with TCP/IP, Vol. I: Principles, Protocols, and Architecture (5th ed.). Pearson.
- Braden, R. (1989). Requirements for Internet Hosts — Communication Layers. RFC 1122.
- Conta, A., Deering, S., & Gupta, M. (2006). Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification. RFC 4443.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →