QoS

Kontrola Przeciążenia

Ogólnosieciowe strategie unikania i zarządzania przeciążeniem.

1. Czym jest Przeciążenie Sieci?

W każdej sieci, od małej domowej sieci LAN po globalny internet, zasoby są ograniczone. Łącza sieciowe mają maksymalną przepustowość, a urządzenia takie jak routery mają ograniczoną ilość pamięci i mocy obliczeniowej. Wąskie gardło powstaje, gdy szybkość napływu przekracza szybkość obsługi interfejsu wyjściowego. ma miejsce, gdy zapotrzebowanie na te zasoby przekracza ich dostępną pojemność.

Kiedy router odbiera pakiety szybciej, niż jest w stanie je przekazać przez odpowiedni interfejs wyjściowy, przechowuje nadmiarowe pakiety w tymczasowym buforze pamięci zwanym kolejką. Jeśli ruch nadal napływa z tak dużą szybkością, kolejka rośnie. Jest to źródło przeciążenia. Jego objawy są natychmiast widoczne dla użytkowników i aplikacji:

  • Zwiększone Opóźnienie (Latencja): Pakiety spędzają więcej czasu w kolejce, więc dłużej trwa ich dotarcie do celu.
  • Zwiększony Jitter: Długość kolejki może się gwałtownie zmieniać, powodując wahania opóźnień między pakietami, co jest szkodliwe dla aplikacji czasu rzeczywistego.
  • Utrata Pakietów: W końcu kolejka staje się całkowicie pełna. Wszelkie nowe pakiety, które przybywają, nie mieszczą się w buforze i są odrzucane przez router.

Pozostawione bez kontroli, przeciążenie może doprowadzić do zapaści kongestyjnej, w której użyteczna przepływność spada, ponieważ retransmisje zajmują dostępną pojemność. Nadawcy wykrywający utratę ponownie wysyłają dane, zwiększając ruch na przeciążonej ścieżce. Duża część zasobów może wtedy przenosić pakiety, które ponownie zostaną utracone, pozostawiając niewiele miejsca na nowe dane. Kontrola przeciążeń ogranicza to sprzężenie zwrotne i pomaga dzielić zasoby sieciowe.

2. Kontrola Przeciążeń a Kontrola Przepływu

Kontrola przeciążeń i kontrola przepływu dotyczą różnych ograniczeń i należy je rozpatrywać osobno. TCP może stosować oba mechanizmy jednocześnie, dlatego nadawcę ogranicza mniejsza z wartości okna kongestii i okna odbiorczego.

  • Kontrola Przepływu

    to mechanizm lokalny, działający między pojedynczym nadawcą a pojedynczym odbiorcą. Jego celem jest zapewnienie, że nadawca nie przesyła danych szybciej, niż odbiorca jest w stanie je przetworzyć. Odbiorca ogłasza dostępną przestrzeń buforową (okno odbiorcze w TCP), a nadawca dostosowuje swoją szybkość transmisji, aby nie przepełnić tego bufora. Kontrola przepływu chroni odbiorcę.

  • Kontrola Przeciążeń

    dotyczy ścieżki współdzielonej przez wiele przepływów. Nadawca może komunikować się z szybkim odbiorcą mającym duży bufor, więc okno odbiorcze pozwala na wysoką szybkość. Jeśli ścieżka zawiera wolne lub zatłoczone łącze, sygnał przeciążenia powoduje zmniejszenie szybkości nadawania. Kontrola przeciążeń chroni sieć.

3. Cele Kontroli Przeciążeń

Efektywne algorytmy kontroli przeciążeń równoważą kilka celów. Właściwy kompromis zależy od rodzaju ruchu, opóźnienia ścieżki i pojemności wąskiego gardła:

  • Wydajność: Sieć powinna zapewniać wysoką przepływność, czyli wysoką szybkość pomyślnego dostarczania danych, przy wykorzystaniu dostępnej pojemności.
  • Sprawiedliwość: Algorytm powinien przydzielać sprawiedliwy udział w przepustowości sieci konkurującym przepływom danych. Definicja "sprawiedliwości" może się różnić, ale zazwyczaj oznacza, że przepływy dzielące to samo wąskie gardło powinny otrzymać w przybliżeniu równą część pojemności.
  • Stabilność: Działanie sieci powinno być przewidywalne, z ograniczonymi wahaniami przepływności i opóźnień.
  • Niskie Opóźnienie: Zwłaszcza w przypadku aplikacji interaktywnych i czasu rzeczywistego, utrzymanie niskich opóźnień kolejkowania jest głównym celem.

4. Kontrola Przeciążeń w TCP: Podejście Kooperacyjne

Do najczęściej stosowanych mechanizmów kontroli przeciążeń należą mechanizmy Protokołu Kontroli Transmisji (TCP). TCP stosuje strategię od końca do końca, w której nadawca wnioskuje o stanie ścieżki na podstawie potwierdzeń, utraty pakietów i sygnałów ECN. Centralną zmienną stanu jest .

cwnd ogranicza ilość danych w locie razem z ogłoszonym przez odbiorcę oknem kontroli przepływu (rwnd). Używany limit jest mniejszą z tych wartości. Algorytmy TCP zmieniają cwnd na podstawie potwierdzeń (ACK), sygnałów utraty lub informacji ECN. Nadawca używa też czasu retransmisji (RTO) do wykrywania braku terminowego potwierdzenia. Klasyczne mechanizmy TCP stosują zasadę AIMD (Wzrost Addytywny, Spadek Multiplikatywny), lecz inne algorytmy używają odmiennych reguł wzrostu.

Cykl życia kontroli przeciążeń w TCP można podzielić na odrębne fazy.

Faza 1: Powolny Start (Slow Start)

Kiedy połączenie TCP się rozpoczyna, nadawca ma niewiele informacji o pojemności ścieżki. Faza Powolnego Startu sonduje ścieżkę przez szybkie zwiększanie okna. Przy typowej regule zwiększania dla ACK wzrost jest w przybliżeniu wykładniczy do czasu osiągnięcia progu lub wystąpienia sygnału przeciążenia.

  • Sesja zaczyna się z małym cwnd. W opisach okna początkowego spotyka się wartości od 1 do 10 Maksymalnych Rozmiarów Segmentu (MSS), natomiast dokładna wartość wynika z aktualnego standardu i implementacji. MSS oznacza największy segment danych TCP dla danej ścieżki. W przykładzie przyjmujemy cwnd = 1 MSS.
  • Nadawca przesyła jeden segment. Po ACK potwierdzającym nowe dane Powolny Start może zwiększyć cwnd najwyżej o 1 MSS.
  • Przy jednym ACK dla każdego potwierdzonego segmentu cwnd w przybliżeniu podwaja się w czasie podróży w obie strony (RTT). Wysłanie 1 segmentu może zwiększyć okno do 2, a wysłanie 2 segmentów do 4, z uwzględnieniem obowiązujących limitów.
  • Wzrost trwa do utraty lub innego sygnału przeciążenia albo do osiągnięcia wartości zwanej .

Faza 2: Unikanie Przeciążeń (Congestion Avoidance)

Gdy cwnd osiągnie ssthresh, nadawca przechodzi do ostrożniejszej fazy Unikania Przeciążeń. Próg wybiera obszar działania algorytmu i nie stanowi bezpośredniego pomiaru pojemności łącza.

  • Zamiast wzrostu wykładniczego, nadawca używa teraz wzrostu addytywnego.
  • cwnd jest zwiększane najwyżej o około 1 MSS w każdym pełnym czasie podróży w obie strony. W standardowej regule komplet potwierdzeń dla bieżącego okna zwiększa okno mniej więcej o jeden segment.
  • Jest to wolniejsza, liniowa faza wzrostu, która sonduje dodatkową pojemność przy ograniczeniu przyrostu w każdym RTT.

Faza 3: Wykrywanie Przeciążeń i Reakcja

Faza Unikania Przeciążeń trwa do wykrycia utraty lub innego sygnału przeciążenia. W tym uproszczonym modelu TCP ma dwa główne sposoby wykrywania utraty pakietu, a reakcja zależy od rodzaju sygnału.

  • Reakcja na Timeout: Jest to silny sygnał braku terminowego potwierdzenia. Timeout występuje, gdy nadawca nie otrzyma ACK dla wysłanego segmentu w obliczonym czasie retransmisji (RTO). Nadawca retransmituje segment i zmniejsza okno wysyłania.
    • ssthresh jest wyznaczany na podstawie danych w locie, zwykle jako większa z wartości: połowa danych w locie albo 2 MSS. Dane w locie oznaczają niepotwierdzone dane pozostające w sieci.
    • cwnd jest drastycznie redukowane, resetując się do 1 MSS.
    • Nadawca ponownie wchodzi w fazę Powolnego Startu z cwnd = 1 MSS. Jest to klasyczna reakcja w stylu TCP Tahoe.
  • Reakcja na Potrójne Zduplikowane ACK (Szybka Retransmisja/Szybkie Odtwarzanie): TCP może wcześniej wywnioskować prawdopodobną utratę z duplikatów ACK. Jeśli nadawca wyśle segmenty 1, 2, 3, 4, 5, a segment 3 zostanie utracony, odbiorca otrzyma 1, 2, 4, 5. Potwierdzi segment 2, a po otrzymaniu segmentów 4 i 5 wyśle kolejne zduplikowane ACK dla 2. Po odebraniu trzech duplikatów ACK dla tego samego miejsca nadawca wykonuje Szybką Retransmisję bez czekania na RTO. Duplikaty ACK pokazują, że późniejsze segmenty dotarły do odbiorcy, więc odzyskiwanie w stylu Reno kontynuuje transmisję ze zmniejszonym oknem:
    • To część "spadku multiplikatywnego" AIMD. ssthresh jest wyznaczany na podstawie danych w locie jako większa z wartości: połowa danych w locie albo 2 MSS.
    • Podczas szybkiego odtwarzania w Reno cwnd jest przejściowo powiększane przez duplikaty ACK, a po odzyskaniu utraconego segmentu zmniejszane do nowego ssthresh.
    • Nadawca kontynuuje pracę w fazie Unikania Przeciążeń, bez ponownego uruchamiania Powolnego Startu. Dokładna reakcja zależy od wariantu odzyskiwania utraty.

5. Nowoczesne Algorytmy Kontroli Przeciążeń TCP

Klasyczne AIMD TCP Reno zwiększa okno liniowo w fazie Unikania Przeciążeń. Szybkie ścieżki z długim RTT mogą wymagać wielu RTT do odbudowania dużego okna po sygnale przeciążenia, co doprowadziło do powstania innych algorytmów.

  • TCP CUBIC

    CUBIC jest wdrażany jako domyślny algorytm kontroli przeciążeń w stosach Linux, Windows i Apple. Zamiast czysto liniowego wzrostu używa funkcji sześciennej. Po sygnale przeciążenia zmniejsza okno, zapamiętuje rozmiar sprzed zdarzenia, zwiększa okno w profilu wklęsłym w kierunku tej wartości, a następnie stosuje profil wypukły. Konstrukcja ma zapewniać skalowalność i stabilność na szybkich ścieżkach o dużym opóźnieniu.

  • BBR (Bottleneck Bandwidth and Round-trip propagation time)

    Opracowany przez Google BBR buduje model ścieżki zamiast traktować utratę jako jedyny sygnał przeciążenia. Szacuje przepustowość wąskiego gardła oraz minimalny propagacyjny RTT, a następnie reguluje tempo wysyłania na podstawie tych pomiarów. Sterownik okresowo sonduje dostępną przepustowość i aktualizuje model. BBR dąży do wysokiej przepływności bez utrzymywania stałej kolejki. Jego działanie i sprawiedliwość zależą od wersji algorytmu oraz konkurujących przepływów.

6. Kontrola Przeciążeń Wspomagana przez Sieć

Mechanizmy od końca do końca, takie jak te w TCP, obsługują kontrolę przeciążeń w systemach końcowych, a urządzenia sieciowe mogą odgrywać aktywną rolę w zarządzaniu przeciążeniami.

  • Aktywne Zarządzanie Kolejkami (AQM)

    AQM obejmuje algorytmy routerowe, które proaktywnie zarządzają długością kolejek. Zamiast czekać na pełne zapełnienie kolejki i odrzucać przychodzące pakiety w trybie tail-drop, AQM może wcześniej odrzucać lub oznaczać pakiety. Najbardziej znanym przykładem jest Losowe Wczesne Wykrywanie (RED). RED szacuje średnią długość kolejki i zwiększa prawdopodobieństwo wcześniejszego odrzucenia, gdy średnia rośnie. Dla reagujących nadawców tworzy to sygnał przeciążenia przed osiągnięciem limitu kolejki. AQM i planowanie kolejki pełnią różne funkcje: AQM kontroluje jej rozmiar, a planowanie wybiera następny pakiet do wysłania.

  • Jawne Powiadamianie o Przeciążeniu (ECN)

    ECN to osobny mechanizm sygnalizowania przeciążenia, który może współpracować z AQM. Nadajnik najpierw oznacza pakiety jako zdolne do ECN kodem ECT. Router obsługujący ECN może wtedy zamiast odrzucenia ustawić w nagłówku IP kod CE (Congestion Experienced) i przekazać pakiet dalej. Odbiorca zgłasza tę informację flagą ECE w potwierdzeniu TCP. Nadawca zmniejsza cwnd i ssthresh zgodnie z reakcją na sygnał utraty, przy czym samo oznaczenie nie wymaga retransmisji pakietu.

Kontrola przeciążeń łączy algorytmy systemów końcowych z zarządzaniem kolejkami i jawnymi sygnałami z sieci. TCP zmienia okno na podstawie sprzężenia zwrotnego, a routery mogą ograniczać wzrost kolejek przez AQM lub oznaczanie ruchu ECN. Mechanizmy te ograniczają opóźnienia kolejkowania, utratę pakietów i nierówny podział współdzielonej pojemności.

Powiązane artykuły