Ključne skrivnosti TCP povezav posrednika omrežnih paketov: Demistificirana potreba po trojnem rokovanju

Nastavitev TCP povezave
Ko brskamo po spletu, pošiljamo e-pošto ali igramo spletno igro, pogosto ne pomislimo na kompleksno omrežno povezavo, ki se skriva za tem. Vendar pa so prav ti na videz majhni koraki tisti, ki zagotavljajo stabilno komunikacijo med nami in strežnikom. Eden najpomembnejših korakov je vzpostavitev TCP povezave, jedro tega pa je tristransko rokovanje.

Ta članek bo podrobno obravnaval načelo, postopek in pomen tristranskega rokovanja. Korak za korakom bomo razložili, zakaj je tristransko rokovanje potrebno, kako zagotavlja stabilnost in zanesljivost povezave ter kako pomembno je za prenos podatkov. Z globljim razumevanjem tristranskega rokovanja bomo pridobili boljše razumevanje osnovnih mehanizmov omrežne komunikacije in jasnejši pogled na zanesljivost TCP povezav.

Postopek tristranskega rokovanja TCP in prehodi stanj
TCP je transportni protokol, usmerjen na povezavo, ki zahteva vzpostavitev povezave pred prenosom podatkov. Ta postopek vzpostavitve povezave se izvede s tristranskim rokovanjem.

 Tristransko rokovanje TCP

Oglejmo si podrobneje TCP pakete, ki se pošiljajo v vsaki povezavi.

Sprva sta tako odjemalec kot strežnik ZAPRTA. Najprej strežnik aktivno posluša na vratih in je v stanju POSLUŠAJ, kar pomeni, da mora biti strežnik zagnan. Nato je odjemalec pripravljen za dostop do spletne strani. Vzpostaviti mora povezavo s strežnikom. Format prvega povezovalnega paketa je naslednji:

 SYN paket

Ko odjemalec vzpostavi povezavo, ustvari naključno začetno zaporedno številko (client_isn) in jo postavi v polje »Zaporedna številka« glave TCP. Hkrati odjemalec nastavi položaj zastavice SYN na 1, kar pomeni, da je odhodni paket SYN paket. Odjemalec označi, da želi vzpostaviti povezavo s strežnikom, tako da strežniku pošlje prvi SYN paket. Ta paket ne vsebuje podatkov aplikacijske plasti (torej poslanih podatkov). Na tej točki je status odjemalca označen kot SYN-SENT.

Paket SYN+ACK

Ko strežnik od odjemalca prejme paket SYN, naključno inicializira svojo serijsko številko (server_isn) in jo nato vnese v polje »Serijska številka« glave TCP. Nato strežnik v polje »Potrdilna številka« vnese client_isn + 1 in nastavi bita SYN in ACK na 1. Nazadnje strežnik pošlje paket odjemalcu, ki ne vsebuje podatkov aplikacijske plasti (in podatkov, ki bi jih strežnik moral poslati). V tem času je strežnik v stanju SYN-RCVD.

Paket ACK

Ko odjemalec prejme paket od strežnika, mora za odgovor na končni paket odgovora izvesti naslednje optimizacije: Najprej odjemalec nastavi bit ACK v glavi TCP paketa odgovora na 1; Drugič, odjemalec vnese vrednost server_isn + 1 v polje »Potrdi številko odgovora«; Nazadnje odjemalec pošlje paket strežniku. Ta paket lahko prenaša podatke od odjemalca do strežnika. Po zaključku teh operacij bo odjemalec prešel v stanje ESTABLISHED.

Ko strežnik prejme odgovorni paket od odjemalca, tudi sam preklopi v stanje ESTABLISHED.

Kot lahko vidite iz zgornjega postopka, lahko pri izvajanju tristranskega rokovanja tretje rokovanje prenaša podatke, prvi dve pa ne. To je vprašanje, ki ga pogosto zastavijo na razgovorih. Ko je tristransko rokovanje končano, obe strani vstopita v stanje VZPOSTAVLJENO, kar pomeni, da je bila povezava uspešno vzpostavljena, na kateri točki si lahko odjemalec in strežnik začneta pošiljati podatke.

Zakaj trikratni stisk rok? Ne dvakrat, štirikrat?
Pogost odgovor je: "Ker trojno rokovanje zagotavlja možnost prejemanja in pošiljanja." Ta odgovor je pravilen, vendar je le površinski razlog, ne pa glavnega. V nadaljevanju bom analiziral razloge za trojno rokovanje s treh vidikov, da bi poglobil naše razumevanje te problematike.

Tristransko rokovanje se lahko učinkovito izogne ​​inicializaciji zgodovinsko ponavljajočih se povezav (glavni razlog)
Tristransko rokovanje zagotavlja, da sta obe strani prejeli zanesljivo začetno zaporedno številko.
Tristransko rokovanje preprečuje zapravljanje virov.

Razlog 1: Izogibanje zgodovinskim podvojenim združitvam
Na kratko, glavni razlog za tristransko rokovanje je izogibanje zmedi, ki jo povzroča inicializacija starih podvojenih povezav. V kompleksnem omrežnem okolju prenos podatkovnih paketov ni vedno poslan ciljnemu gostitelju v skladu z določenim časom, stari podatkovni paketi pa lahko zaradi preobremenjenosti omrežja in drugih razlogov do ciljnega gostitelja prispejo najprej. Da bi se temu izognili, TCP za vzpostavitev povezave uporablja tristransko rokovanje.

Tristransko rokovanje preprečuje zgodovinske podvojene povezave

Ko odjemalec zaporedno pošlje več paketov za vzpostavitev povezave SYN, se lahko v situacijah, kot je preobremenjenost omrežja, zgodi naslednje:

1. Stari SYN paketi prispejo na strežnik pred najnovejšimi SYN paketi.
2- Strežnik bo odjemalcu odgovoril s paketom SYN + ACK, ko bo prejel stari paket SYN.
3- Ko odjemalec prejme paket SYN + ACK, glede na svoj kontekst ugotovi, da gre za zgodovinsko povezavo (zaporedna številka je potekla ali je časovna omejitev potekla), nato pa strežniku pošlje paket RST, da prekine povezavo.

Pri dvojnem rokovanju ni mogoče ugotoviti, ali je trenutna povezava zgodovinska povezava. Tristransko rokovanje omogoča odjemalcu, da na podlagi konteksta ugotovi, ali je trenutna povezava zgodovinska povezava, ko je pripravljen poslati tretji paket:

1- Če gre za zgodovinsko povezavo (zaporedna številka je potekla ali je časovna omejitev potekla), je paket, poslan s tretjim rokovanjem, paket RST za prekinitev zgodovinske povezave.
2- Če ne gre za zgodovinsko povezavo, je paket, poslan tretjič, paket ACK in obe komunikacijski strani uspešno vzpostavita povezavo.

Zato je glavni razlog, da TCP uporablja tristransko rokovanje, ta, da inicializira povezavo in prepreči zgodovinske povezave.

Razlog 2: Sinhronizacija začetnih zaporednih številk obeh strank
Obe strani protokola TCP morata vzdrževati zaporedno številko, kar je ključni dejavnik za zagotavljanje zanesljivega prenosa. Zaporedne številke igrajo pomembno vlogo v povezavah TCP. Naredijo naslednje:

Sprejemnik lahko odpravi podvojene podatke in zagotovi njihovo točnost.

Sprejemnik lahko prejema pakete po vrstnem redu zaporedne številke, da zagotovi celovitost podatkov.

● Zaporedna številka lahko identificira podatkovni paket, ki ga je prejela druga stranka, kar omogoča zanesljiv prenos podatkov.

Zato odjemalec ob vzpostavitvi TCP povezave pošlje SYN pakete z začetno zaporedno številko in od strežnika zahteva odgovor s paketom ACK, ki označuje uspešen prejem odjemalčevega SYN paketa. Nato strežnik pošlje SYN paket z začetno zaporedno številko odjemalcu in počaka na odgovor odjemalca, da se zagotovi zanesljiva sinhronizacija začetnih zaporednih številk.

Sinhronizirajte začetne serijske številke obeh strank

Čeprav je mogoče zanesljivo sinhronizirati začetne zaporedne številke obeh strank s štirismernim rokovanjem, se lahko drugi in tretji korak združita v enega, kar ima za posledico trismerno rokovanje. Vendar pa lahko oba rokovanja zagotovita le, da druga stranka uspešno prejme začetno zaporedno številko ene stranke, ni pa nobenega zagotovila, da je mogoče potrditi začetno zaporedno številko obeh strank. Zato je trismerno rokovanje najboljša izbira za zagotovitev stabilnosti in zanesljivosti TCP povezav.

Razlog 3: Izogibajte se zapravljanju virov
Če obstaja samo "dvojno rokovanje", ko je zahteva SYN odjemalca blokirana v omrežju, odjemalec ne more prejeti paketa ACK, ki ga je poslal strežnik, zato bo SYN poslan ponovno. Ker pa ni tretjega rokovanja, strežnik ne more ugotoviti, ali je odjemalec prejel potrditev ACK za vzpostavitev povezave. Zato lahko strežnik proaktivno vzpostavi povezavo šele po prejemu vsake zahteve SYN. ​​To vodi do naslednjega:

Izguba virov: Če je odjemalčeva SYN zahteva blokirana, kar povzroči ponavljajoče se pošiljanje več SYN paketov, bo strežnik po prejemu zahteve vzpostavil več redundantnih neveljavnih povezav. To vodi do nepotrebne porabe strežniških virov.

Zadrževanje sporočil: Zaradi pomanjkanja tretjega rokovanja strežnik ne more vedeti, ali je odjemalec pravilno prejel potrditev ACK za vzpostavitev povezave. Posledično bo odjemalec, če se sporočila zataknejo v omrežju, vedno znova pošiljal zahteve SYN, zaradi česar bo strežnik nenehno vzpostavljal nove povezave. To bo povečalo preobremenjenost omrežja in zamude ter negativno vplivalo na splošno delovanje omrežja.

Izogibajte se zapravljanju virov

Zato TCP za zagotovitev stabilnosti in zanesljivosti omrežne povezave uporablja tristransko rokovanje za vzpostavitev povezave, da se izogne ​​​​nastanku teh težav.

Povzetek
ThePosrednik omrežnih paketovVzpostavitev TCP povezave se izvede s tristranskim rokovanjem. Med tristranskim rokovanjem odjemalec najprej pošlje strežniku paket z zastavico SYN, kar pomeni, da želi vzpostaviti povezavo. Po prejemu zahteve odjemalca strežnik odgovori s paketom z zastavicami SYN in ACK, kar pomeni, da je zahteva za povezavo sprejeta, in pošlje svojo začetno zaporedno številko. Nazadnje odjemalec odgovori strežniku z zastavico ACK, kar pomeni, da je bila povezava uspešno vzpostavljena. Tako sta obe strani v stanju VZPOSTAVLJENO in si lahko začneta pošiljati podatke.

Na splošno je postopek tristranskega rokovanja za vzpostavitev TCP povezave zasnovan tako, da zagotavlja stabilnost in zanesljivost povezave, preprečuje zmedo in izgubo virov zaradi zgodovinskih povezav ter zagotavlja, da lahko obe strani prejemata in pošiljata podatke.


Čas objave: 8. januar 2025