Ključne misterije TCP veza mrežnog brokera paketa: Demistificirana potreba 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. Međutim, 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 trostrano rukovanje.

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

TCP proces trosmjernog rukovanja i prijelazi stanja
TCP je transportni protokol orijentiran na konekciju koji zahtijeva uspostavljanje veze prije prijenosa podataka. Ovaj proces uspostavljanja veze vrši se trostrukim 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 osluškuje port i nalazi se u stanju SLUŠAJ, što znači da poslužitelj mora biti pokrenut. Zatim je klijent spreman za početak pristupa web stranici. Mora uspostaviti vezu sa poslužiteljem. Format prvog paketa za povezivanje je sljedeći:

 SYN paket

Kada klijent inicira vezu, generira slučajni početni redni broj (client_isn) i smješta ga u polje "Redni broj" TCP zaglavlja. Istovremeno, klijent postavlja SYN zastavicu na 1 kako bi naznačio da je odlazni paket SYN paket. Klijent označava da želi uspostaviti vezu s poslužiteljem slanjem prvog SYN paketa poslužitelju. Ovaj paket ne sadrži podatke aplikacijskog sloja (tj. poslane podatke). U ovom trenutku, status klijenta je označen kao SYN-SENT.

SYN+ACK paket

Kada poslužitelj primi SYN paket od klijenta, nasumično inicijalizira vlastiti serijski broj (server_isn) i zatim taj broj stavlja u polje "Serijski broj" TCP zaglavlja. Zatim poslužitelj unosi client_isn + 1 u polje "Broj potvrde" i postavlja i SYN i ACK bitove na 1. Konačno, poslužitelj šalje paket klijentu, koji ne sadrži podatke aplikacijske razine (i nema podataka koje poslužitelj treba 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 unosi vrijednost server_isn + 1 u polje "Potvrdi broj odgovora"; Konačno, 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 prelazi u stanje ESTABLISHED.

Kao što možete vidjeti iz gornjeg postupka, prilikom izvođenja trostranog rukovanja, treće rukovanje smije prenositi podatke, ali prva dva ne. Ovo je pitanje koje se često postavlja u intervjuima. Nakon što je trostrano rukovanje završeno, obje strane ulaze u stanje USPOSTAVLJENO, što ukazuje na to da je veza uspješno uspostavljena, u kojem trenutku klijent i poslužitelj mogu početi slati podatke jedan drugome.

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

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

Razlog 1: Izbjegavanje povijesnih dupliciranih spajanja
Ukratko, glavni razlog za trostrano rukovanje je izbjegavanje zbrke uzrokovane starom inicijalizacijom duplikata veze. U složenom mrežnom okruženju, prijenos podatkovnih paketa ne šalje se uvijek odredišnom hostu u skladu s navedenim vremenom, a stari podatkovni paketi mogu prvi stići na odredišni host zbog zagušenja mreže i drugih razloga. Kako bi se to izbjeglo, TCP koristi trostrano rukovanje za uspostavljanje veze.

trostrano rukovanje izbjegava povijesne duplicirane veze

Kada klijent šalje više SYN paketa za uspostavljanje 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 SYN + ACK paketom klijentu nakon što primi stari SYN paket.
3- Kada klijent primi SYN + ACK paket, utvrđuje da je veza povijesna veza (istekao je slijedni broj ili je isteklo vrijeme) prema vlastitom kontekstu, a zatim šalje RST paket poslužitelju kako bi prekinuo vezu.

S dvostrukim rukovanjem ne postoji način da se utvrdi je li trenutna veza povijesna veza. Trostruko rukovanje omogućuje klijentu da utvrdi je li trenutna veza povijesna veza na temelju konteksta kada je spreman poslati treći paket:

1- Ako se radi o povijesnoj vezi (istekao je redni broj 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 treći put je ACK paket i dvije strane koje komuniciraju uspješno uspostavljaju vezu.

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

Razlog 2: Sinkroniziranje početnih slijednih brojeva obje strane
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:

Primatelj može ukloniti duplicirane podatke i osigurati točnost podataka.

Prijemnik može primati pakete redoslijedom sekvencijalnog broja kako bi se osigurala cjelovitost podataka.

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

Stoga, nakon uspostavljanja TCP veze, klijent šalje SYN pakete s početnim sekvencijalnim 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 sekvencijalnim brojem klijentu i čeka da klijent odgovori, jednom zauvijek, kako bi se osiguralo da su početni sekvencijski brojevi pouzdano sinkronizirani.

Sinkronizirajte početne serijske brojeve obje strane

Iako je rukovanje s četiri strane također moguće za pouzdanu sinkronizaciju početnih slijednih brojeva obje strane, drugi i treći korak mogu se kombinirati u jedan korak, što rezultira rukovanjem s tri strane. Međutim, dva rukovanja mogu jamčiti samo da će druga strana uspješno primiti početni slijedni broj jedne strane, ali ne postoji jamstvo da se početni slijedni broj obje strane može potvrditi. Stoga je rukovanje s tri strane najbolji izbor kako bi se osigurala stabilnost i pouzdanost TCP veza.

Razlog 3: Izbjegavajte rasipanje resursa
Ako postoji samo "dvostruko rukovanje", kada je SYN zahtjev klijenta blokiran u mreži, klijent ne može primiti ACK paket koji je poslao 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 proaktivno uspostaviti vezu samo nakon što primi svaki SYN zahtjev. To dovodi do sljedećeg:

Rasipanje resursa: Ako je SYN zahtjev klijenta blokiran, što rezultira ponovljenim slanjem više SYN paketa, poslužitelj će uspostaviti više redundantnih nevažećih veza nakon primitka zahtjeva. To dovodi do nepotrebnog rasipanja resursa poslužitelja.

Zadržavanje poruka: 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 se poruke zaglave u mreži, klijent će stalno slati SYN zahtjeve, uzrokujući da poslužitelj stalno uspostavlja nove veze. To će povećati zagušenje mreže i kašnjenje te negativno utjecati na ukupne performanse 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 posrednik paketaUspostavljanje TCP veze vrši se trostrukim rukovanjem. Tijekom trostrukog rukovanja, klijent prvo šalje paket sa SYN zastavicom poslužitelju, što ukazuje da želi uspostaviti vezu. Nakon što primi zahtjev od klijenta, poslužitelj odgovara paketom sa SYN i ACK zastavicama klijentu, što ukazuje da je zahtjev za povezivanje prihvaćen, te šalje vlastiti početni slijedni broj. Konačno, klijent odgovara ACK zastavicom poslužitelju kako bi naznačio da je veza uspješno uspostavljena. Dakle, dvije strane su u USPOSTAVLJENOM stanju i mogu početi slati podatke jedna drugoj.

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


Vrijeme objave: 08.01.2025.