Võrgupaketimaakleri TCP -ühenduste peamised müsteeriumid: demüstifitseeris vajadust kolmekordse käepigistuse järele

TCP ühenduse seadistamine
Veebi sirvimisel, meili saatmise või veebimängu mängides ei mõtle me sageli selle taga olevale keerukale võrguühendusele. Kuid just need väikesed sammud tagavad stabiilse suhtluse meie ja serveri vahel. Üks olulisemaid samme on TCP ühenduse seadistamine ja selle tuum on kolmesuunaline käepigistus.

Selles artiklis käsitletakse üksikasjalikult kolmesuunalise käepigistuse põhimõtet, protsessi ja olulisust. Samm-sammult selgitame, miks on vaja kolmesuunalist käepigistust, kuidas see tagab ühenduse stabiilsuse ja usaldusväärsuse ning kui oluline on see andmeedastuse jaoks. Kolmesuunalise käepigistuse sügavamalt mõistmisel saame paremini aru võrguühenduse alusmehhanismidest ja selgema ülevaate TCP-ühenduste usaldusväärsusest.

TCP kolmesuunaline käepigistusprotsess ja oleku üleminekud
TCP on ühendusele orienteeritud transpordiprotokoll, mis nõuab enne andmeedastust ühenduse loomist. Selle ühenduse loomise protsessi teeb kolmesuunalise käepigistuse.

 TCP kolmesuunaline käepigistus

Vaatame lähemalt TCP pakette, mis saadetakse igas ühenduses.

Algselt on nii klient kui ka server suletud. Esiteks kuulab server aktiivselt pordi ja on kuulamise olekus, mis tähendab, et server tuleb alustada. Järgmisena on klient valmis veebilehele juurde pääsema.I peab looma ühenduse serveriga. Esimese ühenduspaketi vorming on järgmine:

 Syn Packet

Kui klient ühendab ühenduse, genereerib see juhusliku algse järjestuse numbri (Client_ISN) ja asetab selle TCP päise väljale "järjestuse number". Samal ajal seab klient SYN -lipu positsiooni 1 -le, et näidata, et väljuv pakett on SYN -pakett. Klient näitab, et soovib luua ühenduse serveriga, saates serverisse esimese SYN -paketi. See pakett ei sisalda rakenduste kihi andmeid (see tähendab, et saadetud andmed). Sel hetkel on kliendi olek tähistatud kui Syn-lauas.

Syn+ACK pakett

Kui server võtab kliendilt SYN -paketi, lähtestab see juhuslikult oma seerianumbri (Server_ISN) ja paneb selle numbri TCP päise väljale "seerianumber". Järgmisena sisestab server väljale "kinnitusnumber" kliendi_isn + 1 ja seab nii SYN kui ka ACK bitti 1-le. Lõpuks saadab server kliendile paketi, mis ei sisalda rakenduse kihi andmeid (ega andmeid serveri jaoks, mida saata). Sel ajal on server Syn-RCVD olekus.

Ack -pakett

Kui klient on paketi serverist vastu võtnud, peab ta lõplikule vastusepaketile vastamiseks tegema järgmised optimeerimised: esiteks seab klient vastuse paketi TCP päise ACK -bitti 1 -le; Teiseks sisestab klient väljale "Kinnitage vastuse number" väärtuse serveri_isn + 1; Lõpuks saadab klient paketi serverisse. See pakett võib kanda kliendi andmeid serverisse. Pärast nende toimingute lõppu siseneb klient väljakujunenud olekusse.

Kui server on kliendilt vastusepaketi kätte saanud, lülitub see ka väljakujunenud olekusse.

Nagu ülaltoodud protsessist näete, lubatakse kolmesuunalise käepigistuse läbiviimisel kolmandal käepigistusel andmeid kanda, kuid kaks esimest käepigistust mitte. See on küsimus, mida küsitakse sageli intervjuudes. Kui kolmesuunaline käepigistus on lõppenud, sisenevad mõlemad pooled väljakujunenud oleku, mis näitab, et ühendus on edukalt loodud, sel ajal saavad klient ja server hakata andmeid üksteisele saatma.

Miks kolm käepigistust? Mitte kaks korda, neli korda?
Tavaline vastus on: "Kuna kolmesuunaline käepigistus tagab võimaluse vastu võtta ja saata." See vastus on õige, kuid see on ainult pinna põhjus, peamist põhjust ei esita. Järgnevalt analüüsin kolme aspekti kolmekordse käepigistuse põhjused, et süvendada meie arusaamist sellest teemast.

Kolmesuunaline käepigistus saab tõhusalt vältida ajalooliselt korduvate ühenduste lähtestamist (peamine põhjus)
Kolmesuunaline käepigistus tagab, et mõlemad pooled on saanud usaldusväärse esialgse järjestuse numbri.
Kolmesuunaline käepigistus väldib ressursside raiskamist.

Põhjus 1: vältige ajaloolisi duplikaadi liitumisi
Lühidalt-kolmesuunalise käepigistuse peamine põhjus on vältida segadust, mis on põhjustatud vanast duplikaadi ühenduse initsialiseerimisest. Keerulises võrgukeskkonnas ei saadeta andmepakettide edastamist vastavalt määratud ajale alati sihtkoha hostile ja vanad andmepaketid võivad sihtkoha hostile esmalt jõuda võrgu ummikute ja muude põhjuste tõttu. Selle vältimiseks kasutab TCP ühenduse loomiseks kolmesuunalist käepigistust.

Kolmesuunaline käepigistus väldib ajaloolisi duplikaadi ühendusi

Kui klient saadab järjest mitu SYN Connection asutamise paketti, võib juhtuda sellistes olukordades nagu võrgu ummikud:

1- Vanad SYN-paketid jõuavad serverisse enne uusimaid SYN-pakette.
2- Server vastab pärast vana SYN-paketi saamist kliendile Syn + ACK paketile.
3- Kui klient saab Syn + ACK paketi, määrab see, et ühendus on ajalooline ühendus (jadanumber aegunud või aegumine) vastavalt tema enda kontekstile, ja saadab seejärel RST paketi serverisse ühenduse katkestamiseks.

Kahe käepigistuse ühenduse korral ei saa kuidagi kindlaks teha, kas praegune ühendus on ajalooline ühendus. Kolmesuunaline käepigistus võimaldab kliendil kindlaks teha, kas praegune ühendus on ajalooline ühendus, mis põhineb kontekstis, kui see on valmis kolmanda paketi saatma:

1- Kui see on ajalooline ühendus (jada number aegunud või aegumistöö), on kolmanda käepigistuse saadetud pakett ajaloolise ühenduse katkestamiseks RST-pakett.
2- Kui see pole ajalooline ühendus, on kolmandat korda saadetud pakett ACK-pakett ja kaks suhtlemispartei loovad ühenduse edukalt.

Seetõttu on TCP peamine põhjus kolmesuunalist käepigistust see, et see initsialiseerib ühenduse ajalooliste ühenduste vältimiseks.

Põhjus 2: sünkroonida mõlema osapoole esialgsete järjestuste numbrid
TCP protokolli mõlemad küljed peavad säilitama järjestuse numbri, mis on võtmetegur usaldusväärse edastamise tagamiseks. Jadanumbrid mängivad olulist rolli TCP -ühendustes. Nad teevad järgmist:

Vastuvõtja saab kõrvaldada duplikaadid ja tagada andmete täpsuse.

Andmete terviklikkuse tagamiseks saab vastuvõtja pakette jadanumbri järjekorras.

● Jada number saab tuvastada andmepaketti, mille teine ​​osapool on saanud, võimaldades usaldusväärset andmeedastust.

Seetõttu saadab klient TCP -ühenduse loomisel esialgse järjestuse numbriga SYN -pakette ja nõuab serverit vastata ACK -paketiga, mis näitab kliendi SYN -paketi edukat vastuvõttu. Seejärel saadab server kliendile esialgse järjestuse numbriga SYN -paketi ja ootab, kuni klient vastab lõplikult, tagamaks, et esialgsed järjestuse numbrid on usaldusväärselt sünkroonitud.

Sünkroonige mõlema osapoole esialgne seerianumber

Ehkki neljasuunaline käepigistus on võimalik ka mõlema osapoole esialgse järjestuse numbrite usaldusväärselt sünkroonida, saab teise ja kolmanda sammu ühendada üheks sammuks, mille tulemuseks on kolmesuunaline käepigistus. Kuid kaks käepigistust saavad ainult garanteerida, et teine ​​osapool võtab ühe osapoole esialgse järjestuse arvu, kuid pole mingit garantiid, et mõlema osapoole esialgne järjestuse arv saab kinnitada. Seetõttu on TCP-ühenduste stabiilsuse ja usaldusväärsuse tagamiseks parim valik kolmesuunaline käepigistus.

Põhjus 3: vältige ressursside raiskamist
Kui on ainult "kahekäepiste", kui võrgus on kliendi SYN-i päring, ei saa klient serveri poolt saadetud ACK-paketti vastu võtta, seega on SYN paha. Kuna aga kolmandat käepigistust pole, ei saa server kindlaks teha, kas klient sai ACK kinnituse ühenduse loomiseks. Seetõttu saab server ennetavalt ühenduse luua ainult pärast iga SYN päringu saamist. See viib järgmiseni:

Ressursside raiskamine: kui kliendi SYN -päring on blokeeritud, mille tulemuseks on mitmete SYN -pakettide korduv edastamine, loob server pärast päringu saamist mitu koondatud kehtetut ühendusi. See viib serveriressursside tarbetu raiskamiseni.

Sõnumite säilitamine: kolmanda käepigistuse puudumise tõttu ei saa server kuidagi teada, kas klient sai ACK kinnituse õigesti ühenduse loomiseks. Selle tulemusel, kui sõnumid võrgus takerduvad, saadab klient ikka ja jälle SYN -i päringuid, pannes serveri pidevalt uute ühenduste loomise. See suurendab võrgu ummikuid ja viivitusi ning mõjutab negatiivselt võrgu üldist jõudlust.

Vältige ressursside raiskamist

Seetõttu kasutab TCP võrguühenduse stabiilsuse ja usaldusväärsuse tagamiseks ühenduse loomiseks kolmesuunalist käepigistust, et vältida nende probleemide tekkimist.

Kokkuvõte
SelleVõrgupaketimaaklerTCP ühenduse loomine toimub kolmesuunalise käepigistusega. Kolmesuunalise käepigistuse ajal saadab klient kõigepealt serverisse SYN-lipuga paketi, mis näitab, et soovib ühenduse luua. Pärast kliendilt päringu saamist vastab server kliendile SYN ja ACK lipudega paketile, mis näitab, et ühenduse päring on aktsepteeritud, ja saadab oma algse järjestuse numbri. Lõpuks vastab klient serverile ACK lipuga, et näidata, et ühendus on edukalt loodud. Seega on kaks osapoolt väljakujunenud olekus ja võivad hakata andmeid üksteisele saatma.

Üldiselt on TCP ühenduse loomise kolmesuunaline käepigistusprotsess loodud tagama ühenduse stabiilsuse ja töökindluse, vältima segadust ja ressursside raiskamist ajalooliste ühenduste ees ning tagama, et mõlemad pooled saaksid andmeid vastu võtta ja saata.


Postiaeg: jaanuar-08-2025