Nastavenie pripojenia TCP
Keď si prezeráme web, posielame e-maily alebo hráme online hru, často nemyslíme na zložité sieťové pripojenie, ktoré je za tým. Práve tieto zdanlivo malé kroky však zabezpečujú stabilnú komunikáciu medzi nami a serverom. Jedným z najdôležitejších krokov je nastavenie TCP spojenia a jadrom je trojstranné podanie ruky.
Tento článok podrobne rozoberie princíp, proces a dôležitosť trojstranného podania ruky. Krok za krokom si vysvetlíme, prečo je trojstranné podanie ruky potrebné, ako zaisťuje stabilitu a spoľahlivosť pripojenia a aké dôležité je pre prenos dát. S hlbším pochopením trojstranného podania ruky získame lepšie pochopenie základných mechanizmov sieťovej komunikácie a jasnejší pohľad na spoľahlivosť TCP spojení.
TCP Trojcestný proces handshake a prechody stavov
TCP je prenosový protokol orientovaný na spojenie, ktorý vyžaduje vytvorenie spojenia pred prenosom údajov. Tento proces nadviazania spojenia sa uskutočňuje trojstranným podaním ruky.
Pozrime sa bližšie na TCP pakety, ktoré sa odosielajú pri každom spojení.
Na začiatku sú klient aj server ZATVORENÉ. Po prvé, server aktívne počúva na porte a je v stave LISTEN, čo znamená, že server musí byť spustený. Potom je klient pripravený začať pristupovať na webovú stránku. Potrebuje nadviazať spojenie so serverom. Formát prvého paketu pripojenia je nasledujúci:
Keď klient iniciuje spojenie, vygeneruje náhodné počiatočné poradové číslo (client_isn) a umiestni ho do poľa "Sekvenčné číslo" hlavičky TCP. Klient zároveň nastaví pozíciu príznaku SYN na 1, čím označí, že odchádzajúci paket je paket SYN. Klient uvedie, že chce nadviazať spojenie so serverom odoslaním prvého paketu SYN na server. Tento paket neobsahuje dáta aplikačnej vrstvy (t. j. odoslané dáta). V tomto bode je stav klienta označený ako SYN-SENT.
Keď server prijme paket SYN od klienta, náhodne inicializuje svoje vlastné sériové číslo (server_isn) a potom toto číslo vloží do poľa „Sériové číslo“ v hlavičke TCP. Potom server zadá client_isn + 1 do poľa „Číslo potvrdenia“ a nastaví bity SYN aj ACK na 1. Nakoniec server odošle paket klientovi, ktorý neobsahuje žiadne údaje na aplikačnej vrstve (a žiadne údaje pre server poslať). V súčasnosti je server v stave SYN-RCVD.
Keď klient prijme paket zo servera, musí vykonať nasledujúce optimalizácie, aby odpovedal na konečný paket odpovede: Najprv klient nastaví bit ACK hlavičky TCP paketu odpovede na 1; Po druhé, klient zadá hodnotu server_isn + 1 do poľa "Potvrdiť číslo odpovede"; Nakoniec klient odošle paket na server. Tento paket môže prenášať dáta z klienta na server. Po dokončení týchto operácií sa klient dostane do stavu ZALOŽENÝ.
Keď server prijme paket odpovede od klienta, prepne sa tiež do stavu ESTABLISHED.
Ako môžete vidieť z vyššie uvedeného procesu, pri vykonávaní trojstranného podania ruky je povolené, aby tretie podanie ruky prenášalo dáta, ale prvé dve podanie ruky nie. To je otázka, ktorá sa často pýta na rozhovoroch. Po dokončení trojstranného nadviazania spojenia sa obe strany dostanú do stavu ESTABLISHED, čo znamená, že spojenie bolo úspešne nadviazané, v tomto bode si klient a server môžu začať navzájom posielať údaje.
Prečo tri podania rúk? Nie dvakrát, štyrikrát?
Bežná odpoveď znie: "Pretože trojstranné podanie ruky zaručuje schopnosť prijímať a odosielať." Táto odpoveď je správna, ale je to len povrchný dôvod, neuvádza hlavný dôvod. V nasledujúcom texte rozoberiem dôvody trojitého podania ruky z troch aspektov, aby sme prehĺbili naše chápanie tejto problematiky.
Trojstranné podanie ruky môže účinne zabrániť inicializácii historicky opakovaných pripojení (hlavný dôvod)
Trojstranné podanie ruky zaručuje, že obe strany dostali spoľahlivé počiatočné poradové číslo.
Trojstranné podanie ruky zabráni plytvaniu zdrojmi.
Dôvod 1: Vyhnite sa historickým duplicitným spojeniam
Stručne povedané, hlavným dôvodom trojstranného podania ruky je vyhnúť sa nejasnostiam spôsobeným inicializáciou starého duplicitného pripojenia. V zložitom sieťovom prostredí sa prenos dátových paketov nie vždy odosiela do cieľového hostiteľa v súlade s určeným časom a staré dátové pakety môžu doraziť na cieľový hostiteľ ako prvé z dôvodu preťaženia siete a iných dôvodov. Aby sa tomu predišlo, TCP používa na nadviazanie spojenia trojstranný handshake.
Keď klient odošle viacero paketov nadviazania spojenia SYN za sebou, v situáciách, ako je preťaženie siete, môže nastať nasledovné:
1- Staré SYN pakety dorazia na server skôr ako najnovšie SYN pakety.
2- Server odpovie na paket SYN + ACK klientovi po prijatí starého paketu SYN.
3- Keď klient prijme paket SYN + ACK, určí, že spojenie je historické spojenie (vypršala platnosť poradového čísla alebo časový limit) podľa vlastného kontextu a potom pošle paket RST na server, aby spojenie prerušil.
Pri spojení dvoch rúk neexistuje spôsob, ako určiť, či je súčasné spojenie historickým spojením. Trojstranné nadviazanie spojenia umožňuje klientovi určiť, či je aktuálne spojenie historickým spojením na základe kontextu, keď je pripravený na odoslanie tretieho paketu:
1- Ak ide o historické spojenie (vypršala platnosť poradového čísla alebo časový limit), paket odoslaný tretím nadviazaním spojenia je paket RST na prerušenie historického spojenia.
2- Ak nejde o historické spojenie, paket odoslaný tretíkrát je ACK paket a dve komunikujúce strany úspešne nadviažu spojenie.
Preto hlavným dôvodom, prečo TCP používa trojstranné podanie ruky, je to, že inicializuje pripojenie, aby sa zabránilo historickým pripojeniam.
Dôvod 2: Synchronizácia počiatočných sekvenčných čísel oboch strán
Obe strany protokolu TCP musia udržiavať poradové číslo, ktoré je kľúčovým faktorom na zabezpečenie spoľahlivého prenosu. Sekvenčné čísla hrajú dôležitú úlohu v TCP spojeniach. Robia nasledovné:
Prijímač dokáže eliminovať duplicitné údaje a zabezpečiť presnosť údajov.
Prijímač môže prijímať pakety v poradí podľa poradového čísla, aby sa zabezpečila integrita dát.
● Poradové číslo môže identifikovať dátový paket, ktorý prijala druhá strana, čo umožňuje spoľahlivý prenos dát.
Preto po nadviazaní TCP spojenia klient posiela SYN pakety s počiatočným sekvenčným číslom a vyžaduje, aby server odpovedal ACK paketom indikujúcim úspešné prijatie klientovho SYN paketu. Potom server odošle paket SYN s počiatočným poradovým číslom klientovi a čaká, kým klient raz a navždy odpovie, aby sa zabezpečila spoľahlivá synchronizácia počiatočných poradových čísel.
Hoci je možné aj štvorstranným podaním ruky spoľahlivo zosynchronizovať počiatočné poradové čísla oboch strán, druhý a tretí krok je možné spojiť do jedného kroku, výsledkom čoho je trojstranné podanie ruky. Avšak podanie dvoch rúk môže zaručiť len to, že počiatočné poradové číslo jednej strany bude úspešne prijaté druhou stranou, ale neexistuje žiadna záruka, že počiatočné poradové číslo oboch strán bude možné potvrdiť. Preto je trojstranné podanie ruky najlepšou voľbou na zabezpečenie stability a spoľahlivosti TCP spojení.
Dôvod 3: Vyhnite sa plytvaniu zdrojmi
Ak dôjde iba k „dvom handshake“, keď je požiadavka klienta SYN v sieti zablokovaná, klient nemôže prijať ACK paket odoslaný serverom, takže SYN bude odoslaný znova. Keďže však neexistuje žiadne tretie nadviazanie spojenia, server nemôže určiť, či klient dostal potvrdenie ACK na vytvorenie spojenia. Server preto môže proaktívne nadviazať spojenie až po prijatí každej požiadavky SYN. To vedie k nasledovnému:
Plytvanie zdrojmi: Ak je klientova požiadavka SYN zablokovaná, čo vedie k opakovanému prenosu viacerých SYN paketov, server po prijatí požiadavky vytvorí viac redundantných neplatných spojení. To vedie k zbytočnému plytvaniu zdrojmi servera.
Uchovanie správ: V dôsledku chýbajúceho tretieho nadviazania spojenia nemá server žiadny spôsob, ako zistiť, či klient správne prijal potvrdenie ACK na vytvorenie spojenia. Výsledkom je, že ak sa správy zaseknú v sieti, klient bude stále znova a znova odosielať požiadavky SYN, čo spôsobí, že server bude neustále nadväzovať nové spojenia. To zvýši preťaženie siete a oneskorenie a negatívne ovplyvní celkový výkon siete.
Preto, aby sa zabezpečila stabilita a spoľahlivosť sieťového pripojenia, TCP používa trojstranný handshake na vytvorenie spojenia, aby sa zabránilo výskytu týchto problémov.
Zhrnutie
TheSprostredkovateľ sieťových paketovNadviazanie spojenia TCP sa vykonáva trojstranným podaním ruky. Počas trojstrannej komunikácie klient najprv odošle paket s príznakom SYN na server, čo znamená, že chce nadviazať spojenie. Po prijatí požiadavky od klienta server odpovie klientovi paketom s príznakmi SYN a ACK, čo znamená, že žiadosť o pripojenie je prijatá, a odošle svoje vlastné počiatočné poradové číslo. Nakoniec klient odpovie serveru ACK príznakom, ktorý indikuje, že spojenie bolo úspešne nadviazané. Obe strany sú teda v stave ESTABLISHED a môžu si začať navzájom posielať dáta.
Vo všeobecnosti je trojstranný proces handshake pre nadviazanie pripojenia TCP navrhnutý tak, aby zabezpečil stabilitu a spoľahlivosť pripojenia, zabránil zmätku a plytvaniu zdrojmi v súvislosti s historickými pripojeniami a zabezpečil, že obe strany budú môcť prijímať a odosielať údaje.
Čas odoslania: Jan-08-2025