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. ma miejsce, gdy zapotrzebowanie na te zasoby przekracza ich poda偶.
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 mog膮 by膰 przechowane i s膮 po prostu odrzucane przez router.
Pozostawione bez kontroli, powa偶ne przeci膮偶enie mo偶e doprowadzi膰 do stanu znanego jako zapa艣膰 kongestyjna, w kt贸rym sie膰 staje si臋 zablokowana. Nadawcy, zauwa偶aj膮c utrat臋 swoich pakiet贸w, retransmituj膮 je, dodaj膮c jeszcze wi臋cej ruchu do ju偶 przeci膮偶onej sieci. Wi臋kszo艣膰 przepustowo艣ci sieci jest zu偶ywana na retransmisj臋 pakiet贸w, kt贸re prawdopodobnie i tak zostan膮 utracone, a bardzo ma艂o u偶ytecznych danych dociera do celu. Kontrola przeci膮偶e艅 to zestaw mechanizm贸w zaprojektowanych w celu zapobiegania takiemu scenariuszowi i 艂agodnego zarz膮dzania zasobami sieciowymi.
2. Kontrola Przeci膮偶e艅 a Kontrola Przep艂ywu
Nale偶y odr贸偶ni膰 kontrol臋 przeci膮偶e艅 od powi膮zanego, ale odr臋bnego poj臋cia: kontroli przep艂ywu.
- 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艅
to problem globalny, og贸lnosieciowy. Jej celem jest ochrona samej sieci przed przeci膮偶eniem. Nadawca mo偶e wysy艂a膰 dane do bardzo szybkiego odbiorcy z ogromnym buforem, wi臋c kontrola przep艂ywu pozwoli艂aby na wysok膮 szybko艣膰. Je艣li jednak 艣cie偶ka mi臋dzy nimi zawiera wolne lub zat艂oczone 艂膮cze, mechanizmy kontroli przeci膮偶e艅 zmusz膮 nadawc臋 do zwolnienia, aby nie przyczynia膰 si臋 do przeci膮偶enia sieci. Kontrola przeci膮偶e艅 chroni sie膰.
3. Cele Kontroli Przeci膮偶e艅
Efektywne algorytmy kontroli przeci膮偶e艅 staraj膮 si臋 zr贸wnowa偶y膰 kilka konkurencyjnych cel贸w:
- Wydajno艣膰: Sie膰 powinna mie膰 wysok膮 przep艂ywno艣膰, co oznacza wysok膮 szybko艣膰 pomy艣lnego dostarczania danych. Zasoby nie powinny by膰 niewykorzystane.
- 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艣膰: Wydajno艣膰 sieci powinna by膰 stabilna i przewidywalna, unikaj膮c gwa艂townych waha艅 przepustowo艣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
Najszerzej wdro偶one i zbadane mechanizmy kontroli przeci膮偶e艅 s膮 cz臋艣ci膮 Protoko艂u Kontroli Transmisji (TCP). Podej艣cie TCP to strategia od ko艅ca do ko艅ca, w kt贸rej nadawca wnioskuje o stanie sieci i odpowiednio dostosowuje swoje zachowanie, bez jawnych sygna艂贸w od samych router贸w. Centralnym poj臋ciem w kontroli przeci膮偶e艅 TCP jest .
`cwnd` reprezentuje aktualne oszacowanie nadawcy dotycz膮ce dost臋pnej pojemno艣ci na 艣cie偶ce sieciowej. Nadawca nie mo偶e wys艂a膰 wi臋cej danych, ni偶 wynosi minimum z `cwnd` i og艂oszonego przez odbiorc臋 okna kontroli przep艂ywu (`rwnd`). Algorytmy TCP dynamicznie dostosowuj膮 rozmiar tego `cwnd` na podstawie informacji zwrotnych otrzymywanych z sieci w postaci potwierdze艅 (ACK) i dowod贸w utraty pakiet贸w. Ta dynamiczna regulacja generalnie pod膮偶a za zasad膮 znan膮 jako AIMD (Wzrost Addytywny, Spadek Multiplikatywny).
Cykl 偶ycia kontroli przeci膮偶e艅 w TCP mo偶na podzieli膰 na odr臋bne fazy.
Faza 1: Powolny Start (Slow Start)
Kiedy po艂膮czenie TCP dopiero si臋 rozpoczyna, nadawca nic nie wie o dost臋pnej przepustowo艣ci 艣cie偶ki sieciowej. Faza Powolnego Startu ma na celu szybkie zbadanie sieci w celu znalezienia przybli偶onej pojemno艣ci. Nazwa jest nieco myl膮ca, poniewa偶 wzrost okna jest w rzeczywisto艣ci wyk艂adniczy.
- Sesja zaczyna si臋 z bardzo ma艂ym `cwnd`, zazwyczaj od 1 do 10 Maksymalnych Rozmiar贸w Segmentu (MSS). Za艂贸偶my, 偶e zaczyna si臋 od `cwnd = 1 MSS`.
- Nadawca przesy艂a jeden segment. Kiedy otrzymane zostanie potwierdzenie (ACK) dla tego segmentu, nadawca zwi臋ksza swoje `cwnd` o 1 MSS.
- Poniewa偶 dzieje si臋 to dla ka偶dego ACK, `cwnd` faktycznie podwaja si臋 co czas podr贸偶y w obie strony (RTT). (Wys艂anie 1 pakietu daje 1 ACK, `cwnd` staje si臋 2. Wys艂anie 2 pakiet贸w daje 2 ACK, `cwnd` staje si臋 4, i tak dalej).
- Ten wyk艂adniczy wzrost trwa, dop贸ki nie zostanie utracony pakiet, lub `cwnd` nie osi膮gnie warto艣ci zwanej .
Faza 2: Unikanie Przeci膮偶e艅 (Congestion Avoidance)
Gdy `cwnd` osi膮gnie `ssthresh`, nadawca zak艂ada, 偶e zbli偶a si臋 do pojemno艣ci sieci i musi przej艣膰 w tryb bardziej ostro偶ny, aby nie spowodowa膰 przeci膮偶enia. Jest to faza Unikania Przeci膮偶e艅.
- Zamiast wzrostu wyk艂adniczego, nadawca u偶ywa teraz wzrostu addytywnego.
- `cwnd` jest zwi臋kszane o oko艂o 1 MSS co ka偶dy pe艂ny czas podr贸偶y w obie strony. Oznacza to, 偶e za ka偶de otrzymane `cwnd` ACK, okno ro艣nie o jeden segment.
- Reprezentuje to znacznie wolniejsz膮, liniow膮 faz臋 wzrostu, pozwalaj膮c nadawcy delikatnie sondowa膰 w poszukiwaniu dodatkowej dost臋pnej przepustowo艣ci.
Faza 3: Wykrywanie Przeci膮偶e艅 i Reakcja
Faza Unikania Przeci膮偶e艅 trwa do momentu, gdy nadawca wykryje utrat臋 pakietu, co traktuje jako wyra藕ny sygna艂 przeci膮偶enia w sieci. TCP ma dwa g艂贸wne sposoby wykrywania utraty pakiet贸w, a jego reakcja znacznie si臋 r贸偶ni dla ka偶dego z nich.
- Reakcja na Timeout: Jest to najpowa偶niejszy wska藕nik przeci膮偶enia. Timeout wyst臋puje, gdy nadawca nie otrzyma ACK dla wys艂anego segmentu w obliczonym okresie czasu (RTO). Oznacza to, 偶e pakiet (i prawdopodobnie jego p贸藕niejsze ACK) s膮 definitywnie utracone.
- `ssthresh` jest ustawiany na po艂ow臋 bie偶膮cego `cwnd`.
- `cwnd` jest drastycznie redukowane, resetuj膮c si臋 do `1 MSS`.
- Nadawca ponownie wchodzi w faz臋 Powolnego Startu. Jest to klasyczne zachowanie TCP Tahoe.
- Reakcja na Potr贸jne Zduplikowane ACK (Szybka Retransmisja/Szybkie Odtwarzanie): TCP mo偶e r贸wnie偶 wywnioskowa膰 pojedyncz膮 utrat臋 pakietu znacznie wcze艣niej. 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 segmentu 4, wy艣le ponownie zduplikowane ACK dla segmentu 2 (wskazuj膮c, 偶e wci膮偶 czeka na 3). Gdy nadejdzie segment 5, wy艣le kolejne zduplikowane ACK dla 2. Kiedy nadawca otrzyma trzy zduplikowane ACK dla tego samego segmentu, zak艂ada, 偶e nast臋pny segment zosta艂 utracony i wykonuje Szybk膮 Retransmisj臋 bez czekania na timeout. Wskazuje to na mniej powa偶ne zdarzenie przeci膮偶enia. Reakcja, charakterystyczna dla TCP Reno, jest r贸wnie偶 mniej surowa:
- To jest cz臋艣膰 "spadku multiplikatywnego" w AIMD. `ssthresh` jest ustawiany na po艂ow臋 bie偶膮cego `cwnd`.
- `cwnd` jest r贸wnie偶 redukowane do nowej warto艣ci `ssthresh` (nie z powrotem do 1).
- Nadawca natychmiast wchodzi w faz臋 Unikania Przeci膮偶e艅, pomijaj膮c agresywny Powolny Start.
5. Nowoczesne Algorytmy Kontroli Przeci膮偶e艅 TCP
Chocia偶 podej艣cie AIMD w TCP Reno jest fundamentalne, nowoczesne sieci o bardzo du偶ej przepustowo艣ci i d艂ugich op贸藕nieniach ("d艂ugie, grube sieci") ujawni艂y s艂abo艣ci jego liniowego sondowania. Doprowadzi艂o to do rozwoju bardziej zaawansowanych algorytm贸w.
- TCP CUBIC
CUBIC jest domy艣lnym algorytmem kontroli przeci膮偶e艅 w systemie Linux i wielu innych nowoczesnych systemach. Zamiast liniowego wzrostu podczas Unikania Przeci膮偶e艅, CUBIC u偶ywa funkcji sze艣ciennej do zarz膮dzania wzrostem okna. Po utracie pakietu okno jest redukowane, a nast臋pnie na pocz膮tku ro艣nie bardzo szybko. W miar臋 zbli偶ania si臋 do rozmiaru okna sprzed utraty, wzrost znacznie zwalnia, aby zachowa膰 ostro偶no艣膰. Po przekroczeniu tego punktu zaczyna ponownie przyspiesza膰, aby agresywnie sondowa膰 w poszukiwaniu nowej dost臋pnej przepustowo艣ci. To podej艣cie jest bardziej stabilne i dzia艂a znacznie lepiej w sieciach o du偶ej pr臋dko艣ci i d艂ugich op贸藕nieniach.
- BBR (Bottleneck Bandwidth and Round-trip propagation time)
Opracowany przez Google, BBR przyjmuje fundamentalnie inne podej艣cie. Zamiast u偶ywa膰 utraty pakiet贸w jako g艂贸wnego sygna艂u przeci膮偶enia, BBR aktywnie stara si臋 mierzy膰 dwa kluczowe parametry 艣cie偶ki sieciowej: przepustowo艣膰 w膮skiego gard艂a i czas propagacji w obie strony. Nast臋pnie dostosowuje swoj膮 szybko艣膰 wysy艂ania, aby pasowa艂a do zmierzonej przepustowo艣ci w膮skiego gard艂a. Dzi臋ki temu BBR d膮偶y do dzia艂ania w optymalnym punkcie sieci, osi膮gaj膮c wysok膮 przepustowo艣膰 bez zape艂niania bufor贸w routera, unikaj膮c w ten spos贸b wysokich op贸藕nie艅 i utraty pakiet贸w (bufferbloat), kt贸re mog膮 powodowa膰 algorytmy oparte na stratach, takie jak Reno i CUBIC.
6. Kontrola Przeci膮偶e艅 Wspomagana przez Sie膰
Chocia偶 mechanizmy od ko艅ca do ko艅ca, takie jak te w TCP, s膮 pot臋偶ne, same urz膮dzenia sieciowe mog膮 odgrywa膰 bardziej aktywn膮 rol臋 w zarz膮dzaniu przeci膮偶eniami.
- Aktywne Zarz膮dzanie Kolejkami (AQM)
AQM odnosi si臋 do klasy algorytm贸w opartych na routerach, kt贸re proaktywnie zarz膮dzaj膮 d艂ugo艣ci膮 kolejek. Zamiast czeka膰, a偶 kolejka si臋 ca艂kowicie zape艂ni, a nast臋pnie odrzuca膰 wszystkie przychodz膮ce pakiety (zachowanie zwane tail-drop), algorytmy AQM zaczynaj膮 odrzuca膰 pakiety wcze艣niej. Najbardziej znanym algorytmem AQM jest Losowe Wczesne Wykrywanie (RED). RED monitoruje 艣redni膮 d艂ugo艣膰 kolejki i, w miar臋 jej wzrostu, zaczyna losowo odrzuca膰 pakiety z rosn膮cym prawdopodobie艅stwem. Wysy艂a to wczesny sygna艂 ostrzegawczy do nadawc贸w TCP, sk艂aniaj膮c ich do zmniejszenia szybko艣ci wysy艂ania przed wyst膮pieniem powa偶nego przeci膮偶enia, co prowadzi do bardziej stabilnej sieci.
- Jawne Powiadamianie o Przeci膮偶eniu (ECN)
ECN to dalsze udoskonalenie AQM. Zamiast odrzuca膰 pakiet w celu zasygnalizowania przeci膮偶enia, router obs艂uguj膮cy ECN mo偶e ustawi膰 specjaln膮 flag臋 "Do艣wiadczono Przeci膮偶enia" w nag艂贸wku IP pakietu i normalnie go przekaza膰. Urz膮dzenie odbieraj膮ce widzi t臋 flag臋 i odsy艂a powiadomienie o przeci膮偶eniu z powrotem do nadawcy w swoim potwierdzeniu TCP. Nadawca TCP reaguje tak, jakby otrzyma艂 potr贸jne zduplikowane ACK (redukuj膮c swoje okno), ale bez potrzeby retransmisji utraconego pakietu. ECN pozwala na sygnalizowanie przeci膮偶e艅 bez indukowania utraty pakiet贸w, co jest bardziej wydajne.
Podsumowuj膮c, kontrola przeci膮偶e艅 to z艂o偶ona i dynamiczna dziedzina. Jest to kooperacyjny taniec mi臋dzy systemami ko艅cowymi, kt贸re pr贸buj膮 dostosowa膰 si臋 do stanu sieci, a samymi urz膮dzeniami sieciowymi, kt贸re zarz膮dzaj膮 swoimi zasobami i mog膮 dostarcza膰 sygna艂贸w, aby pom贸c systemom ko艅cowym dobrze si臋 zachowywa膰. Mechanizmy te s膮 ukrytym silnikiem, kt贸ry pozwala wsp贸艂dzielonemu, publicznemu internetowi funkcjonowa膰 wydajnie na skal臋 globaln膮.