Кратко

  • RFC 3742 замедляет рост TCP-окна после того, как cwnd превысит max_ssthresh: экспоненциальный медленный старт способен добавить тысячи сегментов за один RTT.
  • Верифицированная Erratum 236 исправила диапазон роста за RTT: в примере до 83 000 пакетов требуется как минимум 836 RTT, а не ровно столько.

«Ограниченный» не означает «с фиксированной скоростью». RFC 3742 была опубликованным в 2004 году экспериментальным необязательным предложением для TCP-соединений с окнами в тысячи максимальных размеров сегмента. Пока cwnd не превышает max_ssthresh, сохраняется обычное увеличение на один MSS за каждый ACK. Выше порога алгоритм вычисляет K = int(cwnd / (0.5 * max_ssthresh)) и прибавляет примерно 1/K MSS на ACK. Дополнительный параметр не заменяет ssthresh: превышение ssthresh по-прежнему завершает медленный старт.

Первоначальная формулировка раздела 2 звучала точнее, чем позволял сам алгоритм. В ней говорилось, что после max_ssthresh прирост за RTT не превышает половины порога. Но правило на каждый ACK, где K меняется ступенчато, задаёт диапазон. Верифицированная RFC Editor Erratum 236 исправила инвариант: прирост составляет не более max_ssthresh MSS за RTT и не менее половины этой величины. Единственную формулу времени достижения цели заменили нижней и верхней оценками. Поэтому часто цитируемые 836 RTT в примере с порогом 100 MSS и окном 83 000 пакетов означают «как минимум 836».

Это исправление описания, а не новая алгоритмическая версия управления перегрузкой. Текст RFC, опубликованный в 2004 году, остался прежним; эррата — отдельная запись, которую нужно читать вместе с ним. Она расширяет допустимый диапазон роста и времени, но не превращает его границы в универсально измеренные результаты.

Ограничение должно было уменьшить не только проблемы отправителя, но и внешние эффекты. Резкий рост в медленном старте мог вызвать множество потерь за один раз, тайм-ауты повторной передачи и возврат соединения к малому окну. Очереди и потери затрагивали также потоки, разделяющие узкое место. RFC 3742 приводит пример с порогом 100 MSS и сообщает о ранних опытах на ядре Linux 2.4.16 Web100. Это ограниченное историческое свидетельство, а не доказательство нынешнего широкого применения, всеобщей пользы для Интернета или гарантии длины очереди.

В более поздних документах TCP используются другие сигналы управления. RFC 9438 обычно рекомендует HyStart++ для медленного старта CUBIC и называет Limited Slow-Start экспериментальной альтернативой. RFC 9406 использует рост RTT как признак для выхода из медленного старта, а затем вводит консервативную фазу, которая проверяет, не произошёл ли выход слишком рано. Это иной сигнал, чем зависимый от размера окна прирост на ACK в RFC 3742; механизмы нельзя считать взаимозаменяемыми.

Для сетевого оператора эта эррата — повод спросить, что именно ограничивает броская цифра. Прирост окна за RTT — не прямой предел скорости в байтах, не измерение очереди и не доказательство справедливости на общем пути. На результат влияют порог, поведение ACK, pacing, буфер, RTT и конкурирующие потоки. Исправление делает неопределённость самого RFC явнее, но не устраняет её.

Источники