Ključne misterije TCP veza brokera mrežnih paketa: demistificirala je potrebu za trostrukim rukovanjem

Postavljanje TCP veze
Kada pregledavamo web, šaljemo e-poštu ili igramo online igru, često ne razmišljamo o složenoj mrežnoj vezi koja stoji iza toga. No, upravo ti naizgled mali koraci osiguravaju stabilnu komunikaciju između nas i poslužitelja. Jedan od najvažnijih koraka je postavljanje TCP veze, a srž toga je trosmjerno rukovanje.

Ovaj članak će detaljno raspravljati o principu, procesu i važnosti trosmjernog rukovanja. Korak po korak, objasnit ćemo zašto je potrebno trosmjerno rukovanje, kako osigurava stabilnost i pouzdanost veze te koliko je važno za prijenos podataka. Uz dublje razumijevanje trosmjernog rukovanja, dobit ćemo bolje razumijevanje temeljnih mehanizama mrežne komunikacije i jasniji pogled na pouzdanost TCP veza.

TCP trosmjerni proces rukovanja i prijelazi stanja
TCP je prijenosni protokol orijentiran na vezu, koji zahtijeva uspostavljanje veze prije prijenosa podataka. Ovaj proces uspostavljanja veze obavlja se trosmjernim rukovanjem.

 TCP trosmjerno rukovanje

Pogledajmo pobliže TCP pakete koji se šalju u svakoj vezi.

U početku su i klijent i poslužitelj ZATVORENI. Prvo, poslužitelj aktivno sluša port i nalazi se u stanju LISTEN, što znači da se poslužitelj mora pokrenuti. Zatim je klijent spreman za početak pristupa web stranici. Mora uspostaviti vezu s poslužiteljem. Format prvog paketa veze je sljedeći:

 SYN paket

Kada klijent inicira vezu, on generira nasumični početni redni broj (client_isn) i postavlja ga u polje "Sequence number" u TCP zaglavlju. U isto vrijeme, klijent postavlja položaj zastavice SYN na 1 kako bi označio da je odlazni paket SYN paket. Klijent pokazuje da želi uspostaviti vezu s poslužiteljem slanjem prvog SYN paketa poslužitelju. Ovaj paket ne sadrži podatke sloja aplikacije (odnosno poslane podatke). U ovom trenutku, status klijenta je označen kao SYN-SENT.

SYN+ACK paket

Kada poslužitelj primi SYN paket od klijenta, on nasumično inicijalizira vlastiti serijski broj (server_isn) i zatim stavlja taj broj u polje "Serijski broj" u TCP zaglavlju. Zatim, poslužitelj upisuje client_isn + 1 u polje "Acknowledgement number" i postavlja i SYN i ACK bitove na 1. Na kraju, poslužitelj šalje paket klijentu koji ne sadrži podatke sloja aplikacije (i nema podataka za poslužitelj poslati). U ovom trenutku, poslužitelj je u SYN-RCVD stanju.

ACK paket

Nakon što klijent primi paket od poslužitelja, treba izvršiti sljedeće optimizacije kako bi odgovorio na konačni paket odgovora: Prvo, klijent postavlja ACK bit TCP zaglavlja paketa odgovora na 1; Drugo, klijent upisuje vrijednost server_isn + 1 u polje "Potvrdi broj odgovora"; Na kraju, klijent šalje paket poslužitelju. Ovaj paket može prenositi podatke od klijenta do poslužitelja. Nakon završetka ovih operacija, klijent će ući u stanje ESTABLISHED.

Nakon što poslužitelj primi paket odgovora od klijenta, također se prebacuje u stanje ESTABLISHED.

Kao što možete vidjeti iz gornjeg postupka, prilikom izvođenja trosmjernog rukovanja, treće rukovanje smije prenositi podatke, ali prva dva rukovanja nisu. Ovo je pitanje koje se često postavlja u intervjuima. Nakon što je trosmjerno rukovanje dovršeno, obje strane ulaze u stanje ESTABLISHED, što znači da je veza uspješno uspostavljena, u kojoj točki klijent i poslužitelj mogu početi slati podatke jedan drugome.

Zašto tri rukovanja? Ne dva puta, četiri puta?
Uobičajen odgovor je: "Zato što trosmjerno rukovanje jamči mogućnost primanja i slanja." Ovaj odgovor je točan, ali to je samo površinski razlog, ne iznosi glavni razlog. U nastavku ću analizirati razloge trostrukog rukovanja s tri aspekta kako bih produbio naše razumijevanje ovog problema.

Trosmjerno rukovanje može učinkovito izbjeći inicijalizaciju povijesno ponovljenih veza (glavni razlog)
Trosmjerno rukovanje jamči da su obje strane primile pouzdan početni redni broj.
Trosmjerno rukovanje izbjegava rasipanje resursa.

Razlog 1: Izbjegavajte povijesna udvostručena spajanja
Ukratko, glavni razlog za trosmjerno rukovanje je izbjegavanje zabune uzrokovane inicijalizacijom stare duplicirane veze. U složenom mrežnom okruženju prijenos paketa podataka ne šalje se uvijek do odredišnog računala u skladu s određenim vremenom, a stari paketi podataka mogu prvi stići do odredišnog računala zbog zagušenja mreže i drugih razloga. Da bi se to izbjeglo, TCP koristi trosmjerno rukovanje za uspostavljanje veze.

trosmjerno rukovanje izbjegava povijesne duplicirane veze

Kada klijent pošalje više SYN paketa za uspostavu veze uzastopno, u situacijama kao što je zagušenje mreže, može se dogoditi sljedeće:

1- Stari SYN paketi stižu na poslužitelj prije najnovijih SYN paketa.
2- Poslužitelj će odgovoriti klijentu na SYN + ACK paket nakon što primi stari SYN paket.
3- Kada klijent primi SYN + ACK paket, utvrđuje da je veza povijesna veza (redni broj je istekao ili je isteklo vrijeme) prema vlastitom kontekstu, a zatim šalje RST paket poslužitelju da prekine vezu.

Kod veze s dva rukovanja ne postoji način da se utvrdi je li trenutna veza povijesna veza. Trosmjerno rukovanje omogućuje klijentu da odredi je li trenutna veza povijesna veza na temelju konteksta kada je spreman za slanje trećeg paketa:

1- Ako se radi o povijesnoj vezi (redni broj je istekao ili je isteklo vrijeme), paket poslan trećim rukovanjem je RST paket za prekid povijesne veze.
2- Ako se ne radi o povijesnoj vezi, paket poslan po treći put je ACK paket, a dvije strane koje komuniciraju uspješno uspostavljaju vezu.

Stoga je glavni razlog zašto TCP koristi trosmjerno rukovanje taj što inicijalizira vezu kako bi spriječio povijesne veze.

Razlog 2: Za sinkronizaciju početnih rednih brojeva obiju strana
Obje strane TCP protokola moraju održavati redni broj, što je ključni faktor za osiguranje pouzdanog prijenosa. Redni brojevi igraju važnu ulogu u TCP vezama. Oni rade sljedeće:

Prijemnik može eliminirati duple podatke i osigurati točnost podataka.

Primatelj može primati pakete prema redoslijedu broja kako bi se osigurao integritet podataka.

● Redni broj može identificirati paket podataka koji je primila druga strana, omogućujući pouzdan prijenos podataka.

Stoga, nakon uspostavljanja TCP veze, klijent šalje SYN pakete s početnim sekvencijskim brojem i zahtijeva od poslužitelja da odgovori ACK paketom koji označava uspješan prijem klijentovog SYN paketa. Zatim poslužitelj šalje SYN paket s početnim rednim brojem klijentu i čeka da klijent odgovori, jednom zauvijek, kako bi osigurao da su početni redoslijedni brojevi pouzdano sinkronizirani.

Sinkronizirajte početne serijske brojeve obiju strana

Iako je moguće i četverosmjerno rukovanje za pouzdanu sinkronizaciju početnih sekvencijskih brojeva obiju strana, drugi i treći korak mogu se kombinirati u jedan korak, što rezultira trosmjernim rukovanjem. Međutim, dva rukovanja mogu samo jamčiti da je početni redni broj jedne strane uspješno primljen od strane druge strane, ali ne postoji jamstvo da se početni redni broj obiju strana može potvrditi. Stoga je trosmjerno rukovanje najbolji izbor kako bi se osigurala stabilnost i pouzdanost TCP veza.

Razlog 3: Izbjegavajte rasipanje resursa
Ako postoji samo "dva rukovanja", kada je SYN zahtjev klijenta blokiran u mreži, klijent ne može primiti ACK paket koji šalje poslužitelj, pa će SYN biti ponovno poslan. Međutim, budući da nema trećeg rukovanja, poslužitelj ne može utvrditi je li klijent primio ACK potvrdu za uspostavljanje veze. Stoga poslužitelj može samo proaktivno uspostaviti vezu nakon što primi svaki SYN zahtjev. To dovodi do sljedećeg:

Gubitak resursa: Ako je klijentov SYN zahtjev blokiran, što rezultira ponavljanim prijenosom višestrukih SYN paketa, poslužitelj će uspostaviti više redundantnih nevažećih veza nakon što primi zahtjev. To dovodi do nepotrebnog rasipanja resursa poslužitelja.

Zadržavanje poruke: Zbog nedostatka trećeg rukovanja, poslužitelj nema načina da sazna je li klijent ispravno primio ACK potvrdu za uspostavljanje veze. Kao rezultat toga, ako poruke zapnu u mreži, klijent će stalno slati SYN zahtjeve iznova i iznova, uzrokujući da poslužitelj neprestano uspostavlja nove veze. To će povećati zagušenje mreže i kašnjenje te negativno utjecati na cjelokupnu izvedbu mreže.

Izbjegavajte rasipanje resursa

Stoga, kako bi se osigurala stabilnost i pouzdanost mrežne veze, TCP koristi trosmjerno rukovanje za uspostavljanje veze kako bi se izbjegla pojava ovih problema.

Sažetak
TheMrežni paketni posrednikUspostavljanje TCP veze vrši se trosmjernim rukovanjem. Tijekom trosmjernog rukovanja, klijent prvo šalje paket sa SYN zastavom poslužitelju, pokazujući da želi uspostaviti vezu. Nakon što primi zahtjev od klijenta, poslužitelj odgovara klijentu paketom sa zastavicama SYN i ACK, što pokazuje da je zahtjev za povezivanjem prihvaćen, i šalje svoj početni redni broj. Na kraju, klijent odgovara poslužitelju s ACK zastavicom kako bi označio da je veza uspješno uspostavljena. Dakle, dvije strane su u ESTABLISHED stanju i mogu početi slati podatke jedna drugoj.

Općenito, trosmjerni postupak rukovanja za uspostavu TCP veze osmišljen je kako bi se osigurala stabilnost i pouzdanost veze, izbjegla zabuna i rasipanje resursa zbog povijesnih veza te osiguralo da obje strane mogu primati i slati podatke.


Vrijeme objave: 8. siječnja 2025