Source Quench
Source Quench — это сообщение (ICMP-пакет) в протоколе управления сообщениями Интернета (ICMP), которое отправляется маршрутизатором или хостом-получателем отправителю данных с требованием снизить интенсивность передачи пакетов. Source Quench относится к категории управляющих сообщений, предназначенных для реализации механизма управления перегрузкой в сетях с коммутацией пакетов на основе протокола IP. В современных сетях данный механизм считается устаревшим и практически не используется, однако он представляет исторический интерес как одна из первых попыток регулирования трафика на сетевом уровне.
История и развитие
Механизм Source Quench был впервые описан в документе RFC 792 (Сентябрь 1981 года), который определил стандарт протокола ICMP для IPv4. Разработчики исходили из простой логики: если маршрутизатор или хост не справляется с объёмом входящего трафика, он отправляет отправителю специальное сообщение, предписывающее уменьшить скорость передачи. Предполагалось, что отправитель, получив такое сообщение, снизит темп отправки пакетов до определённого уровня, а затем постепенно увеличит его, чтобы проверить, не исчезла ли перегрузка.
Изначально Source Quench рассматривался как элементарный и универсальный способ борьбы с перегрузками, не требующий сложной логики на стороне отправителя или получателя. Однако на практике механизм показал серьёзные недостатки. Во-первых, он создавал дополнительную нагрузку на сеть: каждое сообщение Source Quench генерировало новый пакет, что при массовой перегрузке могло усугубить ситуацию. Во-вторых, отсутствовал чёткий алгоритм, определяющий, насколько именно следует снижать скорость передачи. В-третьих, злоумышленник мог легко подделать сообщение Source Quench, заставив легитимного отправителя искусственно снизить пропускную способность (атака типа «отказ в обслуживании»).
Уже в RFC 1812 (Июнь 1995 года), описывающем требования к маршрутизаторам IPv4, генерация сообщений Source Quench была объявлена необязательной, а их обработка — нерекомендуемой. В последующих документах, в частности RFC 6633 (Май 2012 года), Source Quench был официально признан устаревшим. В протоколе ICMPv6 для IPv6 данный тип сообщения отсутствует полностью.
Формат и структура сообщения
Сообщение Source Quench имеет тип 4 в протоколе ICMPv4. Его формат включает следующие поля:
- Тип (Type): 8 бит, значение 4.
- Код (Code): 8 бит, всегда 0.
- Контрольная сумма (Checksum): 16 бит, вычисляется для всего ICMP-пакета.
- Неиспользуемое поле (Unused): 32 бита, должно быть заполнено нулями.
- Заголовок IP и первые 8 байт данных исходного пакета: встраивается в тело сообщения Source Quench, чтобы отправитель мог идентифицировать, какой именно поток данных требует снижения скорости.
Общая длина ICMP-сообщения Source Quench составляет не менее 28 байт (8 байт заголовка ICMP + 20 байт IP-заголовка исходного пакета). На практике размер может варьироваться в зависимости от длины исходного IP-заголовка (если используются опции).
Принцип работы
Когда маршрутизатор или хост-получатель обнаруживает, что его буферы переполняются из-за избыточного трафика, он может сгенерировать ICMP Source Quench и отправить его исходному отправителю пакета. Предполагалось, что отправитель, получив такое сообщение, должен:
- Снизить скорость передачи данных для данного потока (обычно вдвое или на определённый процент).
- Продолжать отправлять данные с пониженной скоростью до тех пор, пока не перестанут приходить сообщения Source Quench.
- Постепенно увеличивать скорость (например, каждые несколько секунд), чтобы проверить, не исчезла ли перегрузка.
На практике реализации TCP/IP-стека часто игнорировали Source Quench или обрабатывали его непоследовательно. В большинстве современных операционных систем (Linux, Windows, macOS) поддержка Source Quench отключена по умолчанию или удалена из кода.
Применение и значение
Исторически Source Quench применялся в ранних сетях с относительно низкой пропускной способностью, где не было более совершенных алгоритмов управления перегрузкой. Например, в сетях ARPANET и ранних версиях Ethernet Source Quench мог использоваться для снижения потерь пакетов при перегрузке маршрутизаторов. Однако уже к середине 1990-х годов стало очевидно, что механизм неэффективен и даже вреден.
Современные сети полагаются на другие методы управления перегрузкой, реализованные на транспортном уровне (например, алгоритмы TCP: Reno, NewReno, Cubic, BBR). Эти алгоритмы используют потери пакетов, задержки (RTT) и явные уведомления о перегрузке (ECN — Explicit Congestion Notification) для адаптации скорости передачи. ECN, в отличие от Source Quench, не генерирует дополнительных ICMP-пакетов, а помечает существующие IP-пакеты специальными флагами, что значительно эффективнее.
Критика и недостатки
Механизм Source Quench подвергался критике по нескольким причинам:
- Неэффективность при массовой перегрузке: генерация дополнительных ICMP-пакетов увеличивает нагрузку на сеть, что может усугубить перегрузку.
- Отсутствие гарантии доставки: сообщение Source Quench само может быть потеряно при перегрузке, что делает механизм ненадёжным.
- Проблемы безопасности: поддельные сообщения Source Quench легко используются для атак типа «отказ в обслуживании» (DoS), заставляя жертву снижать скорость передачи.
- Сложность настройки: не было единого стандарта, определяющего, насколько следует снижать скорость, что приводило к непредсказуемому поведению сети.
- Несовместимость с мультимедийным трафиком: для потокового видео и аудио резкое снижение скорости могло приводить к разрыву соединения или ухудшению качества.
Современное состояние
Начиная с конца 1990-х годов, поддержка Source Quench постепенно удалялась из сетевых стеков операционных систем и прошивок маршрутизаторов. В RFC 6633 (2012 год) IETF официально объявила Source Quench устаревшим (deprecated) и рекомендовала не реализовывать его в новых устройствах. Большинство современных маршрутизаторов и хостов игнорируют входящие сообщения Source Quench или генерируют их только в режиме совместимости с устаревшим оборудованием.
В протоколе ICMPv6, используемом в IPv6, тип сообщения Source Quench отсутствует. Вместо него для управления перегрузкой применяются механизмы ECN и алгоритмы транспортного уровня.
Интересные факты
- Source Quench — единственное сообщение ICMP, которое не имеет кода (поле Code всегда равно 0).
- В некоторых ранних реализациях BSD Unix Source Quench обрабатывался как сигнал для немедленного закрытия TCP-соединения, что приводило к разрыву связи при малейшей перегрузке.
- Несмотря на официальный статус «устаревший», Source Quench всё ещё упоминается в документации некоторых производителей сетевого оборудования как возможный инструмент диагностики в legacy-сетях.
- Идея Source Quench частично возродилась в виде механизма «Backward Explicit Congestion Notification» (BECN) в технологии Frame Relay, хотя и с существенными отличиями.
Источники
- RFC 792 — Internet Control Message Protocol (1981).
- RFC 1812 — Requirements for IP Version 4 Routers (1995).
- RFC 6633 — Deprecation of ICMP Source Quench (2012).
- Stevens, W. Richard. TCP/IP Illustrated, Volume 1: The Protocols. Addison-Wesley, 1994.
- Comer, Douglas E. Internetworking with TCP/IP, Volume 1: Principles, Protocols, and Architecture. Prentice Hall, 2006.
- Postel, J. «Internet Control Message Protocol». IETF, 1981.
- Kurose, James F.; Ross, Keith W. Computer Networking: A Top-Down Approach. Pearson, 2017.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →