Кратко

  • Синдром глупого окна был устойчивой петлей: малое продвижение приемного окна вызывало малую отправку, которая сразу поглощала предложенное место.
  • Исправление разделили: получатель может не объявлять предельную емкость сразу, а отправитель — ждать полезной возможности передачи.
  • Алгоритм Нейгла работает с другим источником малых сегментов, мелкими записями приложения, поэтому дополняет оконное сдерживание.

Защита превратилась в фабрику пакетов

Приемное окно TCP задает объем дополнительного пространства последовательности, которым вправе воспользоваться отправитель. Это верхняя граница, а не приказ расходовать каждый положительный байт сразу после его появления.

Представим заполненный буфер. Приложение получателя читает один байт, и получатель может точно объявить это свободное место. Отправитель заполняет его, буфер снова полон, а следующее чтение запускает тот же обмен. Оба конца соблюдают управление потоком, но соединение оплачивает заголовки, подтверждения, прерывания и планирование ради ничтожной полезной нагрузки.

RFC 813 назвал этот устойчивый режим Silly Window Syndrome. Диагноз был шире оптимизации: локально правильные решения могли сложиться в системный провал. Учет байтов оставался точным, но полезная единица обмена исчезала.

Получатель перестал публиковать каждую малую истину

Получатель непосредственно видит собственный буфер. Когда приложение освобождает немного места, он может оставить правую границу объявленного окна неподвижной. Реальная, но не объявленная емкость накапливается, пока не образуется проем, способный нести полезную работу.

Ожидание не искажает состояние и не отзывает прежнее разрешение. Оно лишь отделяет точное измерение от приглашения, готового к действию. RFC 1122 и современная спецификация TCP описывают приемную защиту от SWS и практический порог, связанный с емкостью буфера и эффективным максимальным размером сегмента.

Отправитель перестал считать предел приказом

Нельзя предполагать, что каждый получатель будет сдерживать малые объявления. Поэтому отправителю тоже нужна собственная оценка. Окно запрещает пересечь предел, но не обязывает немедленно использовать каждое положительное отверстие.

Защита на стороне отправителя ищет осмысленный момент: место для полного сегмента, подходящее завершение ожидающих push-данных, существенную долю наибольшего окна, наблюдавшегося в соединении, либо срабатывание резервного таймера. Отправитель не знает объем удаленного буфера и оценивает его по истории; таймер не дает ошибке превратиться в постоянный запрет.

RFC 9293 рассматривает механизмы отправителя и получателя в отдельных разделах. Разделение передает решение тому концу, который видит его цену: получатель решает, когда емкость становится предложением, отправитель — когда предложение оправдывает сегмент. Ни один не управляет памятью другого.

Нейгл устранил другой ручеек

Малые сегменты возникают и при большом окне, если приложение передает данные по символу. RFC 896 описал цену: один байт полезной нагрузки мог путешествовать примерно с сорока байтами заголовков TCP/IP.

Адаптивное правило Нейгла накапливает новые мелкие записи, пока малый сегмент остается неподтвержденным. Подтверждение или достаточный объем данных разрешает следующую отправку. Правило следует обратной связи соединения, а не фиксированной задержке.

Механизмы различаются входным сигналом. Нейгл отвечает на мелкие порции от приложения; оконная защита отвечает на мелкие возможности от партнера. Приложение с жесткими требованиями к задержке может отключить Нейгла, но это не устраняет узкое окно.

Сдерживанию требовался выход

Ожидание экономит ресурсы, но бесконечное ожидание стало бы новой поломкой. Резервный таймер сохраняет путь к прогрессу. Получатель владеет объявлением своего буфера, отправитель — использованием возможности, приложение — выбором задержки. Узкие полномочия и явные выходы дают координацию без центрального планировщика.

Источники и пределы

Механизм документируют RFC 793, RFC 813, RFC 896, RFC 1122 и RFC 9293. Эти документы не измеряют нынешнюю частоту SWS в каждой реализации. SWS также не равен управлению окном перегрузки или потере пакетов.