Ključne skrivnosti povezav TCP posrednika omrežnih paketov: demistificirala potrebo po trojnem rokovanju

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

Ta članek bo podrobno obravnaval načelo, postopek in pomen tristranskega rokovanja. Korak za korakom vam bomo razložili, zakaj je potrebno tristransko rokovanje, 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 povezav TCP.

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

 TCP trosmerno rokovanje

Oglejmo si podrobneje pakete TCP, ki so poslani v vsaki povezavi.

Na začetku sta tako odjemalec kot strežnik ZAPRTA. Prvič, strežnik aktivno posluša na vratih in je v stanju LISTEN, kar pomeni, da je treba strežnik zagnati. 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 sproži povezavo, ustvari naključno začetno zaporedno številko (client_isn) in jo postavi v polje "Zaporedna številka" glave TCP. Istočasno odjemalec nastavi položaj zastavice SYN na 1, da nakaže, da je odhodni paket paket SYN. Odjemalec nakaže, da želi vzpostaviti povezavo s strežnikom, tako da strežniku pošlje prvi paket SYN. Ta paket ne vsebuje podatkov sloja aplikacije (tj. poslanih podatkov). Na tej točki je status odjemalca označen kot SYN-SENT.

Paket SYN+ACK

Ko strežnik prejme paket SYN od odjemalca, naključno inicializira lastno serijsko številko (server_isn) in nato to številko vnese v polje "Serijska številka" glave TCP. Nato strežnik vnese client_isn + 1 v polje »Acknowledgement number« in nastavi bita SYN in ACK na 1. Nazadnje strežnik odjemalcu pošlje paket, ki ne vsebuje podatkov aplikacijske plasti (in podatkov za strežnik poslati). Trenutno je strežnik v stanju SYN-RCVD.

ACK paket

Ko odjemalec prejme paket od strežnika, mora izvesti naslednje optimizacije, da se odzove na končni odgovorni paket: Najprej odjemalec nastavi bit ACK glave TCP odgovornega paketa 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 od odjemalca prejme odgovorni paket, preklopi tudi v stanje ESTABLISHED.

Kot lahko vidite iz zgornjega postopka, je pri izvajanju tristranskega rokovanja tretje rokovanje dovoljeno prenašati podatke, prvi dve rokovanju pa ne. To je vprašanje, ki se pogosto postavlja na intervjujih. Ko je trosmerno rokovanje končano, obe strani preideta v stanje VZPOSTAVLJENO, kar pomeni, da je bila povezava uspešno vzpostavljena, pri čemer lahko odjemalec in strežnik drug drugemu začneta pošiljati podatke.

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

Trosmerno 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.
Trosmerno rokovanje preprečuje zapravljanje virov.

1. razlog: izogibajte se zgodovinskim podvojenim združitvam
Na kratko, glavni razlog za tristransko rokovanje je izogibanje zmedi, ki bi jo povzročila stara podvojena inicializacija povezave. V zapletenem omrežnem okolju prenos podatkovnih paketov ni vedno poslan ciljnemu gostitelju v skladu z določenim časom in stari podatkovni paketi lahko prvi prispejo do ciljnega gostitelja zaradi prezasedenosti omrežja in drugih razlogov. Da bi se temu izognil, TCP za vzpostavitev povezave uporablja tristransko rokovanje.

trosmerno rokovanje se izogne ​​zgodovinskim podvojenim povezavam

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

1- Stari paketi SYN prispejo na strežnik pred zadnjimi paketi SYN.
2- Strežnik bo odjemalcu odgovoril na paket SYN + ACK po prejemu starega paketa SYN.
3- Ko odjemalec prejme paket SYN + ACK, ugotovi, da je povezava zgodovinska povezava (zaporedna številka je potekla ali časovna omejitev) v skladu z lastnim kontekstom, nato pa pošlje paket RST strežniku, da prekine povezavo.

Pri povezavi z dvema rokovanjema ni mogoče ugotoviti, ali je trenutna povezava zgodovinska povezava. Trosmerno rokovanje omogoča odjemalcu, da ugotovi, ali je trenutna povezava zgodovinska povezava glede na kontekst, ko je pripravljen za pošiljanje tretjega paketa:

1- Če gre za zgodovinsko povezavo (zaporedna številka je potekla ali je potekla časovna omejitev), 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 strani, ki komunicirata, uspešno vzpostavita povezavo.

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

2. razlog: Za sinhronizacijo začetnih zaporednih številk obeh strani
Obe strani protokola TCP morata vzdrževati zaporedno številko, ki je ključni dejavnik za zagotavljanje zanesljivega prenosa. Zaporedne številke igrajo pomembno vlogo pri povezavah TCP. Delajo naslednje:

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

Prejemnik lahko sprejme pakete po vrstnem redu zaporedne številke, da zagotovi celovitost podatkov.

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

Zato odjemalec po vzpostavitvi povezave TCP pošlje pakete SYN z začetno zaporedno številko in zahteva, da strežnik odgovori s paketom ACK, ki nakazuje uspešen sprejem odjemalčevega paketa SYN. Nato strežnik odjemalcu pošlje paket SYN z začetno zaporedno številko in počaka, da odjemalec enkrat za vselej odgovori, da zagotovi, da so začetne zaporedne številke zanesljivo sinhronizirane.

Sinhronizirajte začetne serijske številke obeh strank

Čeprav je možno tudi štirismerno rokovanje za zanesljivo sinhronizacijo začetnih zaporednih številk obeh strani, je mogoče drugi in tretji korak združiti v en sam korak, kar ima za posledico trismerno rokovanje. Vendar lahko obe rokovanju le zagotovita, da je druga stran uspešno prejela začetno zaporedno številko ene strani, ni pa zagotovila, da je mogoče potrditi začetno zaporedno številko obeh strank. Zato je tristransko rokovanje najboljša izbira za zagotovitev stabilnosti in zanesljivosti povezav TCP.

3. razlog: izogibajte se zapravljanju virov
Če obstaja samo "dva rokovanja", ko je zahteva SYN odjemalca blokirana v omrežju, odjemalec ne more prejeti paketa ACK, ki ga pošlje strežnik, zato bo SYN ponovno poslan. Ker pa tretjega rokovanja ni, 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:

Zapravljanje virov: Če je odjemalčeva zahteva SYN blokirana, kar ima za posledico ponavljajoče se pošiljanje več paketov SYN, bo strežnik po prejemu zahteve vzpostavil več redundantnih neveljavnih povezav. To vodi v nepotrebno zapravljanje strežniških virov.

Zadrževanje sporočila: zaradi pomanjkanja tretjega rokovanja strežnik ne more vedeti, ali je odjemalec pravilno prejel potrditev ACK za vzpostavitev povezave. Posledično, če se sporočila zataknejo v omrežju, bo odjemalec vedno znova pošiljal zahteve SYN, zaradi česar bo strežnik nenehno vzpostavljal nove povezave. To bo povečalo prezasedenost 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 ​​pojavu teh težav.

Povzetek
TheOmrežni paketni posrednikVzpostavitev povezave TCP se izvede s tristranskim rokovanjem. Med tristranskim rokovanjem odjemalec strežniku najprej pošlje paket z zastavico SYN, ki nakazuje, da želi vzpostaviti povezavo. Po prejemu zahteve od odjemalca strežnik odjemalcu odgovori na paket z zastavicama SYN in ACK, kar nakazuje, da je zahteva za povezavo sprejeta, in pošlje lastno začetno zaporedno številko. Na koncu odjemalec strežniku odgovori z zastavico ACK, ki nakazuje, da je bila povezava uspešno vzpostavljena. Tako sta obe strani v VZPOSTAVLJENEM stanju in si lahko začneta pošiljati podatke.

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


Čas objave: Jan-08-2025