Pouzdanost TCP-a Prijenos
Svima nam je poznat TCP protokol kao pouzdan transportni protokol, ali kako on osigurava pouzdanost transporta?
Za postizanje pouzdanog prijenosa potrebno je uzeti u obzir mnoge čimbenike, kao što su oštećenje podataka, gubitak, dupliciranje i fragmenti koji nisu u redoslijedu. Ako se ovi problemi ne mogu riješiti, ne može se postići pouzdan prijenos.
Stoga TCP koristi mehanizme kao što su slijedni broj, potvrda odgovora, kontrola ponovnog slanja, upravljanje vezom i kontrola prozora kako bi se postigao pouzdan prijenos.
U ovom radu usredotočit ćemo se na klizni prozor, kontrolu protoka i kontrolu zagušenja TCP-a. Mehanizam ponovnog prijenosa obrađen je zasebno u sljedećem odjeljku.
Kontrola protoka mreže
Kontrola mrežnog protoka ili poznata kao Kontrola mrežnog prometa zapravo je manifestacija suptilnog odnosa između proizvođača i potrošača. Vjerojatno ste se često susreli s ovim scenarijem na poslu ili u razgovorima za posao. Ako proizvođačev kapacitet proizvodnje znatno premašuje potrošačev kapacitet potrošnje, to će uzrokovati beskonačan rast reda čekanja. U ozbiljnijem slučaju, možda znate da kada se RabbitMQ poruke previše nagomilaju, to može uzrokovati smanjenje performansi cijelog MQ poslužitelja. Isto vrijedi i za TCP; ako se ne kontrolira, previše poruka će se poslati u mrežu, a potrošači će premašiti svoj kapacitet, dok će proizvođači nastaviti slati duplicirane poruke, što će uvelike utjecati na performanse mreže.
Kako bi se riješio ovaj fenomen, TCP pruža mehanizam kojim pošiljatelj kontrolira količinu poslanih podataka na temelju stvarnog kapaciteta prijema primatelja, što je poznato kao kontrola protoka. Primatelj održava prozor za primanje, dok pošiljatelj održava prozor za slanje. Treba napomenuti da su ovi prozori samo za jednu TCP vezu i da ne dijele sve veze prozor.
TCP omogućuje kontrolu protoka korištenjem varijable za prozor prijema. Prozor prijema daje pošiljatelju indikaciju koliko je prostora u predmemoriji još dostupno. Pošiljatelj kontrolira količinu poslanih podataka prema stvarnom kapacitetu prijema primatelja.
Prijemno računalo obavještava pošiljatelja o veličini podataka koje može primiti, a pošiljatelj šalje podatke do tog ograničenja. To ograničenje je veličina prozora, sjećate li se TCP zaglavlja? Postoji polje prozora primanja koje se koristi za označavanje broja bajtova koje primatelj može ili želi primiti.
Pošiljatelj će periodički slati paket za probni prozor koji se koristi za otkrivanje može li primatelj još uvijek prihvatiti podatke. Kada postoji opasnost od prepunjenosti međuspremnika primatelja, veličina prozora postavlja se na manju vrijednost kako bi se pošiljatelju dalo uputu da kontrolira količinu poslanih podataka.
Evo dijagrama upravljanja protokom mreže:
Kontrola zagušenja mreže
Prije uvođenja kontrole zagušenja, moramo razumjeti da uz prozor za primanje i prozor za slanje postoji i prozor zagušenja, koji se uglavnom koristi za rješavanje problema kojom brzinom pošiljatelj počinje slati podatke u prozor za primanje. Stoga, prozor zagušenja održava i TCP pošiljatelj. Potreban nam je algoritam koji će odlučiti koliko je podataka prikladno poslati, budući da slanje premalo ili previše podataka nije idealno, otuda i koncept prozora zagušenja.
U prethodnoj kontroli protoka mreže, ono što smo izbjegavali bilo je da pošiljatelj puni predmemoriju primatelja podacima, ali nismo znali što se događa u mreži. Računalne mreže se obično nalaze u dijeljenom okruženju. Kao rezultat toga, može doći do zagušenja mreže zbog komunikacije između drugih hostova.
Kada je mreža preopterećena, ako se nastavi slati veliki broj paketa, to može uzrokovati probleme poput kašnjenja i gubitka paketa. U ovom trenutku, TCP će ponovno poslati podatke, ali ponovni prijenos će povećati opterećenje mreže, što će rezultirati većim kašnjenjima i gubitkom paketa. To može ući u začarani krug i nastaviti se povećavati.
Dakle, TCP ne može ignorirati što se događa na mreži. Kada je mreža preopterećena, TCP se žrtvuje smanjenjem količine podataka koje šalje.
Stoga se predlaže kontrola zagušenja, koja ima za cilj izbjeći popunjavanje cijele mreže podacima od pošiljatelja. Kako bi se regulirala količina podataka koje pošiljatelj treba poslati, TCP definira koncept nazvan prozor zagušenja. Algoritam kontrole zagušenja prilagodit će veličinu prozora zagušenja prema stupnju zagušenja mreže, kako bi kontrolirao količinu podataka koje šalje pošiljatelj.
Što je prozor zagušenja? Kakve to veze ima s prozorom slanja?
Prozor zagušenja je varijabla stanja koju održava pošiljatelj i koja određuje količinu podataka koju pošiljatelj može poslati. Prozor zagušenja dinamički se mijenja ovisno o razini zagušenja mreže.
Prozor slanja je dogovorena veličina prozora između pošiljatelja i primatelja koja označava količinu podataka koju primatelj može primiti. Prozor zagušenja i prozor slanja su povezani; prozor slanja obično je jednak minimumu prozora zagušenja i prijema, tj. swnd = min(cwnd, rwnd).
Prozor zagušenja cwnd mijenja se na sljedeći način:
Ako nema zagušenja u mreži, tj. ne dođe do isteka vremena ponovnog slanja, prozor zagušenja se povećava.
Ako postoji zagušenje u mreži, prozor zagušenja se smanjuje.
Pošiljatelj utvrđuje je li mreža preopterećena promatranjem je li ACK paket potvrde primljen unutar određenog vremena. Ako pošiljatelj ne primi ACK paket potvrde unutar određenog vremena, smatra se da je mreža preopterećena.
Uz prozor zagušenja, vrijeme je da raspravimo o algoritmu za kontrolu zagušenja TCP-a. Algoritam za kontrolu zagušenja TCP-a sastoji se od tri glavna dijela:
Spori početak:U početku je prozor zagušenja cwnd-a relativno malen, a pošiljatelj eksponencijalno povećava prozor zagušenja kako bi se brzo prilagodio kapacitetu mreže.
Izbjegavanje zagušenja:Nakon što prozor zagušenja prijeđe određeni prag, pošiljatelj linearno povećava prozor zagušenja kako bi usporio stopu rasta prozora zagušenja i izbjegao preopterećenje mreže.
Brzi oporavak:Ako dođe do zagušenja, pošiljatelj prepolovi prozor zagušenja i ulazi u stanje brzog oporavka kako bi odredio lokaciju oporavka mreže putem primljenih dupliciranih potvrda, a zatim nastavlja povećavati prozor zagušenja.
Spori početak
Kada se uspostavi TCP veza, prozor zagušenja cwnd inicijalno se postavlja na minimalnu vrijednost MSS (maksimalna veličina segmenta). Na taj način, početna brzina slanja je otprilike MSS/RTT bajtova/sekundi. Stvarna dostupna propusnost obično je mnogo veća od MSS/RTT, pa TCP želi pronaći optimalnu brzinu slanja, što se može postići sporim pokretanjem.
U procesu sporog pokretanja, vrijednost prozora zagušenja cwnd bit će inicijalizirana na 1 MSS, i svaki put kada se potvrdi prijenos segmenta paketa, vrijednost cwnd će se povećati za jedan MSS, odnosno vrijednost cwnd će postati 2 MSS. Nakon toga, vrijednost cwnd se udvostručuje za svaki uspješan prijenos segmenta paketa i tako dalje. Specifičan proces rasta prikazan je na sljedećoj slici.
Međutim, stopa slanja ne može uvijek rasti; rast se nekad mora završiti. Dakle, kada prestaje povećanje stope slanja? Sporo pokretanje obično prekida povećanje stope slanja na jedan od nekoliko načina:
Prvi način je slučaj gubitka paketa tijekom procesa slanja kod sporog pokretanja. Kada dođe do gubitka paketa, TCP postavlja prozor zagušenja pošiljatelja cwnd na 1 i ponovno pokreće proces sporog pokretanja. U ovom trenutku uvodi se koncept praga sporog pokretanja ssthresh, čija je početna vrijednost polovica vrijednosti cwnd koja generira gubitak paketa. To jest, kada se otkrije zagušenje, vrijednost ssthresh je polovica vrijednosti prozora.
Drugi način je izravna korelacija s vrijednošću praga sporog pokretanja ssthresh. Budući da je vrijednost ssthresh polovica vrijednosti prozora kada se otkrije zagušenje, gubitak paketa može se dogoditi sa svakim udvostručenjem kada je cwnd veći od ssthresh. Stoga je najbolje postaviti cwnd na ssthresh, što će uzrokovati da TCP pređe u način rada kontrole zagušenja i prekine sporo pokretanje.
Posljednji način na koji se spori početak može završiti jest ako se otkriju tri redundantna ack-a, TCP izvršava brzi ponovni prijenos i ulazi u stanje oporavka. (Ako nije jasno zašto postoje tri ACK paketa, to će biti objašnjeno zasebno u mehanizmu ponovnog prijenosa.)
Izbjegavanje zagušenja
Kada TCP uđe u stanje kontrole zagušenja, cwnd se postavlja na polovicu praga zagušenja ssthresh. To znači da se vrijednost cwnd ne može udvostručiti svaki put kada se primi segment paketa. Umjesto toga, usvaja se relativno konzervativan pristup u kojem se vrijednost cwnd povećava za samo jedan MSS (maksimalna duljina segmenta paketa) nakon što je svaki prijenos završen. Na primjer, čak i ako se potvrdi 10 segmenata paketa, vrijednost cwnd će se povećati samo za jedan MSS. Ovo je linearni model rasta i također ima gornju granicu rasta. Kada dođe do gubitka paketa, vrijednost cwnd se mijenja u MSS, a vrijednost ssthresh se postavlja na polovicu cwnd. Ili će se također zaustaviti rast MSS-a kada se prime 3 redundantna ACK odgovora. Ako se i dalje prime tri redundantna ACK-a nakon prepolovljavanja vrijednosti cwnd, vrijednost ssthresh se bilježi kao polovica vrijednosti cwnd i ulazi se u stanje brzog oporavka.
Brzi oporavak
U stanju brzog oporavka, vrijednost prozora zagušenja cwnd povećava se za jedan MSS za svaki primljeni redundantni ACK, odnosno ACK koji ne stiže u nizu. To se radi kako bi se iskoristili segmenti paketa koji su uspješno preneseni u mreži kako bi se što više poboljšala učinkovitost prijenosa.
Kada stigne ACK za izgubljeni segment paketa, TCP smanjuje vrijednost cwnd i zatim ulazi u stanje izbjegavanja zagušenja. To služi za kontrolu veličine prozora zagušenja i izbjegavanje daljnjeg povećanja zagušenja mreže.
Ako dođe do isteka vremena nakon stanja kontrole zagušenja, stanje mreže postaje ozbiljnije i TCP prelazi iz stanja izbjegavanja zagušenja u stanje sporog pokretanja. U ovom slučaju, vrijednost prozora zagušenja cwnd postavljena je na 1 MSS, maksimalna duljina segmenta paketa, a vrijednost praga sporog pokretanja ssthresh postavljena je na polovicu cwnd. Svrha ovoga je postupno povećavati veličinu prozora zagušenja nakon što se mreža oporavi kako bi se uravnotežila brzina prijenosa i stupanj zagušenja mreže.
Sažetak
Kao pouzdan transportni protokol, TCP implementira pouzdan transport pomoću slijednog broja, potvrde, kontrole ponovnog slanja, upravljanja vezom i kontrole prozora. Među njima, mehanizam kontrole protoka kontrolira količinu podataka koje šalje pošiljatelj prema stvarnom kapacitetu prijema prijemnika, što izbjegava probleme zagušenja mreže i degradacije performansi. Mehanizam kontrole zagušenja izbjegava pojavu zagušenja mreže prilagođavanjem količine podataka koje šalje pošiljatelj. Koncepti prozora zagušenja i prozora slanja međusobno su povezani, a količina podataka kod pošiljatelja kontrolira se dinamičkim podešavanjem veličine prozora zagušenja. Spori početak, izbjegavanje zagušenja i brzi oporavak tri su glavna dijela TCP algoritma kontrole zagušenja, koji prilagođavaju veličinu prozora zagušenja kroz različite strategije kako bi se prilagodili kapacitetu i stupnju zagušenja mreže.
U sljedećem odjeljku detaljno ćemo ispitati TCP-ov mehanizam ponovnog prijenosa. Mehanizam ponovnog prijenosa važan je dio TCP-a za postizanje pouzdanog prijenosa. Osigurava pouzdan prijenos podataka ponovnim prijenosom izgubljenih, oštećenih ili zakašnjelih podataka. Princip implementacije i strategija mehanizma ponovnog prijenosa bit će predstavljeni i detaljno analizirani u sljedećem odjeljku. Ostanite s nama!
Vrijeme objave: 24. veljače 2025.