TCP-ühenduse seadistamine
Kui sirvime veebi, saadame e-kirju või mängime võrgumänge, ei mõtle me sageli selle taga olevale keerulisele võrguühendusele. Kuid just need pealtnäha väikesed sammud tagavad stabiilse suhtluse meie ja serveri vahel. Üks olulisemaid samme on TCP-ühenduse seadistamine ja selle tuumaks on kolmesuunaline käepigistus.
Selles artiklis käsitletakse üksikasjalikult kolmepoolse käepigistuse põhimõtet, protsessi ja tähtsust. Samm-sammult selgitame, miks kolmepoolset käepigistust vaja on, kuidas see tagab ühenduse stabiilsuse ja töökindluse ning kui oluline on see andmeedastuseks. Kolmepoolse käepigistuse sügavama mõistmisega saame paremini aru võrgusuhtluse aluseks olevatest mehhanismidest ja saame selgema ülevaate TCP-ühenduste töökindlusest.
TCP kolmesuunaline käepigistuse protsess ja olekuüleminekud
TCP on ühendusele orienteeritud transpordiprotokoll, mis nõuab enne andmeedastust ühenduse loomist. See ühenduse loomise protsess toimub kolmesuunalise käepigistuse abil.
Vaatame lähemalt igas ühenduses saadetavaid TCP-pakette.
Esialgu on nii klient kui ka server SULETUD. Esiteks, server kuulab aktiivselt porti ja on LISTEN olekus, mis tähendab, et server tuleb käivitada. Järgmiseks on klient valmis veebilehele juurde pääsema. Ta peab looma ühenduse serveriga. Esimese ühenduse paketi vorming on järgmine:
Kui klient ühenduse loob, genereerib ta juhusliku esialgse järjenumbri (client_isn) ja asetab selle TCP päise väljale "Järjenumber". Samal ajal määrab klient SYN-i lipu positsiooni 1-ks, et näidata, et väljaminev pakett on SYN-pakett. Klient annab teada, et soovib serveriga ühenduse luua, saates serverile esimese SYN-paketi. See pakett ei sisalda rakenduskihi andmeid (st saadetud andmeid). Sel hetkel märgitakse kliendi olekuks SYN-SENT.
Kui server võtab kliendilt vastu SYN-paketi, initsialiseerib ta juhuslikult oma seerianumbri (server_isn) ja lisab seejärel selle numbri TCP päise väljale "Seerianumber". Järgmisena sisestab server väljale "Kinnitusnumber" kliendi_isn + 1 ja seab nii SYN-i kui ka ACK-bitid väärtuseks 1. Lõpuks saadab server kliendile paketi, mis ei sisalda rakenduskihi andmeid (ja ka serveri andmeid pole). saata). Praegu on server SYN-RCVD olekus.
Kui klient on paketi serverilt kätte saanud, peab ta lõplikule vastusepaketile vastamiseks läbi viima järgmised optimeerimised: Esiteks määrab klient vastusepaketi TCP-päise ACK-biti väärtuseks 1; Teiseks sisestab klient väljale "Kinnita vastuse number" väärtuse server_isn + 1; Lõpuks saadab klient paketi serverisse. See pakett võib kanda andmeid kliendilt serverisse. Pärast nende toimingute lõpetamist siseneb klient olekusse KEHTUD.
Kui server saab kliendilt vastuspaketi, lülitub see ka olekusse ESTABLISHED.
Nagu ülaltoodud protsessist näha, on kolmepoolse käepigistuse sooritamisel lubatud kolmandal käepigistusel andmeid edastada, kuid kahel esimesel käepigistusel mitte. Seda küsimust küsitakse sageli intervjuudes. Kui kolmepoolne käepigistus on lõppenud, sisenevad mõlemad pooled olekusse ESTABLISHED, mis näitab, et ühendus on edukalt loodud, mille järel saavad klient ja server hakata üksteisele andmeid saatma.
Miks kolm käepigistust? Mitte kaks korda, neli korda?
Levinud vastus on: "Sest kolmesuunaline käepigistus tagab vastuvõtmise ja saatmise võimaluse." See vastus on õige, kuid see on ainult pealiskaudne põhjus, ei esita peamist põhjust. Järgnevalt analüüsin kolmekordse käepigistuse põhjuseid kolmest aspektist, et süvendada meie arusaamist sellest probleemist.
Kolmesuunaline käepigistus võib tõhusalt vältida ajalooliselt korduvate ühenduste initsialiseerimist (peamine põhjus)
Kolmepoolne käepigistus garanteerib, et mõlemad pooled on saanud usaldusväärse esialgse järjekorranumbri.
Kolmesuunaline käepigistus väldib ressursside raiskamist.
1. põhjus: vältige ajaloolisi dubleerivaid liitumisi
Lühidalt öeldes on kolmepoolse käepigistuse peamine põhjus vältida segadust, mida põhjustab vana dubleeriva ühenduse lähtestamine. Keerulises võrgukeskkonnas ei saadeta andmepakettide edastamist sihthostile alati määratud ajal ning vanad andmepaketid võivad võrgu ülekoormuse ja muude põhjuste tõttu jõuda esmalt sihtmasinasse. Selle vältimiseks kasutab TCP ühenduse loomiseks kolmepoolset käepigistust.
Kui klient saadab järjest mitu SYN-i ühenduse loomise paketti, võib sellistes olukordades nagu võrgu ülekoormus ilmneda järgmine.
1- Vanad SYN-paketid jõuavad serverisse enne uusimaid SYN-pakette.
2- Server vastab kliendile SYN + ACK paketi pärast vana SYN-paketi vastuvõtmist.
3- Kui klient saab SYN + ACK paketi, teeb ta kindlaks, et ühendus on ajalooline ühendus (järjekorranumber on aegunud või aegunud), ja saadab seejärel RST-paketi serverisse ühenduse katkestamiseks.
Kahe käepigistuse ühendusega ei saa kuidagi kindlaks teha, kas praegune ühendus on ajalooline ühendus. Kolmesuunaline käepigistus võimaldab kliendil määrata konteksti põhjal, kas praegune ühendus on ajalooline ühendus, kui ta on valmis saatma kolmandat paketti:
1- Kui tegemist on ajaloolise ühendusega (järjekorranumber on aegunud või aegunud), on kolmanda käepigistuse saadetud pakett ajaloolise ühenduse katkestamiseks RST-pakett.
2- Kui tegemist ei ole ajaloolise ühendusega, on kolmandat korda saadetud pakett ACK-pakett ja kaks suhtlevat osapoolt loovad ühenduse edukalt.
Seetõttu on peamine põhjus, miks TCP kasutab kolmepoolset käepigistust, see, et see lähtestab ühenduse ajalooliste ühenduste vältimiseks.
Põhjus 2: sünkroonida mõlema poole esialgsed järjekorranumbrid
TCP-protokolli mõlemad pooled peavad säilitama järjenumbri, mis on usaldusväärse edastuse tagamiseks võtmetegur. Järjestusnumbrid mängivad TCP-ühendustes olulist rolli. Nad teevad järgmist.
Vastuvõtja saab kõrvaldada dubleerivad andmed ja tagada andmete täpsuse.
Vastuvõtja saab vastu võtta pakette järjekorranumbri järjekorras, et tagada andmete terviklikkus.
● Järjenumbri abil saab tuvastada andmepaketi, mille teine osapool on vastu võtnud, võimaldades usaldusväärset andmeedastust.
Seetõttu saadab klient TCP-ühenduse loomisel SYN-paketid esialgse järjenumbriga ja nõuab serverilt vastuseks ACK-paketti, mis näitab kliendi SYN-paketi edukat vastuvõtmist. Seejärel saadab server kliendile SYN-i paketi esialgse järjenumbriga ja ootab kliendi lõplikku vastust, et tagada esialgsete järjenumbrite usaldusväärne sünkroonimine.
Kuigi mõlema poole esialgsete järjenumbrite usaldusväärseks sünkroonimiseks on võimalik ka neljasuunaline käepigistus, saab teise ja kolmanda sammu ühendada üheks sammuks, mille tulemuseks on kolmepoolne käepigistus. Kaks käepigistust saavad aga garanteerida vaid ühe osapoole esialgse järjekorranumbri eduka kättesaamise teisel poolel, kuid puudub garantii, et mõlema poole esialgse järjekorranumbri kinnitamine õnnestub. Seetõttu on kolmesuunaline käepigistus parim valik, et tagada TCP-ühenduste stabiilsus ja usaldusväärsus.
Põhjus 3: vältige ressursside raiskamist
Kui toimub ainult "kahe käepigistus", kui kliendi SYN-i päring on võrgus blokeeritud, ei saa klient serveri saadetud ACK-paketti vastu võtta, mistõttu SYN saadetakse uuesti. Kuna aga kolmandat käepigistust pole, ei saa server kindlaks teha, kas klient sai ühenduse loomiseks ACK-kinnituse. Seetõttu saab server ennetavalt ühenduse luua alles pärast iga SYN-i päringu saamist. See toob kaasa järgmise:
Ressursside raiskamine: kui kliendi SYN-i päring blokeeritakse, mille tulemuseks on mitme SYN-paketi korduv edastamine, loob server pärast päringu saamist mitu üleliigset kehtetut ühendust. See toob kaasa serveriressursside tarbetu raiskamise.
Sõnumi säilitamine: kolmanda käepigistuse puudumise tõttu ei saa server teada, kas klient sai ühenduse loomiseks õigesti ACK-kinnituse. Selle tulemusena, kui sõnumid takerduvad võrku, saadab klient ikka ja jälle SYN-i päringuid, põhjustades serveris pidevalt uusi ühendusi. See suurendab võrgu ülekoormust ja viivitust ning mõjutab negatiivselt üldist võrgu jõudlust.
Seetõttu kasutab TCP võrguühenduse stabiilsuse ja töökindluse tagamiseks ühenduse loomiseks kolmepoolset käepigistust, et vältida nende probleemide esinemist.
Kokkuvõte
TheVõrgupakettide vahendajaTCP-ühenduse loomine toimub kolmepoolse käepigistusega. Kolmepoolse käepigistuse ajal saadab klient esmalt serverile SYN-lipuga paketi, mis näitab, et soovib ühendust luua. Pärast kliendilt päringu saamist vastab server kliendile SYN- ja ACK-lippudega paketi, mis näitab, et ühendustaotlus on vastu võetud, ja saadab oma esialgse järjenumbri. Lõpuks vastab klient serverile ACK-lipuga, mis näitab, et ühendus on edukalt loodud. Seega on kaks osapoolt olekus KEHTUD ja saavad hakata üksteisele andmeid saatma.
Üldiselt on TCP-ühenduse loomise kolmesuunaline käepigistuse protsess mõeldud ühenduse stabiilsuse ja usaldusväärsuse tagamiseks, ajalooliste ühenduste segamise ja ressursside raiskamise vältimiseks ning mõlema poole andmete vastuvõtmise ja saatmise tagamiseks.
Postitusaeg: jaan-08-2025