Podešavanje TCP veze
Kada pretražujemo web, šaljemo e-poštu ili igramo online igricu, često ne razmišljamo o složenoj mrežnoj vezi koja stoji iza toga. Međutim, upravo ovi naizgled mali koraci osiguravaju stabilnu komunikaciju između nas i servera. Jedan od najvažnijih koraka je podešavanje TCP veze, a srž ovoga je trosmjerno 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 i koliko je važno za prijenos podataka. Sa dubljim razumijevanjem trosmjernog rukovanja, steći ćemo bolje razumijevanje osnovnih mehanizama mrežne komunikacije i jasniji uvid u pouzdanost TCP veza.
TCP trosmjerni proces rukovanja i tranzicije stanja
TCP je transportni protokol orijentisan na vezu, koji zahteva uspostavljanje veze pre prenosa podataka. Ovaj proces uspostavljanja veze obavlja se trosmjernim rukovanjem.
Pogledajmo bliže TCP pakete koji se šalju u svakoj konekciji.
U početku su i klijent i server ZATVORENI. Prvo, server aktivno sluša port i nalazi se u stanju LISTEN, što znači da server mora biti pokrenut. Zatim, klijent je spreman za pristup web stranici. Potrebno je uspostaviti vezu sa serverom. Format prvog paketa veze je sljedeći:
Kada klijent inicira vezu, generiše nasumični početni redni broj (client_isn) i stavlja ga u polje "Sequence number" u TCP zaglavlju. Istovremeno, klijent postavlja poziciju SYN zastavice na 1 kako bi označio da je odlazni paket SYN paket. Klijent pokazuje da želi uspostaviti vezu sa serverom slanjem prvog SYN paketa na server. Ovaj paket ne sadrži podatke sloja aplikacije (tj. poslane podatke). U ovom trenutku, status klijenta je označen kao SYN-SENT.
Kada server primi SYN paket od klijenta, on nasumično inicijalizira svoj vlastiti serijski broj (server_isn) i zatim stavlja taj broj u polje "Serial number" u TCP zaglavlju. Zatim, server unosi client_isn + 1 u polje "Broj potvrde" i postavlja i SYN i ACK bit na 1. Konačno, server šalje paket klijentu, koji ne sadrži podatke sa sloja aplikacije (kao ni podatke za server poslati). U ovom trenutku, server je u SYN-RCVD stanju.
Jednom kada klijent primi paket od servera, mora 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"; Na kraju, klijent šalje paket serveru. Ovaj paket može prenositi podatke od klijenta do servera. Po završetku ovih operacija, klijent će ući u ESTABLISHED stanje.
Jednom kada server primi paket odgovora od klijenta, on također prelazi u ESTABLISHED stanje.
Kao što možete vidjeti iz gornjeg procesa, kada se izvodi trosmjerno rukovanje, trećem rukovanju je dozvoljeno da prenosi podatke, ali prva dva rukovanja nisu. Ovo je pitanje koje se često postavlja na intervjuima. Nakon što je trosmjerno rukovanje završeno, obje strane ulaze u stanje ESTABLISHED, što ukazuje da je veza uspješno uspostavljena, u kom trenutku klijent i server mogu početi slati podatke jedan drugome.
Zašto tri rukovanja? Ne dva, četiri puta?
Uobičajeni odgovor je: "Zato što trostruko rukovanje garantuje mogućnost primanja i slanja." Ovaj odgovor je tačan, ali to je samo površinski razlog, ne navodi glavni razlog. U nastavku ću analizirati razloge trostrukog rukovanja sa tri aspekta kako bih produbio naše razumijevanje ovog pitanja.
Trosmjerno rukovanje može učinkovito izbjeći inicijalizaciju istorijski ponovljenih veza (glavni razlog)
Trosmjerno rukovanje garantuje da su obje strane dobile pouzdan početni redni broj.
Trosmjerno rukovanje izbjegava trošenje resursa.
Razlog 1: Izbjegavajte istorijske duple spojeve
Ukratko, glavni razlog za trosmjerno rukovanje je izbjegavanje zabune uzrokovane starom inicijalizacijom duple veze. U složenom mrežnom okruženju, prijenos paketa podataka se ne šalje uvijek do odredišnog hosta u skladu s određenim vremenom, a stari paketi podataka mogu prvo stići do odredišnog hosta zbog zagušenja mreže i drugih razloga. Da bi se to izbjeglo, TCP koristi trosmjerno rukovanje da uspostavi vezu.
Kada klijent uzastopno pošalje više paketa za uspostavljanje SYN veze, u situacijama kao što je zagušenje mreže, može se dogoditi sljedeće:
1- Stari SYN paketi stižu na server prije najnovijih SYN paketa.
2- Server će odgovoriti na SYN + ACK paket klijentu nakon što primi stari SYN paket.
3- Kada klijent primi SYN + ACK paket, on utvrđuje da je veza istorijska veza (broj sekvence je istekao ili je istekao) prema sopstvenom kontekstu, a zatim šalje RST paket serveru da prekine vezu.
Sa vezom sa dva rukovanja, ne postoji način da se utvrdi da li je trenutna veza istorijska veza. Trosmjerno rukovanje omogućava klijentu da odredi da li je trenutna veza historijska veza na osnovu konteksta kada je spremna za slanje trećeg paketa:
1- Ako se radi o istorijskoj vezi (broj sekvence je istekao ili je istekao), paket poslan trećim rukovanjem je RST paket za prekid historijske veze.
2- Ako nije istorijska veza, paket koji se šalje po treći put je ACK paket i dvije strane u komunikaciji 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: Sinhronizacija početnih redoslednih brojeva obe strane
Obje strane TCP protokola moraju održavati redni broj, što je ključni faktor za osiguranje pouzdanog prijenosa. Brojevi sekvenci igraju važnu ulogu u TCP vezama. Oni rade sljedeće:
Prijemnik može eliminirati duple podatke i osigurati tačnost podataka.
Prijemnik može primati pakete po redoslijedu rednog broja kako bi osigurao integritet podataka.
● Redni broj može identifikovati paket podataka koji je primila druga strana, omogućavajući pouzdan prenos podataka.
Stoga, nakon uspostavljanja TCP veze, klijent šalje SYN pakete sa početnim redoslednim brojem i zahteva od servera da odgovori sa ACK paketom koji ukazuje na uspešan prijem klijentovog SYN paketa. Zatim, server šalje SYN paket sa početnim rednim brojem klijentu i čeka da klijent odgovori, jednom za svagda, kako bi osigurao da su početni brojevi sekvence pouzdano sinhronizovani.
Iako je četverosmjerno rukovanje također moguće za pouzdanu sinhronizaciju početnih rednih brojeva obje strane, 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 garancija da se početni redni broj obje strane 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 klijentski SYN zahtjev blokiran u mreži, klijent ne može primiti ACK paket koji šalje server, pa će SYN biti ponovo poslan. Međutim, pošto ne postoji treće rukovanje, server ne može utvrditi da li je klijent primio ACK potvrdu za uspostavljanje veze. Stoga server može samo proaktivno uspostaviti vezu nakon što primi svaki SYN zahtjev. To dovodi do sljedećeg:
Rasipanje resursa: Ako je klijentov SYN zahtjev blokiran, što rezultira ponovljenim prijenosom višestrukih SYN paketa, server će uspostaviti više redundantnih nevažećih veza nakon što primi zahtjev. Ovo dovodi do nepotrebnog trošenja serverskih resursa.
Zadržavanje poruke: Zbog nedostatka trećeg rukovanja, server nema načina da sazna da li je klijent ispravno primio ACK potvrdu za uspostavljanje veze. Kao rezultat toga, ako se poruke zaglave u mreži, klijent će nastaviti da šalje SYN zahtjeve iznova i iznova, uzrokujući da server stalno uspostavlja nove veze. Ovo će povećati zagušenje mreže i kašnjenje i negativno uticati na ukupne performanse mreže.
Stoga, kako bi se osigurala stabilnost i pouzdanost mrežne veze, TCP koristi trosmjerno rukovanje da uspostavi vezu kako bi se izbjegla pojava ovih problema.
Rezime
TheBroker mrežnih paketaUspostavljanje TCP veze vrši se trosmjernim rukovanjem. Tokom trosmjernog rukovanja, klijent prvo šalje serveru paket sa SYN zastavicom, što ukazuje da želi uspostaviti vezu. Nakon što primi zahtjev od klijenta, server klijentu odgovara na paket sa SYN i ACK zastavicama, što ukazuje da je zahtjev za povezivanje prihvaćen, i šalje svoj vlastiti početni redni broj. Konačno, klijent odgovara serveru sa ACK zastavicom kako bi naznačio da je veza uspješno uspostavljena. Dakle, dvije strane su u ESTABLISHED stanju i mogu početi slati podatke jedna drugoj.
Općenito, proces trosmjernog rukovanja za uspostavljanje TCP veze je dizajniran da osigura stabilnost i pouzdanost veze, izbjegne zabunu i rasipanje resursa u vezi sa istorijskim vezama i osigura da obje strane mogu primati i slati podatke.
Vrijeme objave: Jan-08-2025