Kľúčové záhady TCP pripojení sieťového brokera paketov: Demystifikovaná potreba trojitého handshake

Nastavenie TCP pripojenia
Keď prehliadame web, posielame e-maily alebo hráme online hry, často nepremýšľame o zložitom sieťovom pripojení, ktoré sa za tým skrýva. 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 pripojenia a jeho jadrom je trojcestné nadviazanie spojenia.

Tento článok podrobne rozoberie princíp, proces a dôležitosť trojcestného handshake. Krok za krokom vysvetlíme, prečo je trojcestný handshake potrebný, ako zabezpečuje stabilitu a spoľahlivosť pripojenia a aký je dôležitý pre prenos dát. S hlbším pochopením trojcestného handshake získame lepšie pochopenie základných mechanizmov sieťovej komunikácie a jasnejší pohľad na spoľahlivosť TCP pripojení.

Trojcestný proces handshake protokolu TCP a prechody stavov
TCP je transportný protokol orientovaný na pripojenie, ktorý vyžaduje nadviazanie spojenia pred prenosom dát. Tento proces nadväzovania spojenia sa vykonáva trojstranným handshake.

 Trojcestné naviazanie spojenia TCP

Pozrime sa bližšie na TCP pakety, ktoré sa odosielajú v každom pripojení.

Spočiatku sú klient aj server ZATVORENÉ. Najprv server aktívne počúva na porte a je v stave LISTEN, čo znamená, že server musí byť spustený. Následne je klient pripravený začať pristupovať k webovej stránke. Musí nadviazať spojenie so serverom. Formát prvého paketu pripojenia je nasledovný:

 SYN paket

Keď klient iniciuje pripojenie, vygeneruje náhodné počiatočné poradové číslo (client_isn) a umiestni ho do poľa „Poradové číslo“ v hlavičke TCP. Zároveň klient nastaví príznak SYN na 1, aby označil, že odchádzajúci paket je SYN paket. Klient signalizuje, že chce nadviazať spojenie so serverom odoslaním prvého SYN paketu 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.

Paket SYN+ACK

Keď server prijme od klienta paket SYN, 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. Následne server zadá client_isn + 1 do poľa „Potvrdzovacie číslo“ a nastaví bity SYN aj ACK na 1. Nakoniec server odošle klientovi paket, ktorý neobsahuje žiadne dáta aplikačnej vrstvy (a žiadne dáta, ktoré by mal server odoslať). V tomto čase je server v stave SYN-RCVD.

ACK paket

Keď klient prijme paket zo servera, musí vykonať nasledujúce optimalizácie, aby odpovedal na finálny paket odpovede: Najprv klient nastaví bit ACK v TCP hlavičke paketu odpovede na 1; potom 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í klient prejde do stavu ESTABLISHED (VYTVORENÉ).

Keď server prijme odpoveďový paket od klienta, tiež sa prepne do stavu ESTABLISHED.

Ako vidíte z vyššie uvedeného postupu, pri vykonávaní trojstranného handshake môže tretí handshake prenášať dáta, ale prvé dva handshake nie. Toto je otázka, ktorá sa často kladie v pohovoroch. Po dokončení trojstranného handshake obe strany vstúpia do stavu ESTABLISHED (NAVEDENÝ), čo znamená, že spojenie bolo úspešne nadviazané, v takom prípade si klient a server môžu začať navzájom posielať dáta.

Prečo tri podania rúk? Nie dvakrát, štyrikrát?
Bežná odpoveď je: „Pretože trojité podanie ruky zaručuje možnosť 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 budem analyzovať dôvody trojitého podania ruky z troch hľadísk, aby sme prehĺbili naše pochopenie tejto problematiky.

Trojcestné handshake môže efektívne zabrániť inicializácii historicky opakovaných spojení (hlavný dôvod)
Trojstranné handshake zaručuje, že obe strany dostali spoľahlivé počiatočné poradové číslo.
Trojstranné podávanie rúk zabraňuje plytvaniu zdrojmi.

Dôvod 1: Vyhnite sa historickým duplicitným spojom
Stručne povedané, hlavným dôvodom trojcestného handshake je vyhnúť sa zmätku spôsobenému starou duplicitnou inicializáciou pripojenia. V zložitom sieťovom prostredí nie je prenos dátových paketov vždy odoslaný cieľovému hostiteľovi v súlade so zadaným časom a staré dátové pakety môžu do cieľového hostiteľa doraziť ako prvé kvôli preťaženiu siete a iným dôvodom. Aby sa tomu predišlo, TCP používa na nadviazanie spojenia trojcestný handshake.

trojcestné handshake zabraňuje historickým duplicitným pripojeniam

Keď klient odošle viacero paketov na nadviazanie pripojenia SYN za sebou, v situáciách, ako je napríklad preťaženie siete, môže dôjsť k nasledujúcemu:

1. Staré SYN pakety dorazia na server pred najnovšími SYN paketmi.
2- Server po prijatí starého SYN paketu odpovie klientovi paketom SYN + ACK.
3- Keď klient dostane paket SYN + ACK, na základe svojho kontextu určí, že ide o historické pripojenie (poradie vypršalo alebo časový limit uplynul) a potom odošle serveru paket RST, aby ukončil pripojenie.

Pri dvojstrannom handshake pripojení nie je možné určiť, či je aktuálne pripojenie historické. Trojstranné handshake umožňuje klientovi určiť, či je aktuálne pripojenie historické na základe kontextu, keď je pripravený odoslať tretí paket:

1 – Ak ide o historické pripojenie (poradie vypršalo alebo uplynul časový limit), paket odoslaný tretím nadviazaním spojenia je paket RST na ukončenie historického pripojenia.
2. Ak nejde o historické pripojenie, paket odoslaný tretíkrát je paket ACK a obe komunikujúce strany úspešne nadviažu pripojenie.

Hlavným dôvodom, prečo TCP používa trojcestné nadviazanie spojenia, je preto inicializácia pripojenia, aby sa zabránilo vzniku historických pripojení.

Dôvod 2: Synchronizácia počiatočných poradových čísel oboch strán
Obe strany protokolu TCP musia udržiavať poradové číslo, ktoré je kľúčovým faktorom pre zabezpečenie spoľahlivého prenosu. Poradové čísla hrajú dôležitú úlohu v pripojeniach TCP. Robia nasledovné:

Prijímač môže eliminovať duplicitné údaje a zabezpečiť ich presnosť.

Prijímač môže prijímať pakety v poradí podľa poradového čísla, aby sa zabezpečila integrita údajov.

● Poradie číslo dokáže identifikovať dátový paket, ktorý prijala druhá strana, čo umožňuje spoľahlivý prenos dát.

Preto po nadviazaní TCP pripojenia klient odošle SYN pakety s počiatočným poradovým číslom a vyžaduje, aby server odpovedal ACK paketom, ktorý indikuje úspešné prijatie SYN paketu klienta. Server potom odošle SYN paket s počiatočným poradovým číslom klientovi a čaká na odpoveď klienta, raz a navždy, aby sa zabezpečila spoľahlivá synchronizácia počiatočných poradových čísel.

Synchronizujte počiatočné sériové čísla oboch strán

Hoci je možné spoľahlivo synchronizovať počiatočné poradové čísla oboch strán aj štvorstranným handshakeom, druhý a tretí krok je možné spojiť do jedného, ​​čo vedie k trojstrannému handshake. Tieto dve handshake však môžu zaručiť iba 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ý handshake najlepšou voľbou na zabezpečenie stability a spoľahlivosti TCP pripojení.

Dôvod 3: Zabráňte plytvaniu zdrojmi
Ak existuje iba „dvojité handshake“, keď je SYN požiadavka klienta blokovaná v sieti, klient nemôže prijať ACK paket odoslaný serverom, takže SYN bude odoslaný znova. Keďže však neexistuje tretie handshake, server nemôže určiť, či klient dostal potvrdenie ACK na nadviazanie spojenia. Server preto môže proaktívne nadviazať spojenie až po prijatí každej SYN požiadavky. To vedie k nasledujúcemu:

Plytvanie zdrojmi: Ak je SYN požiadavka klienta zablokovaná, čo vedie k opakovanému prenosu viacerých SYN paketov, server po prijatí požiadavky vytvorí viacero redundantných neplatných pripojení. To vedie k zbytočnému plytvaniu zdrojmi servera.

Zadržiavanie správ: Kvôli absencii tretieho handshake server nemá ako zistiť, či klient správne prijal potvrdenie ACK na nadviazanie spojenia. V dôsledku toho, ak sa správy v sieti zaseknú, klient bude neustále odosielať požiadavky SYN, čo spôsobí, že server bude neustále nadväzovať nové pripojenia. To zvýši preťaženie a oneskorenie siete a negatívne ovplyvní celkový výkon siete.

Zabráňte plytvaniu zdrojmi

Preto, aby sa zabezpečila stabilita a spoľahlivosť sieťového pripojenia, TCP používa trojcestné nadviazanie spojenia, aby sa predišlo výskytu týchto problémov.

Zhrnutie
Ten/Tá/ToSprostredkovateľ sieťových paketovNadviazanie TCP spojenia sa vykonáva trojcestným handshake. Počas trojcestného handshake klient najprv odošle serveru paket s príznakom SYN, č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 požiadavka na pripojenie bola prijatá, a odošle svoje vlastné počiatočné poradové číslo. Nakoniec klient odpovie serveru príznakom ACK, čo znamená, že spojenie bolo úspešne nadviazané. Obe strany sú teda v stave ESTABLISHED (NAVEDENÝ) a môžu si začať navzájom posielať dáta.

Vo všeobecnosti je trojcestný proces handshake pre nadviazanie TCP pripojenia navrhnutý tak, aby zabezpečil stabilitu a spoľahlivosť pripojenia, predišiel zmätku a plytvaniu zdrojmi pri historických pripojeniach a zabezpečil, aby obe strany boli schopné prijímať a odosielať dáta.


Čas uverejnenia: 8. januára 2025