Zanesljivost TCP-ja za prevoz
Vsi poznamo protokol TCP kot zanesljiv transportni protokol, toda kako zagotavlja zanesljivost transporta?
Za doseganje zanesljivega prenosa je treba upoštevati številne dejavnike, kot so poškodbe podatkov, izguba, podvajanje in nepravilno zaporedje delcev. Če teh težav ni mogoče rešiti, ni mogoče doseči zanesljivega prenosa.
Zato TCP uporablja mehanizme, kot so zaporedna številka, potrditveni odgovor, nadzor ponovnega pošiljanja, upravljanje povezav in nadzor oken za doseganje zanesljivega prenosa.
V tem članku se bomo osredotočili na drsno okno, nadzor pretoka in nadzor preobremenjenosti TCP. Mehanizem ponovnega prenosa je obravnavan ločeno v naslednjem razdelku.
Nadzor pretoka omrežja
Nadzor omrežnega pretoka ali znan kot nadzor omrežnega prometa je pravzaprav manifestacija subtilnega odnosa med proizvajalci in potrošniki. S tem scenarijem ste se verjetno že velikokrat srečali pri delu ali na razgovorih. Če zmogljivost proizvajalca za proizvodnjo močno presega zmogljivost potrošnika za porabo, bo to povzročilo, da se bo čakalna vrsta v nedogled večala. V resnejšem primeru morda veste, da lahko preveliko kopičenje sporočil RabbitMQ povzroči poslabšanje delovanja celotnega strežnika MQ. Enako velja za TCP; če se ne nadzoruje, bo v omrežje poslanih preveč sporočil in potrošniki bodo presegli svojo zmogljivost, medtem ko bodo proizvajalci še naprej pošiljali podvojena sporočila, kar bo močno vplivalo na delovanje omrežja.
Za reševanje tega pojava TCP zagotavlja mehanizem, s katerim lahko pošiljatelj nadzoruje količino poslanih podatkov glede na dejansko sprejemno zmogljivost sprejemnika, kar je znano kot nadzor pretoka. Sprejemnik vzdržuje okno za prejemanje, pošiljatelj pa okno za pošiljanje. Treba je opozoriti, da so ta okna namenjena samo eni povezavi TCP in da si vse povezave ne delijo okna.
TCP zagotavlja nadzor pretoka z uporabo spremenljivke za prejemno okno. Prejemno okno pošiljatelju sporoča, koliko prostora v predpomnilniku je še na voljo. Pošiljatelj nadzoruje količino poslanih podatkov glede na dejansko sprejemno zmogljivost sprejemnika.
Sprejemni gostitelj obvesti pošiljatelja o velikosti podatkov, ki jih lahko prejme, pošiljatelj pa pošlje podatke do te omejitve. Ta omejitev je velikost okna – se spomnite glave TCP? Obstaja polje prejemnega okna, ki se uporablja za označevanje števila bajtov, ki jih sprejemnik lahko ali želi prejeti.
Pošiljatelj bo periodično pošiljal paket za preverjanje okna, ki se uporablja za zaznavanje, ali lahko sprejemnik še vedno sprejema podatke. Ko je medpomnilnik sprejemnika v nevarnosti, da se prepolni, se velikost okna nastavi na manjšo vrednost, da se pošiljatelju naroči, naj nadzoruje količino poslanih podatkov.
Tukaj je diagram nadzora pretoka v omrežju:
Nadzor preobremenjenosti omrežja
Preden uvedemo nadzor preobremenjenosti, moramo razumeti, da poleg okna za sprejem in okna za pošiljanje obstaja tudi okno preobremenjenosti, ki se uporablja predvsem za reševanje problema, s kakšno hitrostjo pošiljatelj začne pošiljati podatke v okno za sprejem. Zato okno preobremenjenosti vzdržuje tudi pošiljatelj TCP. Potrebujemo algoritem, ki bo odločil, koliko podatkov je primerno poslati, saj pošiljanje premalo ali preveč podatkov ni idealno, od tod tudi koncept okna preobremenjenosti.
V prejšnjem nadzoru pretoka omrežja smo se izognili temu, da bi pošiljatelj polnil predpomnilnik prejemnika s podatki, vendar nismo vedeli, kaj se dogaja v omrežju. Običajno so računalniška omrežja v skupnem okolju. Posledično lahko pride do preobremenitve omrežja zaradi komunikacije med drugimi gostitelji.
Ko je omrežje preobremenjeno in se nenehno pošilja veliko število paketov, lahko to povzroči težave, kot so zamude in izguba paketov. V tem primeru bo TCP ponovno poslal podatke, vendar bo ponovni prenos povečal obremenitev omrežja, kar bo povzročilo večje zamude in izgubo paketov. To lahko zaide v začaran krog, ki se bo še naprej povečeval.
TCP torej ne more prezreti dogajanja v omrežju. Ko je omrežje preobremenjeno, se TCP žrtvuje z zmanjšanjem količine podatkov, ki jih pošilja.
Zato se predlaga nadzor preobremenjenosti, katerega cilj je preprečiti zapolnitev celotnega omrežja s podatki pošiljatelja. Za regulacijo količine podatkov, ki jih mora pošiljatelj poslati, TCP definira koncept, imenovan okno preobremenjenosti. Algoritem za nadzor preobremenjenosti bo prilagodil velikost okna preobremenjenosti glede na stopnjo preobremenjenosti omrežja, da bi nadzoroval količino podatkov, ki jih pošiljatelj pošlje.
Kaj je okno preobremenjenosti? Kakšno zvezo ima to z oknom pošiljanja?
Okno preobremenjenosti je spremenljivka stanja, ki jo vzdržuje pošiljatelj in določa količino podatkov, ki jih lahko pošlje. Okno preobremenjenosti se dinamično spreminja glede na stopnjo preobremenjenosti omrežja.
Pošiljalno okno je dogovorjena velikost okna med pošiljateljem in prejemnikom, ki označuje količino podatkov, ki jih lahko prejemnik prejme. Okno preobremenjenosti in okno pošiljanja sta povezana; okno pošiljanja je običajno enako najmanjši velikosti okna preobremenjenosti in okna prejemanja, torej swnd = min(cwnd, rwnd).
Okno preobremenjenosti cwnd se spreminja na naslednji način:
Če v omrežju ni preobremenitve, tj. če ne pride do časovne omejitve ponovnega prenosa, se okno preobremenitve poveča.
Če je v omrežju preobremenjenost, se okno preobremenjenosti zmanjša.
Pošiljatelj ugotovi, ali je omrežje preobremenjeno, tako da opazuje, ali je paket potrditve ACK prejet v določenem času. Če pošiljatelj ne prejme paketa potrditve ACK v določenem času, se šteje, da je omrežje preobremenjeno.
Poleg okna zastojev je čas, da se pogovorimo o algoritmu za nadzor zastojev TCP. Algoritem za nadzor zastojev TCP je sestavljen iz treh glavnih delov:
Počasen začetek:Sprva je okno preobremenjenosti cwnd relativno majhno, pošiljatelj pa okno preobremenjenosti eksponentno poveča, da se hitro prilagodi zmogljivosti omrežja.
Izogibanje zastojem:Ko okno preobremenjenosti preseže določen prag, pošiljatelj linearno poveča okno preobremenjenosti, da upočasni stopnjo rasti okna preobremenjenosti in se izogne preobremenitvi omrežja.
Hitro okrevanje:Če pride do preobremenitve, pošiljatelj prepolovi okno preobremenitve in preide v stanje hitrega okrevanja, da na podlagi prejetih podvojenih potrdil določi lokacijo okrevanja omrežja, nato pa še naprej povečuje okno preobremenitve.
Počasen začetek
Ko je vzpostavljena TCP povezava, se okno preobremenjenosti cwnd sprva nastavi na minimalno vrednost MSS (največja velikost segmenta). Na ta način je začetna hitrost pošiljanja približno MSS/RTT bajtov na sekundo. Dejanska razpoložljiva pasovna širina je običajno veliko večja od MSS/RTT, zato želi TCP najti optimalno hitrost pošiljanja, kar je mogoče doseči s počasnim zagonom.
V procesu počasnega zagona se vrednost okna preobremenjenosti cwnd inicializira na 1 MSS in vsakič, ko je poslani segment paketa potrjen, se vrednost cwnd poveča za en MSS, torej vrednost cwnd postane 2 MSS. Nato se vrednost cwnd podvoji za vsak uspešen prenos segmenta paketa in tako naprej. Specifičen proces rasti je prikazan na naslednji sliki.
Vendar pa stopnja pošiljanja ne more vedno rasti; rast se mora nekoč končati. Kdaj se torej konča povečevanje stopnje pošiljanja? Počasen začetek običajno konča povečevanje stopnje pošiljanja na enega od več načinov:
Prvi način je primer izgube paketov med postopkom pošiljanja s počasnim zagonom. Ko pride do izgube paketa, TCP nastavi okno preobremenjenosti pošiljatelja cwnd na 1 in ponovno zažene postopek s počasnim zagonom. Na tej točki se uvede koncept praga počasnega zagona ssthresh, katerega začetna vrednost je polovica vrednosti cwnd, ki povzroči izgubo paketov. To pomeni, da je ob zaznavi preobremenjenosti vrednost ssthresh enaka polovici vrednosti okna.
Drugi način je neposredna korelacija z vrednostjo praga počasnega zagona ssthresh. Ker je vrednost ssthresh polovica vrednosti okna, ko je zaznana preobremenjenost, lahko pride do izgube paketov pri vsakem podvojitvi, ko je cwnd večji od ssthresh. Zato je najbolje, da cwnd nastavite na ssthresh, kar bo povzročilo, da bo TCP preklopil v način nadzora preobremenjenosti in končal počasni zagon.
Zadnji način, kako se lahko počasen začetek konča, je, če so zaznani trije odvečni paketi ACK, TCP izvede hiter ponovni prenos in preide v stanje obnovitve. (Če ni jasno, zakaj so prisotni trije paketi ACK, bo to pojasnjeno ločeno v mehanizmu ponovnega prenosa.)
Izogibanje zastojem
Ko TCP preide v stanje nadzora preobremenjenosti, se cwnd nastavi na polovico praga preobremenjenosti ssthresh. To pomeni, da vrednosti cwnd ni mogoče podvojiti vsakič, ko je prejet segment paketa. Namesto tega se uporabi relativno konzervativen pristop, pri katerem se vrednost cwnd po vsakem končanem prenosu poveča le za en MSS (največja dolžina segmenta paketa). Na primer, tudi če je potrjenih 10 segmentov paketa, se vrednost cwnd poveča le za en MSS. To je linearni model rasti in ima tudi zgornjo mejo rasti. Ko pride do izgube paketa, se vrednost cwnd spremeni v MSS, vrednost ssthresh pa se nastavi na polovico cwnd. Ali pa se rast MSS ustavi tudi, ko so prejeti 3 redundantni odgovori ACK. Če so po prepolovitvi vrednosti cwnd še vedno prejeti trije redundantni odgovori ACK, se vrednost ssthresh zabeleži kot polovica vrednosti cwnd in sistem preide v stanje hitrega okrevanja.
Hitro okrevanje
V stanju hitrega okrevanja se vrednost okna preobremenjenosti cwnd poveča za eno MSS za vsak prejeti redundantni ACK, torej ACK, ki ne prispe v zaporedju. To se naredi zato, da se za čim večje izboljšanje učinkovitosti prenosa uporabijo segmenti paketov, ki so bili uspešno poslani v omrežju.
Ko prispe potrdilo o prejemu izgubljenega segmenta paketa, TCP zmanjša vrednost cwnd in nato preide v stanje izogibanja zastojem. To se naredi za nadzor velikosti okna zastojev in preprečevanje nadaljnjega povečanja zastojev omrežja.
Če po stanju nadzora preobremenjenosti pride do časovne omejitve, se stanje omrežja poslabša in TCP preide iz stanja izogibanja preobremenjenosti v stanje počasnega zagona. V tem primeru je vrednost okna preobremenjenosti cwnd nastavljena na 1 MSS, največja dolžina segmenta paketa, vrednost praga počasnega zagona ssthresh pa na polovico cwnd. Namen tega je postopno povečevati velikost okna preobremenjenosti po okrevanju omrežja, da se uravnoteži hitrost prenosa in stopnja preobremenjenosti omrežja.
Povzetek
Kot zanesljiv transportni protokol TCP izvaja zanesljiv transport z zaporedno številko, potrditvijo, nadzorom ponovnega prenosa, upravljanjem povezav in nadzorom oken. Med njimi mehanizem za nadzor pretoka nadzoruje količino podatkov, ki jih pošlje pošiljatelj, glede na dejansko sprejemno zmogljivost prejemnika, s čimer se izognemo težavam z zastoji omrežja in poslabšanjem delovanja. Mehanizem za nadzor zastojev preprečuje nastanek zastojev omrežja s prilagajanjem količine podatkov, ki jih pošlje pošiljatelj. Koncepta okna zastojev in okna pošiljanja sta med seboj povezana, količino podatkov pri pošiljatelju pa nadzoruje dinamično prilagajanje velikosti okna zastojev. Počasen zagon, izogibanje zastojem in hitro okrevanje so trije glavni deli algoritma za nadzor zastojev TCP, ki prilagajajo velikost okna zastojev z različnimi strategijami, da se prilagodijo zmogljivosti in stopnji zastojev omrežja.
V naslednjem razdelku bomo podrobno preučili mehanizem ponovnega prenosa TCP. Mehanizem ponovnega prenosa je pomemben del TCP za doseganje zanesljivega prenosa. Zagotavlja zanesljiv prenos podatkov s ponovnim prenosom izgubljenih, poškodovanih ali zakasnjenih podatkov. Načelo izvedbe in strategija mehanizma ponovnega prenosa bosta podrobno predstavljena in analizirana v naslednjem razdelku. Ostanite z nami!
Čas objave: 24. februar 2025