TCP töökindluse transport
Me kõik tunneme TCP protokolli kui usaldusväärset transpordiprotokolli, aga kuidas see tagab transpordi usaldusväärsuse?
Usaldusväärse edastuse saavutamiseks tuleb arvestada paljude teguritega, näiteks andmete rikkumise, kadumise, dubleerimise ja vales järjekorras olevate osadega. Kui neid probleeme ei õnnestu lahendada, ei ole võimalik saavutada usaldusväärset edastust.
Seetõttu kasutab TCP usaldusväärse edastuse saavutamiseks selliseid mehhanisme nagu järjekorranumber, kinnitusvastus, uuesti saatmise kontroll, ühenduse haldamine ja aknakontroll.
Selles artiklis keskendume TCP libisevale aknale, voo juhtimisele ja ummikute juhtimisele. Edasikande mehhanismi käsitletakse eraldi järgmises osas.
Võrguvoo juhtimine
Võrguvoo juhtimine ehk võrguliikluse juhtimine on tegelikult tootjate ja tarbijate vahelise peene suhte ilming. Olete selle stsenaariumiga ilmselt tööl või intervjuudel palju kokku puutunud. Kui tootja tootmisvõimsus ületab oluliselt tarbija tarbimisvõimsust, põhjustab see järjekorra lõputut kasvu. Tõsisemal juhul võite teada, et kui RabbitMQ sõnumid kuhjuvad liiga palju, võib see põhjustada kogu MQ serveri jõudluse halvenemist. Sama kehtib ka TCP kohta; kui seda ei kontrollita, saadetakse võrku liiga palju sõnumeid ja tarbijad on oma võimsuse ületanud, samal ajal kui tootjad jätkavad duplikaatsõnumite saatmist, mis mõjutab oluliselt võrgu jõudlust.
Selle nähtuse lahendamiseks pakub TCP saatjale mehhanismi, mis võimaldab kontrollida saadetavate andmete hulka vastuvõtja tegeliku vastuvõtuvõime põhjal, mida nimetatakse andmevoo juhtimiseks. Vastuvõtjal on vastuvõtuaken, samal ajal kui saatjal on saatmisaken. Tuleb märkida, et need aknad on mõeldud ainult ühele TCP-ühendusele ja mitte kõik ühendused ei jaga akent.
TCP pakub andmevoo juhtimist, kasutades vastuvõtuakna jaoks muutujat. Vastuvõtuaken annab saatjale teada, kui palju vahemälu on veel saadaval. Saatja kontrollib saadetavate andmete hulka vastavalt vastuvõtja tegelikule vastuvõtuvõimele.
Vastuvõttev host teavitab saatjat vastuvõetavate andmete suurusest ja saatja saadab andmed selle piirini. See piirang on akna suurus, mäletate TCP päist? On olemas vastuvõtuakna väli, mida kasutatakse baitide arvu näitamiseks, mida vastuvõtja on võimeline või soovib vastu võtta.
Saatja host saadab perioodiliselt aknaproovi paketti, mida kasutatakse selleks, et tuvastada, kas vastuvõtja host on endiselt võimeline andmeid vastu võtma. Kui vastuvõtja puhver on ületäitumise ohus, määratakse akna suurus väiksemaks, et anda saatjale juhised saadetavate andmete hulga kontrollimiseks.
Siin on võrguvoo juhtimise diagramm:
Võrgu ülekoormuse kontroll
Enne ummikukontrolli tutvustamist peame mõistma, et lisaks vastuvõtuaknale ja saatmisaknale on olemas ka ummikuaken, mida kasutatakse peamiselt probleemi lahendamiseks, millise kiirusega hakkab saatja andmeid vastuvõtuaknasse saatma. Seega haldab ummikuakent ka TCP saatja. Vajame algoritmi, mis otsustaks, kui palju andmeid on asjakohane saata, kuna liiga vähese või liiga suure andmemahu saatmine pole ideaalne, sellest ka ummikuakna mõiste.
Eelmises võrguvoo juhtimises vältisime saatja poolt vastuvõtja vahemälu andmetega täitmist, kuid me ei teadnud, mis võrgus toimub. Tavaliselt asuvad arvutivõrgud jagatud keskkonnas. Selle tulemusena võib teiste hostide vahelise suhtluse tõttu tekkida võrgu ülekoormus.
Kui võrk on ülekoormatud ja suur hulk pakette saadetakse jätkuvalt, võib see põhjustada probleeme, nagu viivitused ja pakettide kadu. Sel hetkel saadab TCP andmed uuesti, kuid uuesti saatmine suurendab võrgu koormust, mille tulemuseks on suuremad viivitused ja rohkem pakettide kadu. See võib sattuda nõiaringi ja süveneda.
Seega ei saa TCP võrgus toimuvat ignoreerida. Kui võrk on ülekoormatud, ohverdab TCP ennast, vähendades saadetavate andmete hulka.
Seetõttu pakutakse välja ülekoormuse kontroll, mille eesmärk on vältida kogu võrgu täitumist saatja andmetega. Saatja saadetavate andmete hulga reguleerimiseks defineerib TCP kontseptsiooni, mida nimetatakse ülekoormuse aknaks. Ülekoormuse kontrolli algoritm reguleerib ülekoormuse akna suurust vastavalt võrgu ülekoormuse astmele, et kontrollida saatja saadetavate andmete hulka.
Mis on ülekoormuse aken? Mis on sellel pistmist saatmisaknaga?
Ülekoormuse aken on saatja hallatav olekumuutuja, mis määrab andmete hulga, mida saatja saab saata. Ülekoormuse aken muutub dünaamiliselt vastavalt võrgu ülekoormuse tasemele.
Saatmisaken on saatja ja vastuvõtja vahel kokkulepitud akna suurus, mis näitab andmemahtu, mida vastuvõtja saab vastu võtta. Ülekoormuse aken ja saatmisaken on omavahel seotud; saatmisaken on tavaliselt võrdne ülekoormuse ja vastuvõtuakna miinimumiga, st swnd = min(cwnd, rwnd).
Ülekoormuse aken cwnd muutub järgmiselt:
Kui võrgus ülekoormust ei esine, st uuesti saatmise ajalõpu ei toimu, siis ülekoormuse aken suureneb.
Kui võrgus on ummikuid, siis ummikuaken väheneb.
Saatja määrab võrgu ülekoormuse, jälgides, kas ACK-kinnituspakett laekub määratud aja jooksul. Kui saatja ei saa ACK-kinnituspaketti määratud aja jooksul kätte, loetakse võrk ülekoormatuks.
Lisaks ummikuaknale on aeg arutada TCP ummikukontrolli algoritmi. TCP ummikukontrolli algoritm koosneb kolmest põhiosast:
Aeglane algus:Algselt on cwnd ülekoormuse aken suhteliselt väike ja saatja suurendab ülekoormuse akent eksponentsiaalselt, et kiiresti võrgu läbilaskevõimega kohaneda.
Ummikute vältimine:Pärast seda, kui ülekoormuse aken ületab teatud läve, suurendab saatja ülekoormuse akent lineaarselt, et aeglustada ülekoormuse akna kasvukiirust ja vältida võrgu ülekoormamist.
Kiire taastumine:Ummiku tekkimisel vähendab saatja ummikuakna pikkust poole võrra ja siseneb kiire taastumise olekusse, et määrata vastuvõetud duplikaatkinnituste abil võrgu taastumise asukoht, ning seejärel jätkab ummikuakna pikendamist.
Aeglane algus
Kui TCP-ühendus luuakse, seatakse ülekoormuse akna cwnd esialgu minimaalsele MSS-i (maksimaalse segmendi suuruse) väärtusele. Sel viisil on esialgne saatmiskiirus umbes MSS/RTT baiti sekundis. Tegelik saadaolev ribalaius on tavaliselt palju suurem kui MSS/RTT, seega soovib TCP leida optimaalse saatmiskiiruse, mille saab saavutada aeglase käivitamise abil.
Aeglase käivituse protsessis initsialiseeritakse ülekoormuse akna cwnd väärtus 1 MSS-ile ja iga kord, kui edastatud paketi segmendi vastuvõtt kinnitatakse, suureneb cwnd väärtus ühe MSS-i võrra, st cwnd väärtus saab 2 MSS-i. Pärast seda kahekordistatakse cwnd väärtus iga paketi segmendi eduka edastamise korral jne. Spetsiifiline kasvuprotsess on näidatud järgmisel joonisel.
Siiski ei saa saatmiskiirus alati kasvada; kasv peab kunagi lõppema. Seega, millal saatmiskiiruse suurenemine lõpeb? Aeglane algus lõpetab saatmiskiiruse suurenemise tavaliselt ühel mitmest viisist:
Esimene võimalus on pakettide kadumine aeglase käivituse saatmisprotsessi ajal. Kui toimub pakettide kadu, määrab TCP saatja ummikuakna cwnd väärtuseks 1 ja taaskäivitab aeglase käivituse protsessi. Sel hetkel tutvustatakse aeglase käivituse läve ssthresh kontseptsiooni, mille algväärtus on pool cwnd väärtusest, mis tekitab pakettide kadu. See tähendab, et ummiku tuvastamisel on ssthresh väärtus pool akna väärtusest.
Teine võimalus on otseselt korreleerida aeglase käivituse läve ssthresh väärtusega. Kuna ssthresh väärtus on ummikute tuvastamisel pool akna väärtusest, võib iga kahekordistumise korral, kui cwnd on suurem kui ssthresh, tekkida pakettide kadu. Seetõttu on kõige parem määrata cwnd väärtuseks ssthresh, mis põhjustab TCP lülitumise ummikute kontrollimise režiimile ja aeglase käivituse lõpetamise.
Viimane viis, kuidas aeglane algus saab lõppeda, on see, et kui tuvastatakse kolm üleliigset ACK-paketti, teostab TCP kiire uuesti saatmise ja läheb taastumisolekusse. (Kui pole selge, miks on kolm ACK-paketti, selgitatakse seda eraldi uuesti saatmise mehhanismis.)
Ummikute vältimine
Kui TCP siseneb ummikukontrolli olekusse, määratakse cwnd pooleks ummikulävest ssthresh. See tähendab, et cwnd väärtust ei saa iga kord paketi segmendi vastuvõtmisel kahekordistada. Selle asemel kasutatakse suhteliselt konservatiivset lähenemisviisi, kus cwnd väärtust suurendatakse pärast iga edastuse lõpetamist ainult ühe MSS-i (maksimaalne paketi segmendi pikkus) võrra. Näiteks isegi kui 10 paketi segmendi vastuvõtmist kinnitatakse, suureneb cwnd väärtus ainult ühe MSS-i võrra. See on lineaarse kasvu mudel ja sellel on ka kasvu ülempiir. Paketi kadumise korral muudetakse cwnd väärtus MSS-iks ja ssthresh väärtus seatakse pooleks cwnd-st. Või peatab see MSS-i kasvu ka siis, kui saadakse 3 redundantset ACK-vastust. Kui pärast cwnd väärtuse poolega vähendamist saadakse ikka veel kolm redundantset ACK-vastust, registreeritakse ssthresh väärtuseks pool cwnd väärtusest ja sisenetakse kiire taastumise olekusse.
Kiire taastumine
Kiire taastumise olekus suurendatakse ülekoormuse akna cwnd väärtust ühe MSS võrra iga vastuvõetud redundantse ACK kohta, st ACK kohta, mis ei saabu järjekorras. See on selleks, et võrgus edukalt edastatud paketi segmente ära kasutada edastuse efektiivsuse maksimeerimiseks.
Kui kadunud paketisegmendi ACK saabub, vähendab TCP cwnd väärtust ja lülitub seejärel ülekoormuse vältimise olekusse. See on mõeldud ülekoormuse akna suuruse kontrollimiseks ja võrgu ülekoormuse edasise suurenemise vältimiseks.
Kui pärast ülekoormuse juhtimise olekut tekib ajalõpp, muutub võrgu olukord tõsisemaks ja TCP migreerub ülekoormuse vältimise olekust aeglase käivituse olekusse. Sellisel juhul määratakse ülekoormuse akna cwnd väärtuseks 1 MSS, mis on maksimaalne paketi segmendi pikkus, ja aeglase käivituse läve ssthresh väärtuseks seatakse pool cwnd väärtusest. Selle eesmärk on suurendada ülekoormuse akna suurust järk-järgult pärast võrgu taastumist, et tasakaalustada edastuskiirust ja võrgu ülekoormuse astet.
Kokkuvõte
Usaldusväärse transpordiprotokollina rakendab TCP usaldusväärset transporti järjekorranumbri, kinnituse, uuesti saatmise juhtimise, ühenduse haldamise ja akna juhtimise abil. Nende hulgas kontrollib voo juhtimise mehhanism saatja saadetud andmete hulka vastavalt vastuvõtja tegelikule vastuvõtuvõimele, mis väldib võrgu ülekoormuse ja jõudluse halvenemise probleeme. Ülekoormuse juhtimise mehhanism väldib võrgu ülekoormuse teket, reguleerides saatja saadetud andmete hulka. Ülekoormuse akna ja saatmisakna mõisted on omavahel seotud ning saatja andmete hulka kontrollitakse ülekoormuse akna suuruse dünaamilise reguleerimise abil. Aeglane käivitamine, ülekoormuse vältimine ja kiire taastumine on TCP ülekoormuse juhtimise algoritmi kolm peamist osa, mis reguleerivad ülekoormuse akna suurust erinevate strateegiate abil, et kohaneda võrgu läbilaskevõime ja ülekoormuse astmega.
Järgmises osas uurime üksikasjalikult TCP taasedastamise mehhanismi. Taasedastamise mehhanism on TCP oluline osa usaldusväärse edastuse saavutamiseks. See tagab andmete usaldusväärse edastamise kadunud, rikutud või hilinenud andmete taasedastamise teel. Taasedastamise mehhanismi rakenduspõhimõtet ja strateegiat tutvustatakse ja analüüsitakse üksikasjalikult järgmises osas. Püsige lainel!
Postituse aeg: 24. veebruar 2025