Контроль перевантаження TCP: Повільний старт, AIMD та зубчастий профіль Cwnd
TCP sends multiple segments without waiting for each individual acknowledgement, and the congestion window (cwnd) is what limits how many bytes can be in flight at once. Throughput follows directly: throughput ≈ cwnd / RTT. Push cwnd too high for the network's actual capacity and a bottleneck buffer fills and starts dropping packets; keep it too low and you leave bandwidth unused. TCP has no direct way to measure available bandwidth, so classic algorithms treat packet loss itself as the signal that cwnd has grown too large.
Повільний старт: експоненційний зондування
Нове з’єднання починається з повільного старту, де cwnd (capacity window) подвоюється кожну round-trip time – експоненційне зростання, незважаючи на назву, обрано тому, що нове з’єднання не має уявлення про те, яку підтримку може забезпечити шлях, і потребує швидкого нарощування, а не повільного огляду. Коли cwnd перетинає поріг (або відбувається втрата), TCP переходить у режим запобігання перевантаження, де cwnd зростає лише лінійно, додаючи приблизно один сегмент на round-trip – значно обережніше зондування для виявлення будь-якої доступної резервної ємності.
AIMD і зубчастий профіль
Після того, як TCP досягає констеації перевантаження, класичні варіанти TCP застосовують Additive Increase, Multiplicative Decrease (AIMD): збільшують cwnd приблизно на один сегмент за час від часу та безперерпного зв’язку, і з моменту виявлення втрати різко обрізають її — Reno обрізає cwnd у два рази, а старіший Tahoe скидає все до 1 сегмента та повністю перезапускає slow start.
Намалювавши cwnd на графіку з часом, Reno демонструє повторний лінійний підйом і раптове обрізання, що відображає зубчастий профіль, візуальну сигнатуру TCP-потоку, який безперервно перевіряє межу доступної ємності та відступає назад, коли він її знаходить.
Slow start: cwnd(t+RTT) = 2 · cwnd(t) (until threshold or loss) Congestion avoidance: cwnd(t+RTT) = cwnd(t) + 1 MSS (linear probing) Loss detected (Reno): cwnd → cwnd / 2 (multiplicative decrease) Timeout (Tahoe): cwnd → 1 MSS, restart slow start
Контроль перевантаження TCP: Повільний старт, AIMD та зубчастий профіль Cwnd
Reno і Tahoe розглядають будь-яку втрату пакетів як сигнал затримки перевантаження, що погано працює на сучасних високошвидкісних каналах з великою затримкою, де окремий інцидент втрати безпосередньо може зменшити вдвічі підключення, яке несе гігабіти на секунду. CUBIC, який є стандартним для Linux з 2006 року, росте cwnd вздовж кубічної функції часу від останньої втрати, швидше відновлюючи ємність на довгих «потоках слонів». BBR Google використовує зовсім інший підхід, безпосередньо моделює фактичну пропускну здатність вузла та час між ними замість реакції на втрату після того, як вона виникла — на мережах із високою пропускною спробою та великою затримкою це може забезпечити 2-10× кращий пропускний діапазон, ніж алгоритми, що базуються на втратах, оскільки він перестане розцінювати повний буфер як єдиний сигнал, який варто слухати.
Reno і Tahoe розглядають будь-яку втрату пакетів як сигнал затримки перевантаження, що погано працює на сучасних високошвидкісних каналах з великою затримкою, де окремий інцидент втрати безпосередньо може зменшити вдвічі підключення, яке несе гігабіти на секунду. CUBIC, який є стандартним для Linux з 2006 року, росте cwnd вздовж кубічної функції часу від останньої втрати, швидше відновлюючи ємність на довгих «потоках слонів». BBR Google використовує зовсім інший підхід, безпосередньо моделює фактичну пропускну здатність вузла та час між ними замість реакції на втрату після того, як вона виникла — на мережах із високою пропускною спробою та великою затримкою це може забезпечити 2-10× кращий пропускний діапазон, ніж алгоритми, що базуються на втратах, оскільки він перестане розцінювати повний буфер як єдиний сигнал, який варто слухати.
Часті запитання
Що таке вікно переповнення та як воно контролює пропускну здатність?
Вікно переповнення (cwnd) – це кількість непідтверджених байтів TCP, які дозволено відправляти одночасно. Пропускна здатність приблизно дорівнює cwnd, поділеному на час міждворазовими передачами (RTT), тому TCP регулює швидкість шляхом збільшення або зменшення cwnd залежно від того, чи досягають пакети призначення або їх втрачають.
Яка різниця між slow start та congestion avoidance?
Під slow start cwnd подвоюється з кожним RTT, зростаючи експоненціально доки не досягне межі або не станеться втрата пакетів. У режимі congestion avoidance cwnd росте лінійно, додаючи приблизно один сегмент на RTT, що є більш обережною спробою визначити додаткову пропускну здатність.
Чому графік пропускної здатності TCP Reno виглядає як зубчаста крива?
Правило AIMD (additive increase, multiplicative decrease) у Reno робить cwnd збільшенням на один сегмент на RTT доки не буде виявлено втрату пакету, а потім миттєво зменшує його вдвічі. Цей повторний повільний підйом, за яким слідує різкий спад, ілюструє зубчасту форму кривої cwnd у відношенні до часу.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте the simulation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію the simulation