TCPren arma sekretua: Sarearen Fluxuaren Kontrola eta Sarearen Kongestioaren Kontrola

TCP Fidagarritasun Garraioa
Denok dakigu TCP protokoloa garraio-protokolo fidagarri gisa, baina nola bermatzen du garraioaren fidagarritasuna?

Transmisio fidagarria lortzeko, faktore asko kontuan hartu behar dira, hala nola datuen hondatzea, galera, bikoiztasuna eta ordenatik kanpo dauden zatiak. Arazo hauek konpondu ezin badira, ezin da transmisio fidagarria lortu.

Beraz, TCP-k sekuentzia-zenbakia, baieztapen-erantzun, birbidaltze-kontrola, konexio-kudeaketa eta leiho-kontrola bezalako mekanismoak erabiltzen ditu transmisio fidagarria lortzeko.

Artikulu honetan, TCPren leiho irristagarrian, fluxu-kontrolean eta kongestio-kontrolean zentratuko gara. Birtransmisio-mekanismoa hurrengo atalean bereizita landuko da.

Sarearen fluxuaren kontrola
Sarearen Fluxuaren Kontrola edo Sarearen Trafikoaren Kontrola bezala ezagutzen dena, ekoizleen eta kontsumitzaileen arteko harreman sotilaren adierazpena da. Seguruenik, egoera hau askotan ikusi duzu lanean edo elkarrizketetan. Ekoizlearen ekoizteko gaitasuna kontsumitzailearen kontsumitzeko gaitasuna baino askoz handiagoa bada, ilara mugagabe haziko da. Kasu larriago batean, jakingo duzu RabbitMQ mezuak gehiegi pilatzen direnean, MQ zerbitzari osoaren errendimenduaren hondatzea eragin dezakeela. Gauza bera gertatzen da TCPrekin; kontrolatzen ez bada, mezu gehiegi sartuko dira sarean, eta kontsumitzaileek beren gaitasuna gaindituko dute, ekoizleek, berriz, mezu bikoiztuak bidaltzen jarraituko dute, eta horrek sarearen errendimenduan eragin handia izango du.

Fenomeno honi aurre egiteko, TCP-k igorleari bidalitako datu kopurua kontrolatzeko mekanismo bat eskaintzen dio, hartzailearen benetako harrera-ahalmenaren arabera, eta horri fluxu-kontrola deritzo. Hartzaileak harrera-leiho bat mantentzen du, eta igorleak, berriz, bidalketa-leiho bat. Kontuan izan behar da leiho hauek TCP konexio bakar baterako direla eta konexio guztiek ez dutela leiho bat partekatzen.

TCP-k fluxu-kontrola eskaintzen du harrera-leiho baterako aldagai bat erabiliz. Harrera-leihoak bidaltzaileari adierazten dio zenbat cache espazio dagoen oraindik eskuragarri. Bidaltzaileak bidalitako datu kopurua kontrolatzen du hartzailearen benetako onarpen-ahalmenaren arabera.

Hartzailearen ostalariak bidaltzaileari jaso ditzakeen datuen tamaina jakinarazten dio, eta bidaltzaileak muga horretara arte bidaltzen du. Muga hau leihoaren tamaina da, gogoratzen duzu TCP goiburua? Jasotzeko leihoaren eremu bat dago, hartzaileak jaso ditzakeen edo jaso nahi dituen byte kopurua adierazteko erabiltzen dena.

Bidaltzailearen ostalariak aldian-aldian leiho-zunda pakete bat bidaliko du, hartzailearen ostalariak datuak oraindik onartzeko gai den ala ez detektatzeko erabiltzen dena. Hartzailearen bufferra gainezka egiteko arriskuan dagoenean, leihoaren tamaina balio txikiago batera ezartzen da bidaltzaileari bidalitako datu kopurua kontrolatzeko argibideak emateko.

Hona hemen sareko fluxu-kontrolaren diagrama:

Trafiko Kontrola

Sarearen pilaketen kontrola
Kongestio-kontrola aurkeztu aurretik, ulertu behar dugu harrera-leihoaz eta bidalketa-leihoaz gain, kongestio-leiho bat ere badagoela, eta hau batez ere bidaltzaileak harrera-leihoari datuak bidaltzen hasten den abiaduraren arazoa konpontzeko erabiltzen da. Beraz, kongestio-leihoa TCP bidaltzaileak ere mantentzen du. Algoritmo bat behar dugu bidaltzeko zenbat datu den egokia erabakitzeko, datu gutxiegi edo gehiegi bidaltzea ez baita aproposa, hortik dator kongestio-leihoaren kontzeptua.

Aurreko sare-fluxuaren kontrolean, saihestu genuena igorleak hartzailearen katxea datuekin betetzea zen, baina ez genekien zer gertatzen zen sarean. Normalean, ordenagailu-sareak ingurune partekatu batean daude. Ondorioz, sare-pilaketak egon daitezke beste ostalarien arteko komunikazioagatik.

Sarea pilatuta dagoenean, pakete kopuru handia bidaltzen jarraitzen bada, arazoak sor daitezke, hala nola atzerapenak eta paketeen galera. Puntu honetan, TCP-k datuak berriro transmitituko ditu, baina birtransmisioak sarearen zama handituko du, atzerapen handiagoak eta paketeen galera gehiago eraginez. Honek ziklo zital batean sartu eta handiagoa izan daiteke.

Beraz, TCP-k ezin du sarean gertatzen ari dena alde batera utzi. Sarea pilatuta dagoenean, TCP-k bere burua sakrifikatzen du bidaltzen duen datu kopurua murriztuz.

Beraz, pilaketa-kontrola proposatzen da, sare osoa igorlearen datuekin betetzea saihesteko helburuarekin. Igorleak bidali behar duen datu kopurua erregulatzeko, TCP-k pilaketa-leiho izeneko kontzeptua definitzen du. Pilaketa-kontrol algoritmoak pilaketa-leihoaren tamaina sarearen pilaketa-mailaren arabera egokituko du, igorleak bidalitako datu kopurua kontrolatzeko.

Zer da pilaketa-leiho bat? Zer zerikusi du honek bidalketa-leihoarekin?

Kongestio Leihoa igorleak mantentzen duen egoera aldagai bat da, eta igorleak bidali dezakeen datu kopurua zehazten du. Kongestio leihoa dinamikoki aldatzen da sarearen kongestio mailaren arabera.

Bidalketa Leihoa igorlearen eta hartzailearen artean adostutako leiho-tamaina da, hartzaileak jaso dezakeen datu kopurua adierazten duena. Kongestio-leihoa eta bidalketa-leihoa erlazionatuta daude; bidalketa-leihoa normalean kongestio-leihoaren eta hartzailearen leihoaren minimoaren berdina da, hau da, swnd = min(cwnd, rwnd).

Kongestio-leihoaren cwnd-a honela aldatzen da:

Sarean pilaketarik ez badago, hau da, birtransmisio-denborarik ez badago, pilaketa-leihoa handitu egiten da.

Sarean pilaketa badago, pilaketa-leihoa txikitu egiten da.

Bidaltzaileak sarea kongestionatuta dagoen zehazten du ACK baieztapen paketea zehaztutako denboran jasotzen den ala ez behatuz. Bidaltzaileak ACK baieztapen paketea zehaztutako denboran jasotzen ez badu, sarea kongestionatuta dagoela uste da.

Kongestio-leihoaz gain, TCP kongestio-kontrol algoritmoa eztabaidatzeko garaia da. TCP kongestio-kontrol algoritmoak hiru zati nagusi ditu:

Hasiera motela:Hasieran, cwnd kongestio-leihoa nahiko txikia da, eta igorleak kongestio-leihoa esponentzialki handitzen du sarearen edukierara azkar egokitzeko.
Pilaketak saihestea:Kongestio-leihoak atalase jakin bat gainditu ondoren, igorleak kongestio-leihoa modu linealean handitzen du kongestio-leihoaren hazkunde-tasa moteltzeko eta sarea gainkargatzea saihesteko.
Berreskuratze azkarra:Kongestioa gertatzen bada, igorleak kongestio-leihoa erdira murrizten du eta berreskuratze azkarreko egoeran sartzen da sarearen berreskurapenaren kokapena zehazteko, jasotako baieztapen bikoiztuen bidez, eta ondoren kongestio-leihoa handitzen jarraitzen du.

Hasiera motela
TCP konexio bat ezartzen denean, cwnd pilaketa-leihoa hasieran MSS (segmentuaren tamaina maximoa) balio minimo batera ezartzen da. Horrela, hasierako bidalketa-tasa MSS/RTT byte/segundo ingurukoa da. Eskuragarri dagoen banda-zabalera MSS/RTT baino askoz handiagoa izan ohi da, beraz, TCP-k bidalketa-tasa optimoa aurkitu nahi du, eta hori abiarazte motelaren bidez lor daiteke.

Abiarazte moteleko prozesuan, cwnd pilaketa-leihoaren balioa 1 MSS-ra hasieratuko da, eta transmititutako pakete-segmentua onartzen den bakoitzean, cwnd-ren balioa MSS bat handituko da, hau da, cwnd-ren balioa 2 MSS bihurtuko da. Ondoren, cwnd-ren balioa bikoiztu egiten da pakete-segmentu baten transmisio arrakastatsu bakoitzeko, eta abar. Hazkunde-prozesu espezifikoa hurrengo irudian erakusten da.

 Sarearen pilaketa-kontrola

Hala ere, bidalketa-tasa ezin da beti hazi; hazkundea noizbait amaitu behar da. Beraz, noiz amaitzen da bidalketa-tasaren igoera? Hasiera motelak normalean bidalketa-tasaren igoera hainbat modutan amaitzen du:

Lehenengo bidea hasiera moteleko bidalketa prozesuan zehar paketeen galera da. Paketeen galera gertatzen denean, TCP-k igorlearen kongestio-leihoa cwnd 1era ezartzen du eta hasiera moteleko prozesua berrabiarazten du. Puntu honetan, hasiera moteleko atalasearen kontzeptua, ssthresh, aurkezten da, zeinaren hasierako balioa paketeen galera sortzen duen cwnd-ren balioaren erdia den. Hau da, kongestioa detektatzen denean, ssthresh-ren balioa leihoaren balioaren erdia da.

Bigarren bidea ssthresh abiarazte motelaren atalasearen balioarekin zuzenean korrelazionatzea da. ssthresh-en balioa leihoaren balioaren erdia denez pilaketa detektatzen denean, paketeen galera gerta daiteke bikoizketa bakoitzean cwnd ssthresh baino handiagoa denean. Beraz, hobe da cwnd ssthresh-era ezartzea, horrek TCP pilaketa kontrol modura aldatzea eta abiarazte motela amaitzea eragingo baitu.

Hasiera motela amaitzeko azken modua hiru ACK erredundante detektatzen badira, TCP-k birtransmisio azkarra egiten du eta berreskuratze egoeran sartzen da. (Hiru ACK pakete zergatik dauden argi ez badago, birtransmisio mekanismoan azalduko da bereizita.)

Pilaketak saihestea
TCP pilaketa-kontrol egoeran sartzen denean, cwnd pilaketa-atalasearen ssthresh erdira ezartzen da. Horrek esan nahi du cwnd-en balioa ezin dela bikoiztu pakete-segmentu bat jasotzen den bakoitzean. Horren ordez, ikuspegi nahiko kontserbadorea hartzen da, non cwnd-en balioa MSS bat bakarrik handitzen den (pakete-segmentuaren luzera maximoa) transmisio bakoitza amaitu ondoren. Adibidez, 10 pakete-segmentu onartu arren, cwnd-en balioa MSS bat bakarrik handituko da. Hazkunde-eredu lineala da hau eta hazkundearen goiko muga bat ere badu. Pakete-galera gertatzen denean, cwnd-en balioa MSS batera aldatzen da, eta ssthresh-en balioa cwnd-en erdira ezartzen da. Edo MSS-en hazkundea ere geldituko du 3 ACK erantzun erredundante jasotzen direnean. Cwnd-en balioa erdira murriztu ondoren hiru ACK erredundante jasotzen badira oraindik, ssthresh-en balioa cwnd-en balioaren erdi gisa erregistratzen da eta berreskuratze azkarreko egoerara sartzen da.

Berreskuratze azkarra
Berreskuratze Azkarraren egoeran, cwnd pilaketa-leihoaren balioa MSS bat handitzen da jasotako ACK erredundante bakoitzeko, hau da, sekuentzian iristen ez den ACK bakoitzeko. Horrela, sarean behar bezala transmititu diren pakete-segmentuak erabili nahi dira transmisio-eraginkortasuna ahalik eta gehien hobetzeko.

Galdutako pakete-segmentuaren ACK bat iristen denean, TCP-k cwnd-ren balioa gutxitzen du eta ondoren pilaketak saihesteko egoeran sartzen da. Honek pilaketa-leihoaren tamaina kontrolatzen du eta sareko pilaketak gehiago handitzea saihesten du.

Kongestio-kontrol egoeraren ondoren denbora-muga bat gertatzen bada, sarearen egoera larriagoa bihurtzen da eta TCP kongestioa saihesteko egoeratik abiarazte moteleko egoerara migratzen da. Kasu honetan, kongestio-leihoaren cwnd balioa 1 MSS-tan ezartzen da, pakete-segmentuaren gehienezko luzera eta abiarazte moteleko atalasearen ssthresh balioa cwnd-ren erdian ezartzen da. Honen helburua kongestio-leihoaren tamaina pixkanaka handitzea da sarea berreskuratu ondoren, transmisio-tasa eta sareko kongestio-maila orekatzeko.

Laburpena
Garraio-protokolo fidagarri gisa, TCPk garraio fidagarria ezartzen du sekuentzia-zenbakiaren, aitorpenaren, birtransmisio-kontrolaren, konexio-kudeaketaren eta leiho-kontrolaren bidez. Horien artean, fluxu-kontrol mekanismoak igorleak bidalitako datu-kopurua kontrolatzen du hartzailearen benetako harrera-ahalmenaren arabera, sare-kongestioaren eta errendimenduaren degradazioaren arazoak saihesten ditu. Kongestio-kontrol mekanismoak sare-kongestioa gertatzea saihesten du igorleak bidalitako datu-kopurua doituz. Kongestio-leihoaren eta bidalketa-leihoaren kontzeptuak elkarren artean lotuta daude, eta igorlean dagoen datu-kopurua kontrolatzen da kongestio-leihoaren tamaina dinamikoki doituz. Hasiera motela, kongestioa saihestea eta berreskuratze azkarra dira TCP kongestio-kontrol algoritmoaren hiru atal nagusiak, eta kongestio-leihoaren tamaina estrategia desberdinen bidez doitzen dute sarearen edukierara eta kongestio-mailara egokitzeko.

Hurrengo atalean, TCPren birtransmisio-mekanismoa xehetasunez aztertuko dugu. Birtransmisio-mekanismoa TCPren zati garrantzitsua da transmisio fidagarria lortzeko. Datuen transmisio fidagarria bermatzen du galdutako, hondatutako edo atzeratutako datuak birtransmitituz. Birtransmisio-mekanismoaren inplementazio-printzipioa eta estrategia hurrengo atalean aurkeztu eta aztertuko dira xehetasunez. Egon adi!


Argitaratze data: 2025eko otsailaren 24a