Nastavenie pripojenia TCP
Keď prehliadame web, pošleme e -mail alebo prehráme online hru, často nemyslíme na komplexné sieťové pripojenie za ním. 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 pripojenia TCP a jadrom tohto je trojcestné podanie ruky.
Tento článok bude podrobne diskutovať o zásade, procese a dôležitosti trojsmerného podania rúk. Krok za krokom vysvetlíme, prečo je potrebný trojstranný handshake, ako zaisťuje stabilitu a spoľahlivosť pripojenia a aká dôležitá je pre prenos údajov. S hlbším porozumením trojsmerného podania rúk získame lepšie pochopenie základných mechanizmov sieťovej komunikácie a jasnejšieho pohľadu na spoľahlivosť pripojení TCP.
TCP Trojsmerný proces podania ruky a prechody stavu
TCP je transportný protokol zameraný na pripojenie, ktorý vyžaduje pred prenosom údajov vytvorenie pripojenia. Tento proces vytvorenia pripojenia sa vykonáva trojstranný handshake.
Pozrime sa bližšie na pakety TCP, ktoré sa odosielajú v každom pripojení.
Klient aj server sú spočiatku uzavreté. Po prvé, server aktívne počúva na porte a je v stave počúvania, čo znamená, že server sa musí spustiť. Ďalej je klient pripravený začať s prístupom na webovú stránku. Musí nadviazať spojenie so serverom. Formát prvého paketu pripojenia je nasledujúci:
Keď klient iniciuje pripojenie, vygeneruje náhodné počiatočné sekvenčné číslo (klient_isn) a umiestni ho do poľa „sekvenčné číslo“ hlavičky TCP. Zároveň klient nastaví pozíciu Syn Flag na 1, aby naznačil, že odchádzajúci paket je paket SYN. Klient naznačuje, že chce nadviazať spojenie so serverom zaslaním prvého paketu SYN na server. Tento paket neobsahuje údaje o vrstve aplikačnej vrstvy (tj odoslané údaje). V tomto okamihu je stav klienta označený ako syn.
Keď server dostane paket SYN od klienta, náhodne inicializuje svoje vlastné sériové číslo (server_isn) a potom vloží toto číslo do poľa „sériového čísla“ hlavičky TCP. Ďalej server zadá Client_isn + 1 do poľa „Potvrdenie čísla“ a nastaví bity SYN aj ACK na 1. Nakoniec server odošle paket klientovi, ktorý neobsahuje žiadne údaje z aplikačných vrstiev (a žiadne údaje pre server na odoslanie). V súčasnosti je server v stave Syn-RCVD.
Akonáhle klient dostane paket zo servera, musí vykonať nasledujúce optimalizácie, aby odpovedal na finálny paket odpovede: Po prvé, klient nastaví ACK bit hlavičky TCP v pakete odpovede na 1; Po druhé, klient zadá do poľa Value Server_isn + 1 do poľa „Potvrdiť číslo odpovede“; Nakoniec klient pošle paket na server. Tento paket môže prenášať údaje od klienta na server. Po dokončení týchto operácií klient vstúpi do zavedeného štátu.
Akonáhle server dostane od klienta paket odpovede, prepne sa aj do zavedeného stavu.
Ako vidíte z vyššie uvedeného procesu, pri vykonávaní trojsmerného potrasenia rúk môže tretie podanie handshake prenášať údaje, ale prvé dve potrasenie rúk nie sú. To je otázka, ktorá sa často kladie v rozhovoroch. Po dokončení trojstranného handshake, obe strany zadajú zavedený stav, čo naznačuje, že spojenie bolo úspešne nadviazané, kedy môže klient a server začať odosielať údaje navzájom.
Prečo tri handshakes? Nie dvakrát, štyrikrát?
Spoločná odpoveď je: „Pretože trojsmerné podanie ruky zaručuje schopnosť prijímať a odosielať.“ Táto odpoveď je správna, ale je to iba povrchový dôvod, ktorý nepredstavuje hlavný dôvod. V nasledujúcom texte budem analyzovať dôvody na trojnásobné podanie ruky z troch aspektov, aby som prehĺbil naše chápanie tohto problému.
Trojsmerné podanie ruky sa môže účinne vyhnúť inicializácii historicky opakovaných spojení (hlavný dôvod)
Trojsmerné podanie ruky zaručuje, že obe strany dostali spoľahlivé počiatočné sekvenčné číslo.
Trojsmerné podanie ruky sa vyhýba plytvaniu zdrojom.
Dôvod 1: Vyhnite sa historickým duplikátom pripojení
Stručne povedané, hlavným dôvodom trojsmerného podania ruky je vyhnúť sa zámene spôsobeným starým inicializáciou duplikátu pripojenia. V komplexnom sieťovom prostredí sa prenos dátových paketov nie vždy odosiela na cieľovom hostiteľovi v súlade so špecifikovaným časom a staré dátové pakety môžu doraziť na cieľového hostiteľa ako prvý z dôvodu preťaženia siete a ďalších dôvodov. Aby sa tomu zabránilo, TCP používa na nadviazanie spojenia trojcestné podanie ruky.
Keď klient pošle postupne viacerých paketov pripájania SYN, v situáciách, ako je preťaženie siete, sa môžu vyskytnúť nasledujúce:
1- Staré pakety SYN dorazia na server pred najnovšími paketmi SYN.
2- server odpovie klientovi syn + ACK paket po prijatí starého paketu SYN.
3- Keď klient dostane paket Syn + ACK, zistí, že pripojenie je historické pripojenie (vypršané číslo sekvencie alebo časový limit) podľa vlastného kontextu a potom odošle paket RST na server, aby prerušil pripojenie.
Pri pripojení k dvoma handshake neexistuje spôsob, ako zistiť, či je súčasným pripojením historické spojenie. Trojsmerné handshake umožňuje klientovi určiť, či je súčasné pripojenie historické pripojenie založené na kontexte, keď je pripravené na odoslanie tretieho paketu:
1- Ak ide o historické pripojenie (vypršanie sekvencie alebo časový limit), paket zaslaný tretím handshake je paketom RST na prerušenie historického pripojenia.
2- Ak to nie je historické spojenie, paket odoslaný po tretíkrát je paket ACK a dve komunikačné strany úspešne nadviažu spojenie.
Preto hlavným dôvodom, prečo TCP používa trojsmerné podanie ruky, je to, že inicializuje spojenie, aby sa zabránilo historickým spojením.
Dôvod 2: Na synchronizáciu počiatočných sekvenčných čísel oboch strán
Obe strany protokolu TCP musia udržiavať sekvenčné číslo, ktoré je kľúčovým faktorom na zabezpečenie spoľahlivého prenosu. Čísla sekvencií hrajú dôležitú úlohu v pripojení TCP.
Prijímač môže eliminovať duplikáty údajov a zabezpečiť presnosť údajov.
Prijímač môže prijímať pakety v poradí sekvenčného čísla, aby sa zabezpečila integrita údajov.
● Sekvenčné číslo môže identifikovať dátový paket, ktorý dostal druhá strana, čo umožňuje spoľahlivý prenos údajov.
Preto po vytvorení pripojenia TCP klient odošle pakety SYN s počiatočným sekvenčným číslom a vyžaduje, aby server odpovedal s paketom ACK, ktorý označuje úspešný príjem paketu SYN klienta. Potom server odošle paket SYN s počiatočným sekvenčným číslom klientovi a čaká, kým klient raz a navždy odpovedá, aby sa zabezpečilo, že počiatočné sekvenčné čísla sú spoľahlivo synchronizované.
Aj keď je možné aj štvorsmerné handshake spoľahlivo synchronizovať počiatočné sekvenčné čísla obidvoch strán, druhý a tretí krok sa dajú kombinovať do jedného kroku, čo vedie k trojcestnému potraseniu rúk. Tieto dve handshakes však môžu zaručiť iba to, že počiatočné sekvenčné číslo jednej strany úspešne prijíma druhá strana, ale neexistuje žiadna záruka, že počiatočné sekvenčné číslo oboch strán je možné potvrdiť. Preto je trojstranné podanie ruky tou najlepšou voľbou, aby ste zaistili stabilitu a spoľahlivosť pripojení TCP.
Dôvod 3: Vyhnite sa plytvaniu zdrojom
Ak existuje iba „dvoma handshake“, keď je v sieti blokovaná požiadavka klienta SYN, klient nemôže prijať paket ACK odoslaný serverom, takže SYN bude rozčúlený. Keďže však neexistuje tretie handshake, server nemôže určiť, či klient dostal potvrdenie ACK na vytvorenie pripojenia. Preto server môže aktívne nadviazať pripojenie po prijatí každej žiadosti o syn. To vedie k nasledujúcim:
Strata zdrojov: Ak je požiadavka klienta Syn blokovaná, čo vedie k opakovanému prenosu viacerých paketov SYN, server po prijatí žiadosti vytvorí viac redundantných neplatných pripojení. To vedie k zbytočnej strate zdrojov servera.
Udržanie správy: V dôsledku nedostatku tretieho potrasenia rúk server nemá žiadny spôsob, ako zistiť, či klient správne dostal potvrdenie ACK na vytvorenie pripojenia. Výsledkom je, že ak sa správy zasekávajú v sieti, klient bude naďalej odosielať žiadosti SYN znova a znova, čo spôsobí, že server neustále vytvára nové pripojenia. Tým sa 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 trojsmerné podanie ruky na nadviazanie spojenia, aby sa predišlo výskytu týchto problémov.
Zhrnutie
TenSprostredkovateľ sieteZriadenie pripojenia TCP sa vykonáva s trojcestným podaním rúk. Počas trojstranného handshake klient najprv odošle paket so Syn príznak na server, čo naznačuje, že chce nadviazať pripojenie. Po prijatí žiadosti od klienta server odpovie klientovi paket s príznakmi Syn a ACK, čo naznačuje, že žiadosť o pripojenie je prijatá, a odošle svoje počiatočné číslo sekvencie. Nakoniec klient odpovedá príznakom ACK na server, aby naznačil, že pripojenie bolo úspešne nadviazané. Obidve strany sú teda v zavedenom stave a môžu si navzájom odosielať údaje.
Všeobecne platí, že proces trojsmerného podania handshake pre vytvorenie pripojenia TCP je navrhnutý tak, aby zabezpečil stabilitu a spoľahlivosť pripojenia, predišlo nejasnostiam a plytvaniu zdrojov nad historickými spojeniami a zabezpečilo, že obe strany sú schopné prijímať a odosielať údaje.
Čas príspevku: Jan-08-2025