Spolehlivost TCP Transport
Všichni známe protokol TCP jako spolehlivý transportní protokol, ale jak zajišťuje spolehlivost transportu?
Pro dosažení spolehlivého přenosu je třeba zvážit mnoho faktorů, jako je poškození dat, ztráta, duplikace a shardy mimo pořadí. Pokud tyto problémy nelze vyřešit, nelze dosáhnout spolehlivého přenosu.
Proto TCP využívá mechanismy, jako je pořadové číslo, potvrzovací odpověď, řízení opětovného odeslání, správa připojení a řízení oken, aby dosáhl spolehlivého přenosu.
V tomto článku se zaměříme na posuvné okno, řízení toku a řízení zahlcení protokolu TCP. Mechanismus opakovaného přenosu je popsán samostatně v následující části.
Řízení toku v síti
Řízení toku v síti neboli Network Flow Control je ve skutečnosti projevem jemného vztahu mezi producenty a spotřebiteli. S tímto scénářem jste se pravděpodobně setkali v práci nebo při pohovorech mnohokrát. Pokud kapacita producenta produkovat výrazně převyšuje kapacitu spotřebitele spotřebovávat, způsobí to, že fronta bude donekonečna růst. V závažnějším případě možná víte, že když se zprávy RabbitMQ příliš hromadí, může to způsobit snížení výkonu celého serveru MQ. Totéž platí pro TCP; pokud se nezaškrtne, do sítě se dostane příliš mnoho zpráv a spotřebitelé překročí svou kapacitu, zatímco producenti budou i nadále odesílat duplicitní zprávy, což výrazně ovlivní výkon sítě.
Aby se tento jev vyřešil, poskytuje TCP mechanismus, kterým může odesílatel řídit množství odesílaných dat na základě skutečné přijímací kapacity příjemce, což se nazývá řízení toku. Příjemce si udržuje přijímací okno, zatímco odesílatel si udržuje odesílací okno. Je třeba poznamenat, že tato okna jsou určena pouze pro jedno TCP připojení a ne všechna připojení sdílejí jedno okno.
TCP zajišťuje řízení toku dat pomocí proměnné pro přijímací okno. Přijímací okno informuje odesílatele o tom, kolik prostoru v mezipaměti je stále k dispozici. Odesílatel řídí množství odesílaných dat podle skutečné akceptační kapacity přijímače.
Přijímající hostitel upozorní odesílatele na velikost dat, která může přijmout, a odesílatel odešle data do tohoto limitu. Tento limit se nazývá velikost okna, pamatujete si na hlavičku TCP? Existuje pole „přijímací okno“, které se používá k označení počtu bajtů, které je přijímač schopen nebo ochoten přijmout.
Odesílající hostitel bude pravidelně odesílat paket s testovacím oknem, který se používá k detekci, zda je přijímající hostitel stále schopen přijímat data. Pokud hrozí přeplnění vyrovnávací paměti přijímajícího hostitele, velikost okna se nastaví na menší hodnotu, aby odesílatel měl řídit množství odesílaných dat.
Zde je diagram řízení toku v síti:
Řízení přetížení sítě
Než zavedeme řízení přetížení, musíme si uvědomit, že kromě okna pro příjem a okno pro odesílání existuje také okno pro přetížení, které se používá hlavně k řešení problému, s jakou rychlostí odesílatel začne odesílat data do okna pro příjem. Okno pro přetížení je proto také udržováno odesílatelem TCP. Potřebujeme algoritmus, který rozhodne, kolik dat je vhodné odeslat, protože odesílání příliš malého nebo příliš velkého množství dat není ideální, a proto pochází koncept okna pro přetížení.
V předchozím řízení toku v síti jsme se vyhýbali tomu, aby odesílatel plnil mezipaměť příjemce daty, ale nevěděli jsme, co se v síti děje. Počítačové sítě se obvykle nacházejí ve sdíleném prostředí. V důsledku toho může docházet k přetížení sítě v důsledku komunikace mezi ostatními hostiteli.
Pokud je síť přetížená a je neustále odesíláno velké množství paketů, může to způsobit problémy, jako je zpoždění a ztráta paketů. V tomto okamžiku TCP data znovu odešle, ale tento opakovaný přenos zvýší zátěž sítě, což povede k větším zpožděním a ztrátě paketů. To se může dostat do začarovaného kruhu a neustále se zvětšovat.
TCP tedy nemůže ignorovat, co se děje v síti. Když je síť přetížená, TCP se obětuje tím, že snižuje množství odesílaných dat.
Proto se navrhuje řízení přetížení, jehož cílem je zabránit zaplnění celé sítě daty od odesílatele. Pro regulaci množství dat, která by měl odesílatel odeslat, definuje TCP koncept nazývaný okno přetížení. Algoritmus řízení přetížení upraví velikost okna přetížení podle stupně přetížení sítě, aby se kontrolovalo množství dat odesílaných odesílatelem.
Co je to okno přetížení? Co to má společného s oknem odesílání?
Okno přetížení je stavová proměnná udržovaná odesílatelem, která určuje množství dat, které může odesílatel odeslat. Okno přetížení se dynamicky mění v závislosti na úrovni přetížení sítě.
Odesílací okno je dohodnutá velikost okna mezi odesílatelem a příjemcem, která udává množství dat, které může příjemce přijmout. Okno přetížení a odesílací okno spolu souvisí; odesílací okno se obvykle rovná minimu z okna přetížení a okna příjmu, tj. swnd = min(cwnd, rwnd).
Okno zahlcení cwnd se mění následovně:
Pokud v síti nedochází k přetížení, tj. nedochází k vypršení časového limitu pro opakovaný přenos, okno přetížení se zvětšuje.
Pokud je v síti přetížení, okno přetížení se zmenšuje.
Odesílatel určí, zda je síť přetížená, sledováním, zda je paket potvrzení ACK přijat v zadaném čase. Pokud odesílatel paket potvrzení ACK v zadaném čase neobdrží, má se za to, že je síť přetížená.
Kromě okna zahlcení je čas probrat algoritmus řízení zahlcení TCP. Algoritmus řízení zahlcení TCP se skládá ze tří hlavních částí:
Pomalý start:Zpočátku je okno přetížení cwnd relativně malé a odesílatel jej exponenciálně zvyšuje, aby se rychle přizpůsobil kapacitě sítě.
Vyhýbání se dopravní zácpě:Poté, co okno přetížení překročí určitou prahovou hodnotu, odesílatel lineárně zvyšuje okno přetížení, aby zpomalil tempo růstu okna přetížení a zabránil přetížení sítě.
Rychlé zotavení:Pokud dojde k přetížení, odesílatel zkrátí okno přetížení na polovinu a přejde do stavu rychlé obnovy, aby určil místo obnovy sítě prostřednictvím přijatých duplicitních potvrzení (ACK), a poté okno přetížení dále zvětšuje.
Pomalý start
Když je navázáno TCP spojení, okno zahlcení cwnd je zpočátku nastaveno na minimální hodnotu MSS (maximální velikost segmentu). Tímto způsobem je počáteční rychlost odesílání přibližně MSS/RTT bajtů za sekundu. Skutečná dostupná šířka pásma je obvykle mnohem větší než MSS/RTT, takže TCP chce najít optimální rychlost odesílání, čehož lze dosáhnout pomocí pomalého startu.
V procesu pomalého startu se hodnota okna zahlcení cwnd inicializuje na 1 MSS a pokaždé, když je odeslaný segment paketu potvrzen, se hodnota cwnd zvýší o jeden MSS, tj. hodnota cwnd se stane 2 MSS. Poté se hodnota cwnd zdvojnásobí za každý úspěšný přenos segmentu paketu atd. Konkrétní proces růstu je znázorněn na následujícím obrázku.
Míra odesílání však nemůže vždy růst; růst musí někdy skončit. Kdy tedy nárůst rychlosti odesílání končí? Pomalý start obvykle ukončí nárůst rychlosti odesílání jedním z několika způsobů:
Prvním způsobem je případ ztráty paketů během procesu odesílání s pomalým startem. Když dojde ke ztrátě paketů, TCP nastaví okno zahlcení odesílatele cwnd na 1 a restartuje proces pomalého startu. V tomto bodě je zaveden koncept prahu pomalého startu ssthresh, jehož počáteční hodnota je polovina hodnoty cwnd, která generuje ztrátu paketů. To znamená, že když je detekováno zahlcení, hodnota ssthresh je polovina hodnoty okna.
Druhým způsobem je přímá korelace s hodnotou prahové hodnoty pomalého startu ssthresh. Protože hodnota ssthresh je při detekci přetížení poloviční oproti hodnotě okna, může docházet ke ztrátě paketů při každém zdvojnásobení, pokud je cwnd větší než ssthresh. Proto je nejlepší nastavit cwnd na ssthresh, což způsobí, že TCP přepne do režimu řízení přetížení a ukončí pomalý start.
Posledním způsobem, jak může pomalý start skončit, je detekce tří redundantních potvrzení (ACK), kdy TCP provede rychlý retransmisní proces a přejde do stavu obnovy. (Pokud není jasné, proč existují tři ACK pakety, bude to vysvětleno samostatně v mechanismu retransmise.)
Vyhýbání se dopravním zácpám
Když TCP přejde do stavu řízení přetížení, cwnd se nastaví na polovinu prahové hodnoty přetížení ssthresh. To znamená, že hodnotu cwnd nelze zdvojnásobit pokaždé, když je přijat segment paketu. Místo toho se používá relativně konzervativní přístup, ve kterém se hodnota cwnd po každém dokončení přenosu zvyšuje pouze o jeden MSS (maximální délka segmentu paketu). Například i když je potvrzeno 10 segmentů paketu, hodnota cwnd se zvýší pouze o jeden MSS. Jedná se o lineární model růstu a má také horní hranici růstu. Při ztrátě paketu se hodnota cwnd změní na MSS a hodnota ssthresh se nastaví na polovinu cwnd. Nebo se také zastaví růst MSS, když jsou přijaty 3 redundantní odpovědi ACK. Pokud jsou po snížení hodnoty cwnd na polovinu stále přijaty tři redundantní odpovědi ACK, hodnota ssthresh se zaznamená jako polovina hodnoty cwnd a přejde se do stavu rychlé obnovy.
Rychlé zotavení
Ve stavu Rychlé zotavení se hodnota okna zahlcení cwnd zvyšuje o jednu MSS pro každé přijaté redundantní potvrzení (ACK), tj. potvrzení, které nedorazí v pořadí. To má za cíl využít segmenty paketů, které byly v síti úspěšně odeslány, a co nejvíce zlepšit efektivitu přenosu.
Když dorazí potvrzení (ACK) o ztraceném segmentu paketu, TCP sníží hodnotu cwnd a poté přejde do stavu zamezení přetížení. To slouží k řízení velikosti okna přetížení a zabránění dalšímu zvyšování přetížení sítě.
Pokud po stavu řízení přetížení dojde k uplynutí časového limitu, stav sítě se zhorší a TCP migruje ze stavu zamezení přetížení do stavu pomalého startu. V tomto případě je hodnota okna přetížení cwnd nastavena na 1 MSS, maximální délka segmentu paketu a hodnota prahu pomalého startu ssthresh je nastavena na polovinu cwnd. Účelem je postupně zvětšovat velikost okna přetížení po zotavení sítě, aby se vyvážila přenosová rychlost a stupeň přetížení sítě.
Shrnutí
Jako spolehlivý transportní protokol implementuje TCP spolehlivý transport pomocí pořadového čísla, potvrzení, řízení opětovného přenosu, správy připojení a řízení oken. Mezi nimi mechanismus řízení toku řídí množství dat odesílaných odesílatelem podle skutečné přijímací kapacity příjemce, čímž se předchází problémům s přetížením sítě a snížením výkonu. Mechanismus řízení přetížení zabraňuje vzniku přetížení sítě úpravou množství dat odesílaných odesílatelem. Pojmy okna přetížení a okna odesílání spolu souvisejí a množství dat u odesílatele je řízeno dynamickou úpravou velikosti okna přetížení. Pomalý start, zamezení přetížení a rychlá obnova jsou tři hlavní části algoritmu řízení přetížení TCP, které upravují velikost okna přetížení pomocí různých strategií, aby se přizpůsobily kapacitě a stupni přetížení sítě.
V další části se podrobně podíváme na mechanismus opakovaného přenosu TCP. Mechanismus opakovaného přenosu je důležitou součástí TCP pro dosažení spolehlivého přenosu. Zajišťuje spolehlivý přenos dat opakovaným přenosem ztracených, poškozených nebo zpožděných dat. Princip implementace a strategie mechanismu opakovaného přenosu budou představeny a podrobně analyzovány v další části. Zůstaňte naladěni!
Čas zveřejnění: 24. února 2025