🤝 Uzgadnianie TCP/IP i kontrola przeciążenia — powolny start, AIMD
Obserwuj prawdziwe trójetapowe uzgadnianie TCP (SYN → SYN-ACK → ACK) z rzeczywistymi numerami sekwencyjnymi, a następnie na żywo symulację okna przeciążenia AIMD: wykładniczy powolny start, liniowe unikanie przeciążenia i multiplikatywne zmniejszenie przy utracie pakietów.
O tej symulacji
Każde połączenie TCP zaczyna się od trójetapowego uzgadniania. Klient wybiera losowy 32-bitowy początkowy numer sekwencyjny (ISN) i wysyła segment z flagą SYN. Serwer odpowiada własnym losowym ISN i flagą ACK, potwierdzając numer sekwencyjny klienta. Klient kończy, wysyłając ACK potwierdzający ISN+1 serwera. Dopiero wtedy połączenie jest w obu punktach ESTABLISHED, a algorytm Van Jacobsona z 1988 roku steruje tempem wysyłania danych za pomocą okna przeciążenia (cwnd): powolnym startem rosnącym wykładniczo, unikaniem przeciążenia rosnącym liniowo i multiplikatywnym zmniejszeniem przy wykryciu utraty.
🔬 Co pokazuje
Rzeczywiste trójetapowe uzgadnianie TCP z prawdziwymi numerami sekwencyjnymi, a następnie żywy wykres piłokształtny okna przeciążenia AIMD reagującego na symulowane RTT i utratę pakietów.
🎮 Jak korzystać
Obserwuj wymianę SYN → SYN-ACK → ACK krok po kroku, następnie dostosuj suwaki opóźnienia (RTT) i prawdopodobieństwa utraty, by zobaczyć, jak zmieniają charakterystyczny piłokształtny wykres przepustowości TCP.
💡 Czy wiesz, że?
Algorytm AIMD Van Jacobsona z 1988 roku wciąż jest podstawą nowoczesnego TCP — nowsze warianty, jak CUBIC czy BBR, dodają udoskonalenia, ale opierają się na tej samej idei powolnego startu i reakcji na utratę pakietów.
Często zadawane pytania
Dlaczego TCP potrzebuje trzech wiadomości, by nawiązać połączenie?
Obie strony muszą uzgodnić i potwierdzić wzajemny początkowy numer sekwencyjny, zanim którakolwiek będzie mogła wiarygodnie śledzić, które bajty dotarły. Dwie wiadomości (SYN, SYN-ACK) pozwoliłyby serwerowi potwierdzić ISN klienta i zaproponować własny, ale serwer nie miałby potwierdzenia, że klient rzeczywiście odebrał jego ISN — trzecia wiadomość (ACK) domyka tę lukę.
Czym jest okno przeciążenia i czym różni się od okna odbiorczego?
Okno odbiorcze to informacja odbiorcy dla nadawcy o dostępnej pojemności bufora — ograniczenie kontroli przepływu. Okno przeciążenia (cwnd) to własne oszacowanie nadawcy, ile danych ścieżka sieciowa może wchłonąć bez strat — ograniczenie kontroli przeciążenia. TCP zawsze wysyła mniejszą z tych dwóch wartości.
Dlaczego powolny start rośnie wykładniczo, skoro ma być „powolny”?
„Powolny” odnosi się do startu od jednego segmentu zamiast natychmiastowego wysyłania z pełną prędkością — ale sam wzrost podwaja się co każdy czas RTT (1, 2, 4, 8, 16…), co jest wykładnicze. Jest powolny tylko w porównaniu do wysłania nieograniczonego strumienia od razu w pierwszym cyklu.
Czym jest AIMD i dlaczego to „właściwy” kształt kontroli przeciążenia?
Addytywny wzrost, multiplikatywne zmniejszenie zwiększa cwnd o stałą wartość co RTT, gdy wszystko działa dobrze, i zmniejsza je o stały ułamek po wykryciu utraty. Teoria sterowania pokazuje, że AIMD zbiega do sprawiedliwego podziału pasma między konkurującymi strumieniami niezależnie od punktu startowego.
Dlaczego wysokie RTT szkodzi przepustowości nawet bez utraty pakietów?
Ponieważ cwnd rośnie raz na cykl RTT, połączenie z RTT wynoszącym 300 ms potrzebuje trzy razy dłużej, by osiągnąć takie samo okno jak połączenie ze 100 ms RTT. Przepustowość jest w przybliżeniu ograniczona przez cwnd·MSS / RTT, więc podwojenie RTT zmniejsza o połowę przepustowość.