Кратко
- В октябре 1986 года полезная пропускная способность между Lawrence Berkeley Laboratory и UC Berkeley упала с 32 Кбит/с до 40 бит/с: сеть оставалась занятой, но повторные копии вытесняли новые данные.
- Jacobson, Karels и их коллеги внедрили в 4BSD TCP сохранение пакетов, тактирование по ACK, slow start, улучшенные таймеры, экспоненциальную задержку и окно перегрузки.
- RFC 1122 сделал slow start и congestion avoidance обязательными. Децентрализованная работа сохранилась благодаря узкому общему правилу, не позволявшему агрессивному отправителю перекладывать издержки на остальных.
Короткий путь, потерявший три порядка
Lawrence Berkeley Laboratory и Калифорнийский университет в Беркли разделяли около 400 ярдов. Однако в октябре 1986 года путь через два IMP между ними перестал доставлять 32 килобита в секунду и выдавал лишь 40 бит. Van Jacobson и Michael J. Karels поместили эту цифру в начало своей работы 1988 года.
Линия не молчала. В этом и состоял парадокс. При высокой нагрузке время кругового прохождения и его разброс росли. Неточные таймеры принимали задержанные пакеты за потерянные и отправляли копии в уже заполненные очереди. Копии усиливали задержку и потери, вызывая следующие повторы. Механизм восстановления создавал положительную обратную связь.
John Nagle назвал это состояние congestion collapse в RFC 896 1984 года. Он объяснил, почему дейтаграммовая сеть с разными скоростями каналов способна устойчиво тратить почти всю работу впустую. Документ приглашал к обсуждению, а не устанавливал окончательный стандарт. Наблюдение 1986 года превратило диагноз в измеримую проблему реализации.
Свободное место у получателя не означало свободного пути
Исходное окно управления потоком защищало буфер назначения. Оно показывало, сколько данных примет получатель, но не знало, выдержат ли столько промежуточные шлюзы. Быстрый Ethernet-хост мог одним импульсом направить полное окно на дальний канал, работавший в сотни раз медленнее.
Исправление добавило второй предел у отправителя — окно перегрузки. Передача ограничивалась меньшим из него и окна получателя. При признаке перегрузки окно уменьшалось мультипликативно; с приходом новых ACK росло небольшими аддитивными шагами. Конечный узел подстраивался под путь, не владея им и не зная всей топологии.
Изменения связывал принцип сохранения пакетов. В равновесии новый пакет входит только после выхода старого. ACK доказывает выход и служит часами. Получатель не может подтверждать быстрее, чем данные проходят узкое место, поэтому интервал ACK возвращает отправителю ритм пути.
У нового соединения таких часов ещё нет. Slow start начинает с малого окна и открывает его по мере подтверждений. Рост по круговым проходам быстрый, но основан на обратной связи, а не на слепом выбросе. Оценка не только среднего RTT, но и разброса предотвращает преждевременные повторы; экспоненциальная задержка раздвигает повторные попытки при продолжающейся неудаче.
Статья перечисляет семь изменений 4BSD TCP, включая политику ACK, fast retransmit и вклад Phil Karn. Название slow start приписано John Nagle, влияние оконной схемы — Raj Jain. Это совместная история идей, кода и измерений, а не подвиг одного автора.
Сначала работающий код, затем MUST
В опыте с четырьмя потоками без congestion avoidance 4 000 из 11 000 отправленных пакетов были повторами, а часть полезной ёмкости канала 25 КБ/с исчезла. С управлением повторов было 89 среди 8 281 пакета, около одного процента, и ёмкость снова выражалась в доставленных данных.
Сначала изменённый TCP работал в 4BSD и проверялся под нагрузкой. В октябре 1989 года RFC 1122 признал таймер RFC 793 недостаточным и потребовал от TCP сочетания slow start и congestion avoidance. Экспоненциальное увеличение последовательных RTO тоже стало обязательным.
Слово MUST показывает границу добровольности. Отправитель не мог игнорировать перегрузку, потому что последствия выходили за пределы его машины. Он занимал общую очередь и увеличивал потери у отзывчивых потоков. RFC 2914 позже предупредил о производителях, продающих более агрессивный TCP как быстрый, и приложениях, открывающих множество параллельных соединений. Если все повторяют тактику, преимущество исчезает, а хроническая перегрузка остаётся.
Узкая обязанность сохранила широкое разнообразие систем, приложений, маршрутов и совместимых алгоритмов. Но право на взаимодействие не включало право возвращать общий коллапс.
Чего не видел конечный узел
Jacobson и Karels отделяли стабильность от справедливости. Конечные узлы могли не допустить постоянного превышения ёмкости, но не видели все сходящиеся потоки и не гарантировали равное распределение. Для этого требовались механизмы в шлюзах.
Позже появились AQM, ECN и новые контроллеры; потеря не на всяком пути означает перегрузку. Ценность решения 1988 года не в окончательности. Оно выделило конкретную разрушительную петлю, изменило минимальную эффективную поверхность, измерило результат и стандартизировало только общий инвариант стабильности.
Источники и пределы доказательств
Основные данные взяты из Congestion Avoidance and Control и индекса LBNL NRG. Нормативную линию дают RFC 896, RFC 1072, RFC 1122, RFC 2001, RFC 2914 и RFC 5681. Современные событиям сообщения перечислены в архиве LBNL.
Падение до 40 бит/с относится к документированному пути, а не ко всем линиям Интернета одновременно. Оно не доказывает единоличное авторство и не завершает историю управления перегрузкой.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
