Strona głównaArtykułySieci i systemy rozproszone

Regulacja ruchu TCP: Start wolny, AIMD i wizyta sawtooth cwnd

TCP nie wie, jak szybko jest twoja połączenie z siecią. Odkrywa to przez sprawdzanie — rosnąc swoje okno congestionowe aż do momentu straty pakietów, a następnie cofa się. Ta pętla odwrotnej korelacji jest przyczyną tego, dlaczego internet nie zawala się pod ciężarem obciążenia.

mysimulator teamZaktualizowano — czerwiec 2026≈ 7 min czytania▶ Otwórz symulację

Okno zatłoczenia: przycisk prędkości TCP

TCP wysyła wielokrotne segmenty bez czekania na poszczególne potwierdzenia. Okno zatłoczenia (cwnd) ogranicza, ile bajtów może być w trakcie przesyłania jednocześnie. Przepustowość jest bezpośrednim wynikiem tego: przepustowość ≈ cwnd / RTT. Zbyt wysoka wartość cwnd dla rzeczywistej pojemności sieci powoduje, że bufor zatłoczenia wypełnia się i zaczyna usuwać pakety; zbyt niska wartość cwnd spowoduje niekorzystne wykorzystanie przepustowości. TCP nie ma bezpośredniego sposobu na pomiar dostępnej przepustowości, dlatego klasyczne algorytmy traktują sam fakt utraty pakietów jako sygnał, że cwnd jest zbyt duży.

Start wolny: ekspansywna próba

Nowe połączenie zaczyna się w trybie startu wolnym, gdzie cwnd podwójnie rośnie przy każdym czasie pełnego obrotu — ekspansja, mimo nazwy, wybrana dlatego, że nowe połączenie nie ma żadnych informacji na temat tego, co potrafi obsłużyć ścieżka, i musi szybko wzrosnąć zamiast wolno krawędziować. Gdy cwnd przekroczy pewien próg (lub nastąpi strata danych), TCP przełącza się na tryb unikania zagrożenia kongestyjnego, w którym cwnd rośnie tylko liniowo, dodając około jedno segment do cwnd przy każdym czasie pełnego obrotu — znacznie bardziej ostrożna próba dla jakiejkolwiek pozostającej wolnej pojemności.

demo na żywo · powiązana symulacja● LIVE

AIMD i wizyta sawtooth

Po wejściu w fazę unikania zagłupień, tradycyjne warianty TCP stosują Zwiększanie Addytywne, Mniejszenie Mnożyste (AIMD): zwiększają cwnd o około jedno segmentów na pełny obwód, a w chwili wykrycia straty, znacznie je zmniejszają — Reno halbuje cwnd, podczas gdy starszy Tahoe wraca do jednego segmentu i ponownie uruchamia tryb wolnej zwiększania. Wykreślone na wykresie w czasie, powtarzające się liniowe wzrosty Reno połączone z nagle nastąpiłym halowaniem tworzą typowy kształt sawtooth, co jest charakterystycznym oznakowaniem przepływu TCP ciągle testującego granicę dostępnej pojemności i cofającego się, gdy ją znajdzie.

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

Po kontroli opartym na stratach: CUBIC i BBR

Reno i Tahoe traktują każdą stratę pakietu jako sygnał zatkania, co działa źle na współczesnych linkach o wysokiej pradze i opóźnieniu, gdzie pojedyncza strata może bez potrzeby podważyć połączenie przesyłające gigabajty w sekundę. CUBIC, domyślna metoda w systemie Linux od 2006 roku, rosnie funkcją sześcienną od czasu od ostatniej straty, co umożliwia szybsze odbudowanie połączeń długotrwałych (elephant flows). Google BBR podchodzi do tego problemu inaczej, modelując rzeczywistą pradę brzegowej ścieżki i czas przebywania na powrót bezpośrednio zamiast reagować na straty po fakcie — w sieciach o wysokiej iloczynie prady i opóźnienia BBR może dostarczyć 2-10 razy lepszy przepustowość, ponieważ przestaje traktować pełny bufor jako jedyną wartość, do której należy się przyłączyć.

Często zadawane pytania

Czym jest okno zatłoczenia (cwnd) i jak ono kontroluje przepustowość?

Okno zatłoczenia (cwnd) to liczba bajtów niezakonczonych, które protokół TCP pozwala być w trakcie przesyłania. Przepustowość jest przybliżeniem cwnd podzielonego przez czas przejazdu obwodowego, więc TCP kontroluje prędkość poprzez rosnące lub zmniejszane cwnd na podstawie tego, czy pakety są przesyłane bez problemów lub stracone.

Jakie jest różnice między startem wolnym a zatłoczeniem?

W trybie startu wolnego, cwnd podwójnie rośnie co czas przejazdu obwodowego, wzrost ten jest eksponencjalny do momentu osiągnięcia pewnej granicy lub wystąpienia straconego pakietu. W trybie zatłoczeniem, cwnd rośnie liniowo zamiast tego, dodając około jedno segment na czas przejazdu obwodowego, co jest znacznie bardziej ostrożnym testem na dostępne przestrzeń.

Dlaczego wykres przepustowości protokołu TCP Reno wygląda jak szeregowy cięciwka?

Zasada AIMD (additive increase, multiplicative decrease) protokołu TCP Reno rośnie cwnd o około jeden segment co czas przejazdu obwodowego do momentu wykrycia straconego pakietu, a następnie go natychmiast podzielić na połowe. Powtarzający się wolny wzrost zastąpiony ostre spadkiem powoduje kształt szeregowy cięciwka na wykresie cwnd w czasie.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz TCP Congestion Control i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację TCP Congestion Control

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)