Klíčové záhady připojení TCP s síťovými pakety: Demystifikoval potřebu trojitého handshake

Nastavení připojení TCP
Když procházíme web, odešleme e -mail nebo přehráváme online hru, často nemyslíme na komplexní síťové připojení za ním. Jsou to však tyto zdánlivě malé kroky, které zajišťují stabilní komunikaci mezi námi a serverem. Jedním z nejdůležitějších kroků je nastavení připojení TCP a jádrem tohoto je třícestný handshake.

Tento článek bude podrobně diskutovat o principu, procesu a důležitosti třícestného handshake. Krok za krokem vysvětlíme, proč je potřeba třícestný handshake, jak to zajišťuje stabilitu a spolehlivost připojení a jak důležité je pro přenos dat. S hlubším pochopením třícestného handshake získáme lepší pochopení základních mechanismů síťové komunikace a jasnějšího pohledu na spolehlivost spojení TCP.

TCP třícestný proces handshake a přechody státu
TCP je transportní protokol orientovaný na připojení, který před přenosem dat vyžaduje vytvoření připojení. Tento proces připojení provádí třícestný handshake.

 TCP třícestné handshake

Podívejme se blíže na pakety TCP, které jsou odesílány v každém spojení.

Zpočátku jsou klient i server uzavřeni. Nejprve server aktivně poslouchá na portu a je ve stavu poslouchání, což znamená, že musí být server spuštěn. Dále je klient připraven začít přístup na webovou stránku. Musí navázat spojení se serverem. Formát prvního připojení je následující:

 Syn Packet

Když klient iniciuje připojení, vygeneruje náhodné počáteční sekvenční číslo (client_isn) a umístí jej do pole „sekvenční číslo“ záhlaví TCP. Současně klient nastaví polohu příznaku Syn na 1, aby označil, že odchozí paket je SYN paket. Klient označuje, že si přeje navázat spojení se serverem odesláním prvního paketu SYN na server. Tento paket neobsahuje data aplikační vrstvy (tj. Data odeslaná). V tomto okamžiku je stav klienta označen jako syn -s.

Syn+Ack Packet

Když server obdrží paket SYN od klienta, náhodně inicializuje vlastní sériové číslo (server_isn) a poté vloží toto číslo do pole „Sériové číslo“ záhlaví TCP. Dále server zadá do pole Client_isn + 1 v poli „Potvrzení čísla“ a nastaví Bity SYN i ACK na 1.. Server konečně odešle paket klientovi, který neobsahuje žádná data aplikační vrstvy (a žádná data pro odesílání serveru). V této době je server ve stavu SYN-RCVD.

ACK PACKET

Jakmile klient obdrží paket ze serveru, musí provést následující optimalizace, aby reagoval na paket konečné odpovědi: Nejprve klient nastaví bit ACK záhlaví TCP odpovědi na 1; Za druhé, klient zadá do pole Hodnota Server_isn + 1 v poli „Potvrdit číslo odpovědi“; Nakonec klient odešle paket na server. Tento paket může přenášet data z klienta na server. Po dokončení těchto operací vstoupí klient do zavedeného stavu.

Jakmile server obdrží paket odpovědi od klienta, přepne se také do zavedeného stavu.

Jak můžete vidět z výše uvedeného procesu, při provádění třícestného handshake může třetí handshake nést data, ale první dva handshake nejsou. Toto je otázka, která je často kladena v rozhovorech. Po dokončení třísměrného handshake, obě strany vstoupí do zavedeného stavu, což naznačuje, že připojení bylo úspěšně navázáno, v tomto okamžiku může klient a server začít odesílat data navzájem.

Proč tři handshakes? Ne dvakrát, čtyřikrát?
Společná odpověď zní: „Protože třícestné handshake zaručuje schopnost přijímat a odesílat.“ Tato odpověď je správná, ale je to pouze povrchový důvod, nepředloží hlavní důvod. V následujícím textu budu analyzovat důvody trojitého handshake ze tří aspektů, abych prohloubil naše chápání tohoto problému.

Třícestné handshake se může účinně vyhnout inicializaci historicky opakovaných spojení (hlavní důvod)
Třícestné handshake zaručuje, že obě strany obdržely spolehlivé počáteční sekvenční číslo.
Třícestné handshake se vyhýbá plýtvání zdroji.

Důvod 1: Vyvarujte se historických duplikátů
Stručně řečeno, hlavním důvodem třísměrného handshake je vyhnout se zmatení způsobenému starou inicializací duplicitního připojení. Ve složitém síťovém prostředí není přenos datových paketů vždy odeslán cílovému hostiteli v souladu se zadaným časem a staré datové pakety mohou nejprve dorazit k cílovému hostiteli z důvodu přetížení sítě a dalších důvodů. Aby se tomu zabránilo, TCP používá k vytvoření připojení třícestný handshake.

Třícestné handshake se vyhýbá historickým duplicitním spojení

Když klient pošle více paketů založení Syn Connection za sebou, v situacích, jako je přetížení sítě, může dojít k následujícímu:

1- Staré pakety Syn dorazí na server před nejnovějšími pakety SYN.
2- Server odpoví na klienta po obdržení starého paketu Syn.
3- Když klient obdrží paket SYN + ACK, určí, že připojení je historické připojení (sekvenční číslo vypršelo nebo časový limit) podle vlastního kontextu a poté odešle první paket na server, aby přerušil připojení.

S připojením o dvoubavení neexistuje způsob, jak zjistit, zda je aktuální připojení historické spojení. Třícestné handshake umožňuje klientovi určit, zda je aktuální připojení historické spojení založené na kontextu, když je připraven odeslat třetí paket:

1- Pokud se jedná o historické spojení (sekvenční číslo vypršelo nebo časový limit), paket odeslaný třetím handshake je první paket, který zruší historické spojení.
2- Pokud se nejedná o historické spojení, paket odeslaný potřetí je paket ACK a obě komunikační strany úspěšně navázaly spojení.

Hlavním důvodem, proč TCP používá třícestný handshake, je proto, že inicializuje spojení, aby se zabránilo historickým spojením.

Důvod 2: Pro synchronizaci počátečních sekvenčních čísel obou stran
Obě strany protokolu TCP musí udržovat sekvenční číslo, což je klíčový faktor pro zajištění spolehlivého přenosu. Čísla sekvencí hrají důležitou roli v připojení TCP.

Přijímač může eliminovat duplicitní data a zajistit přesnost dat.

Přijímač může přijímat pakety v pořadí sekvenčního čísla, aby byla zajištěna integrita dat.

● Pořadové číslo může identifikovat datový paket, který byla obdržena druhou stranou, což umožňuje spolehlivý přenos dat.

Po vytvoření připojení TCP proto klient odešle pakety SYN s počátečním sekvenčním číslem a vyžaduje, aby server odpovídal paketu ACK, který označuje úspěšný příjem paketu Syn klienta. Poté server odešle paket SYN s počátečním sekvenčním číslem klientovi a čeká, až klient odpoví, jednou provždy, aby zajistil, že počáteční čísla sekvence budou spolehlivě synchronizována.

Synchronizujte počáteční sériová čísla obou stran

Přestože je možné spolehlivě synchronizovat počáteční sekvenční čísla obou stran také čtyřcestná handshake, druhé a třetí kroky lze kombinovat do jediného kroku, což má za následek třícestné handshake. Oba handshakes však mohou zaručit pouze to, že počáteční sekvenční číslo jedné strany je úspěšně obdržena druhou stranou, ale neexistuje žádná záruka, že počáteční sekvenční číslo obou stran lze potvrdit. Proto je třícestné handshake nejlepší volbou, aby bylo možné zajistit stabilitu a spolehlivost připojení TCP.

Důvod 3: Vyvarujte se plýtvání zdroji
Pokud existuje pouze „dvoubarev“, když je požadavek na klient Syn blokován v síti, nemůže klient obdržet paket ACK odeslaný serverem, takže syn bude nesnášen. Protože však neexistuje třetí handshake, server nemůže určit, zda klient obdržel potvrzení ACK, aby navázal připojení. Server proto může aktivně navázat připojení pouze po obdržení každé požadavky SYN. To vede k následujícímu:

Plýtvání zdrojů: Pokud je požadavek na SYN pro klienta blokován, což má za následek opakované přenos více paketů Syn, server po obdržení požadavku vytvoří více redundantních neplatných připojení. To vede k zbytečnému plýtvání serverovým prostředkům.

Uchovávání zpráv: Vzhledem k nedostatku třetího handshake nemá server žádný způsob, jak zjistit, zda klient správně přijal potvrzení ACK, aby vytvořil připojení. Výsledkem je, že pokud se zprávy v síti zaseknou, klient bude stále znovu a znovu odesílat požadavky SYN, což způsobí, že server neustále vytváří nová připojení. Tím se zvýší přetížení a zpoždění sítě a negativně ovlivní celkový výkon sítě.

Vyvarujte se plýtvání zdroji

Proto, aby se zajistila stabilita a spolehlivost síťového připojení, TCP používá třícestný handshake k navázání spojení, aby se zabránilo výskytu těchto problémů.

Shrnutí
TheBroker síťových paketůZařízení připojení TCP se provádí pomocí třícestného handshake. Během třícestného handshake klient nejprve odešle paket s příznakem SYN na server, což naznačuje, že chce vytvořit připojení. Po obdržení žádosti od klienta server odpovídá paket s příznaky SYN a ACK s klientem, což uvádí, že je přijímán požadavek na připojení, a odešle své vlastní počáteční číslo sekvence. Nakonec klient odpoví s příznakem ACK na server, aby označil, že připojení bylo úspěšně navázáno. Obě strany jsou tedy ve zavedeném stavu a mohou začít posílat údaje k sobě.

Obecně je proces třícestného handshake pro založení připojení TCP navržen tak, aby zajistil stabilitu a spolehlivost připojení, vyhnul se zmatkům a plýtvání zdroji před historickými spojeními a zajistil, aby obě strany mohly přijímat a odesílat data.


Čas příspěvku: leden-08-2025