TCP áreiðanleikaflutningur
Við þekkjum öll TCP-samskiptareglur sem áreiðanlegar flutningsreglur, en hvernig tryggir hún áreiðanleika flutningsins?
Til að ná áreiðanlegri sendingu þarf að hafa marga þætti í huga, svo sem gagnatap, tvítekningu og gagnasöfnun. Ef ekki er hægt að leysa þessi vandamál er ekki hægt að ná áreiðanlegri sendingu.
Þess vegna notar TCP aðferðir eins og raðnúmer, staðfestingarsvar, endursendingarstýringu, tengingarstjórnun og gluggastýringu til að ná áreiðanlegri sendingu.
Í þessari grein munum við einbeita okkur að renniglugganum, flæðistýringunni og stjórnun á tengingu í TCP. Endursendingarferlið er fjallað um sérstaklega í næsta kafla.
Netflæðisstýring
Netflæðisstýring eða þekkt sem netumferðarstýring er í raun birtingarmynd af lúmskum samskiptum framleiðenda og neytenda. Þú hefur líklega rekist á þetta atburðarás oft í vinnunni eða í viðtölum. Ef framleiðslugeta framleiðanda er miklu meiri en neyslugeta neytandans, mun það valda því að biðröðin lengist endalaust. Í alvarlegri tilfellum gætirðu vitað að þegar RabbitMQ skilaboð safnast upp of mikið getur það valdið afköstumatrunum á öllum MQ netþjóninum. Hið sama á við um TCP; ef ekkert er að gert verða of mörg skilaboð sett inn á netið og neytendurnir hafa farið fram úr afkastagetu sinni, á meðan framleiðendurnir halda áfram að senda afrit af skilaboðum, sem mun hafa mikil áhrif á afköst netsins.
Til að bregðast við þessu fyrirbæri býður TCP upp á aðferð sem sendandi getur notað til að stjórna magni gagna sem send eru út frá raunverulegri móttökugetu viðtakandans, sem kallast flæðistýring. Viðtakandinn viðheldur móttökuglugga en sendandinn viðheldur sendiglugga. Athuga skal að þessir gluggar eru aðeins fyrir eina TCP-tengingu og ekki allar tengingar deila glugga.
TCP býður upp á flæðisstýringu með því að nota breytu fyrir móttökuglugga. Móttökuglugginn gefur sendanda vísbendingu um hversu mikið skyndiminni er enn laust. Sendandi stýrir magni gagna sem send eru í samræmi við raunverulega móttökugetu móttakandans.
Móttökugestgjafinn tilkynnir sendanda um stærð gagna sem hann getur móttekið og sendandinn sendir allt að þessum mörkum. Þessi mörk eru gluggastærðin, manstu eftir TCP hausnum? Þar er reitur fyrir móttökuglugga sem er notaður til að gefa til kynna fjölda bæta sem móttakandinn getur eða vill taka á móti.
Sendandi hýsir reglulega gluggakönnunarpakka, sem er notaður til að greina hvort móttakandi hýsir geti enn tekið við gögnum. Þegar biðminni móttakanda er í hættu á að flæða yfir er gluggastærðin stillt á minna gildi til að fyrirskipa sendanda að stjórna magni gagna sem send eru.
Hér er skýringarmynd af netflæðisstýringu:
Stjórnun á netþrengsli
Áður en við kynnum stjórnun á umferðarþunga þurfum við að skilja að auk móttökugluggans og sendigluggans er einnig umferðarþungagluggi, sem er aðallega notaður til að leysa vandamálið um á hvaða hraða sendandinn byrjar að senda gögn til móttökugluggans. Þess vegna er umferðarþungaglugginn einnig viðhaldinn af TCP sendandanum. Við þurfum reiknirit til að ákveða hversu mikið af gögnum er viðeigandi að senda, þar sem að senda of lítið eða of mikið af gögnum er ekki tilvalið, þaðan kemur hugmyndin um umferðarþungaglugga.
Í fyrri flæðistýringu netsins forðumst við að sendandi fyllti skyndiminni móttakanda af gögnum, en við vissum ekki hvað var að gerast í netinu. Venjulega eru tölvunet í sameiginlegu umhverfi. Þar af leiðandi getur verið netþrengsli vegna samskipta milli annarra hýsingaraðila.
Þegar netið er yfirhlaðið og haldið er áfram að senda mikið magn pakka getur það valdið vandamálum eins og töfum og pakkatapi. Á þessum tímapunkti mun TCP endursenda gögnin, en endursendingin mun auka álagið á netið, sem leiðir til meiri tafa og meira pakkataps. Þetta getur lent í vítahring og haldið áfram að versna.
Þannig getur TCP ekki hunsað það sem er að gerast á netinu. Þegar netið er yfirhlaðið fórnar TCP sér með því að minnka magn gagna sem það sendir.
Þess vegna er lagt til að stjórna umferðarþunga, sem miðar að því að forðast að fylla allt netið af gögnum frá sendanda. Til að stjórna magni gagna sem sendandinn ætti að senda skilgreinir TCP hugtak sem kallast umferðargluggi. Reikniritið fyrir umferðarstýringu mun aðlaga stærð umferðargluggans í samræmi við umferðarstig netsins, til að stjórna magni gagna sem sendandinn sendir.
Hvað er umferðargluggi? Hvað hefur þetta með sendingargluggann að gera?
Þrengingarglugginn er stöðubreyta sem sendandi heldur utan um og ákvarðar magn gagna sem sendandi getur sent. Þrengingarglugginn breytist breytilega eftir því hversu mikil þrengingar eru í netkerfinu.
Sendingarglugginn er samkomulag um stærð glugga sem sendandi og móttakandi hafa um það magn gagna sem móttakandi getur tekið á móti. Þrengingaglugginn og sendiglugginn eru tengdir; sendiglugginn er venjulega jafn lágmarki þrengingar- og móttökugluggans, þ.e. swnd = min(cwnd, rwnd).
Glugginn fyrir umferðarteppun (cwnd) breytist sem hér segir:
Ef engin umferðarteppa er á netinu, þ.e. ef enginn tímamörk á endursendingu verða, þá eykst umferðarteppuglugginn.
Ef umferðarteppur eru á netinu þá minnkar umferðarteppuglugginn.
Sendandi ákvarðar hvort netið sé stíflað með því að athuga hvort staðfestingarpakkinn fyrir ACK berst innan tilgreinds tíma. Ef sendandi fær ekki staðfestingarpakkann fyrir ACK innan tilgreinds tíma er talið að netið sé stíflað.
Auk þess að ræða um umferðarþrengingargluggann er kominn tími til að ræða TCP umferðarstýringarreikniritið. TCP umferðarstýringarreikniritið samanstendur af þremur meginhlutum:
Hæg byrjun:Í upphafi er umferðarglugginn fyrir cwnd tiltölulega lítill og sendandinn eykur umferðargluggann veldishraða til að aðlagast fljótt afkastagetu netsins.
Að forðast umferðarteppu:Eftir að umferðarþungaglugginn fer yfir ákveðið þröskuld eykur sendandinn umferðarþungagluggann línulega til að hægja á vexti hans og forðast ofhleðslu á netið.
Hröð bataferli:Ef umferðarteppur eiga sér stað, helmingar sendandinn umferðarteppugluggann og fer í hraðbataástand til að ákvarða staðsetningu netbatans í gegnum móttekin tvítekin tilkynningar og heldur síðan áfram að auka umferðarteppugluggann.
Hæg byrjun
Þegar TCP-tenging er komið á er umferðarglugginn cwnd upphaflega stilltur á lágmarks MSS (hámarksstærð segments). Þannig er upphafleg sendihraði um það bil MSS/RTT bæti/sekúndu. Raunveruleg tiltæk bandvídd er venjulega miklu meiri en MSS/RTT, þannig að TCP vill finna bestu sendihraðann, sem hægt er að ná með hægfara ræsingu.
Í hægfara ferlinu verður gildi umferðargluggans cwnd upphafsstillt á 1 MSS, og í hvert skipti sem sendur pakkahluti er staðfestur, verður gildi cwnd aukið um eitt MSS, þ.e. gildi cwnd verður 2 MSS. Eftir það er gildi cwnd tvöfaldað fyrir hverja vel heppnaða sendingu pakkahluta, og svo framvegis. Sértæka vaxtarferlið er sýnt á eftirfarandi mynd.
Hins vegar getur sendingartíðnin ekki alltaf aukist; vöxturinn verður að enda einhvern tímann. Hvenær endar þá aukningin á sendingartíðninni? Hægfara byrjun lýkur yfirleitt aukningu sendingartíðninnar á einn af nokkrum vegu:
Fyrsta leiðin er þegar pakkatap á sér stað við hæga ræsingu. Þegar pakkatap á sér stað stillir TCP umferðarþröskuld sendanda, cwnd, á 1 og endurræsir hæga ræsingarferlið. Á þessum tímapunkti er kynnt hugtakið hæga ræsingarþröskuldur, ssthresh, þar sem upphafsgildi hans er helmingur af gildinu á cwnd sem veldur pakkatapi. Það er að segja, þegar umferðarþröskuldur greinist er gildi ssthresh helmingur af gildi gluggans.
Önnur leiðin er að tengja beint við gildi ssthresh fyrir hægfara ræsingu. Þar sem gildi ssthresh er helmingur af gluggagildinu þegar umferðarteppu greinist, getur pakkatap átt sér stað við hverja tvöföldun þegar cwnd er stærra en ssthresh. Þess vegna er best að stilla cwnd á ssthresh, sem veldur því að TCP skiptir yfir í umferðarteppustýringarham og lýkur hægfara ræsingu.
Síðasta leiðin sem hægt ræsingarferli getur endað er ef þrjár afrit af ACK-pökkum greinast, TCP framkvæmir hraða endursendingu og fer í endurheimtarástand. (Ef það er ekki ljóst hvers vegna það eru þrjár ACK-pakkar, verður það útskýrt sérstaklega í endursendingarferlinu.)
Forvarnir gegn umferðarteppu
Þegar TCP fer í stjórnstöðu fyrir umferðarteppu er cwnd stillt á helming umferðarteppuþröskuldsins ssthresh. Þetta þýðir að ekki er hægt að tvöfalda gildi cwnd í hvert skipti sem pakkahluti berst. Í staðinn er notuð tiltölulega íhaldssöm nálgun þar sem gildi cwnd er aðeins aukið um eitt MSS (hámarkslengd pakkahluta) eftir að hver sending er lokið. Til dæmis, jafnvel þótt 10 pakkahlutar séu staðfestir, mun gildi cwnd aðeins aukast um eitt MSS. Þetta er línulegt vaxtarlíkan og það hefur einnig efri mörk á vexti. Þegar pakkatap á sér stað er gildi cwnd breytt í MSS og gildi ssthresh er stillt á helming af cwnd. Eða það mun einnig stöðva vöxt MSS þegar 3 afrit af ACK svörum berast. Ef þrjár afrit af ACK svörum berast enn eftir að gildi cwnd hefur verið helmingað, er gildi ssthresh skráð sem helmingur af gildi cwnd og hraðbataástandið er farið í.
Hraður bati
Í hraðbataástandi er gildi umferðargluggans cwnd aukið um eitt MSS fyrir hverja móttekna afritunar-ACK, þ.e. ACK sem berst ekki í réttri röð. Þetta er gert til að nýta pakkahlutana sem hafa verið sendir með góðum árangri í netkerfinu til að bæta flutningshagkvæmni eins mikið og mögulegt er.
Þegar staðfesting á týnda pakkahlutanum berst, lækkar TCP gildið á cwnd og fer síðan í ástand þar sem álagsvörn er möguleg. Þetta er gert til að stjórna stærð álagsgluggans og koma í veg fyrir frekari aukningu á netþrönginni.
Ef biðtími rennur út eftir að álagsstýringin er komin í ástandið versnar ástand netsins og TCP færist úr álagsforðun í hægfara ræsingu. Í þessu tilviki er gildi álagsgluggans cwnd stillt á 1 MSS, hámarkslengd pakkahluta, og gildi hægfara ræsingarþröskuldsins ssthresh er stillt á helminginn af cwnd. Tilgangurinn með þessu er að auka stærð álagsgluggans smám saman eftir að netið jafnar sig til að jafna flutningshraðann og umfang álagsins.
Yfirlit
Sem áreiðanleg flutningssamskiptaregla útfærir TCP áreiðanlegan flutning með raðnúmeri, staðfestingu, endursendingarstýringu, tengistjórnun og gluggastýringu. Meðal þeirra stýrir flæðistýringarkerfið magni gagna sem sendandi sendir í samræmi við raunverulega móttökugetu móttakandans, sem kemur í veg fyrir vandamál vegna netþrengsla og afköstatruflana. Þrengslustýringarkerfið kemur í veg fyrir netþrengsli með því að aðlaga magn gagna sem sendandi sendir. Hugtökin þrengslugluggi og sendigluggi tengjast hvert öðru og magn gagna hjá sendanda er stjórnað með því að aðlaga stærð þrengslugluggans á kraftmikinn hátt. Hæg byrjun, forðun þrengsla og hröð bati eru þrír meginþættir TCP þrengslustýringarreikniritsins, sem aðlaga stærð þrengslugluggans með mismunandi aðferðum til að aðlagast afkastagetu og þrengslustigi netsins.
Í næsta kafla munum við skoða endursendingarkerfi TCP í smáatriðum. Endursendingarkerfið er mikilvægur hluti af TCP til að ná áreiðanlegri sendingu. Það tryggir áreiðanlega gagnaflutning með því að endursenda týnd, skemmd eða seinkuð gögn. Meginreglan um framkvæmd og aðferð endursendingarkerfisins verður kynnt og greind í smáatriðum í næsta kafla. Verið vakandi!
Birtingartími: 24. febrúar 2025