Klíčová tajemství TCP připojení síťového brokeru paketů: Demystifikovaná potřeba trojitého handshake

Nastavení TCP připojení
Když procházíme web, posíláme e-maily nebo hrajeme online hry, často nepřemýšlíme o složitém síťovém připojení, které se za tím skrývá. Právě tyto zdánlivě malé kroky však zajišťují stabilní komunikaci mezi námi a serverem. Jedním z nejdůležitějších kroků je nastavení TCP připojení a jádrem je třícestné navazování spojení (handshake).

Tento článek se podrobně bude zabývat principem, procesem a důležitostí třícestného handshake. Krok za krokem vysvětlíme, proč je třícestný handshake potřebný, jak zajišťuje stabilitu a spolehlivost připojení a jak je důležitý 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ší představu o spolehlivosti TCP spojení.

Proces třícestného handshake protokolu TCP a přechody stavů
TCP je spojově orientovaný transportní protokol, který vyžaduje navázání spojení před přenosem dat. Tento proces navazování spojení se provádí třícestným handshake.

 TCP třícestné navázání spojení

Pojďme se blíže podívat na TCP pakety, které jsou odesílány v každém spojení.

Zpočátku jsou klient i server ZAVŘENÝ. Server nejprve aktivně naslouchá na portu a je ve stavu LISTEN, což znamená, že server musí být spuštěn. Poté je klient připraven začít přistupovat k webové stránce. Musí navázat spojení se serverem. Formát prvního paketu pro připojení je následující:

 SYN paket

Když klient naváže spojení, vygeneruje náhodné počáteční pořadové číslo (client_isn) a umístí ho do pole „Pořadové číslo“ v záhlaví TCP. Zároveň klient nastaví příznak SYN na 1, což znamená, že odchozí paket je SYN paket. Klient indikuje, že si přeje navázat spojení se serverem, odesláním prvního SYN paketu na server. Tento paket neobsahuje data aplikační vrstvy (tj. odeslaná data). V tomto okamžiku je stav klienta označen jako SYN-SENT.

Paket SYN+ACK

Když server přijme od klienta SYN paket, náhodně inicializuje své vlastní sériové číslo (server_isn) a poté toto číslo vloží do pole „Sériové číslo“ v záhlaví TCP. Poté server zadá client_isn + 1 do pole „Potvrzovací číslo“ a nastaví bity SYN i ACK na 1. Nakonec server odešle klientovi paket, který neobsahuje žádná data aplikační vrstvy (a žádná data, která by server měl odeslat). V tomto okamžiku se server nachází ve stavu SYN-RCVD.

Paket ACK

Jakmile klient obdrží paket od serveru, musí provést následující optimalizace, aby mohl reagovat na finální paket odpovědi: Nejprve klient nastaví bit ACK v TCP hlavičce paketu odpovědi na 1; poté klient zadá hodnotu server_isn + 1 do pole „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í klient přejde do stavu ESTABLISHED.

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

Jak je vidět z výše uvedeného procesu, při provádění třícestného handshake může třetí handshake přenášet data, ale první dva ne. Tato otázka se často klade v pohovorech. Jakmile je třícestný handshake dokončen, obě strany přejdou do stavu NAVEZENO, což znamená, že spojení bylo úspěšně navázáno, a v tomto okamžiku si klient a server mohou začít vzájemně posílat data.

Proč třikrát? Ne dvakrát, čtyřikrát?
Běžná odpověď zní: „Protože trojité podání ruky zaručuje možnost přijímat a odesílat.“ Tato odpověď je správná, ale je to pouze povrchní důvod, který neuvádí hlavní důvod. V následujícím textu budu analyzovat důvody pro trojité podání ruky ze tří hledisek, abychom prohloubili naše pochopení této problematiky.

Trojcestné navazování spojení (handshake) může efektivně zabránit inicializaci historicky opakovaných spojení (což je hlavní důvod).
Trojcestné podání ruky zaručuje, že obě strany obdržely spolehlivé počáteční pořadové číslo.
Trojcestné podání ruky zabraňuje plýtvání zdroji.

Důvod 1: Vyhněte se historickým duplicitním spojením
Stručně řečeno, hlavním důvodem pro třícestné navazování spojení je zabránění zmatku způsobenému starou duplicitní inicializací spojení. 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 do cílového hostitele dorazit jako první kvůli přetížení sítě a dalším důvodům. Aby se tomu zabránilo, používá TCP k navázání spojení třícestné navazování spojení.

třícestné navazování spojení zabraňuje historickým duplicitním spojením

Pokud klient odešle více paketů pro navázání spojení SYN za sebou, v situacích, jako je například přetížení sítě, může dojít k následujícím problémům:

1. Staré SYN pakety dorazí na server dříve než nejnovější SYN pakety.
2- Server po přijetí starého SYN paketu odpoví klientovi paketem SYN + ACK.
3- Když klient obdrží paket SYN + ACK, určí na základě svého vlastního kontextu, že se jedná o historické připojení (vypršela platnost pořadového čísla nebo vypršel časový limit), a poté odešle paket RST na server, aby připojení ukončil.

U spojení typu two-handshake neexistuje způsob, jak zjistit, zda se jedná o historické spojení. Třícestné handshake umožňuje klientovi určit, zda se jedná o historické spojení, na základě kontextu, kdy je připraven odeslat třetí paket:

1- Pokud se jedná o historické připojení (vypršelo pořadové číslo nebo vypršel časový limit), paket odeslaný třetím handshake je paket RST pro ukončení historického připojení.
2- Pokud se nejedná o historické připojení, paket odeslaný potřetí je paket ACK a obě komunikující strany úspěšně navážou spojení.

Hlavním důvodem, proč TCP používá třícestné navazování spojení, je tedy inicializace spojení, aby se zabránilo vzniku historických spojení.

Důvod 2: Synchronizace počátečních pořadových čísel obou stran
Obě strany protokolu TCP musí udržovat pořadové číslo, což je klíčový faktor pro zajištění spolehlivého přenosu. Pořadová čísla hrají v TCP spojeních důležitou roli. Dělají následující:

Příjemce může eliminovat duplicitní data a zajistit jejich přesnost.

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

● Pořadové číslo dokáže identifikovat datový paket, který druhá strana přijala, což umožňuje spolehlivý přenos dat.

Proto po navázání TCP spojení klient odesílá SYN pakety s počátečním pořadovým číslem a vyžaduje, aby server odpověděl paketem ACK, který indikuje úspěšné přijetí klientova SYN paketu. Server poté odešle klientovi SYN paket s počátečním pořadovým číslem a čeká na klientovu odpověď, jednou provždy, aby se zajistilo, že počáteční pořadová čísla jsou spolehlivě synchronizována.

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

Ačkoli je čtyřcestný handshake také možný pro spolehlivou synchronizaci počátečních pořadových čísel obou stran, druhý a třetí krok lze sloučit do jednoho kroku, což vede k třícestnému handshake. Dva handshakey však mohou zaručit pouze to, že počáteční pořadové číslo jedné strany bude úspěšně přijato druhou stranou, ale neexistuje žádná záruka, že bude možné potvrdit počáteční pořadové číslo obou stran. Proto je třícestný handshake nejlepší volbou pro zajištění stability a spolehlivosti TCP spojení.

Důvod 3: Vyhněte se plýtvání zdroji
Pokud existuje pouze „dvojité navázání spojení“, když je SYN požadavek klienta v síti blokován, klient nemůže přijmout ACK paket odeslaný serverem, takže SYN bude odeslán znovu. Protože však neexistuje třetí navázání spojení, server nemůže určit, zda klient obdržel potvrzení ACK pro navázání spojení. Server proto může proaktivně navázat spojení až po přijetí každého SYN požadavku. To vede k následujícím výsledkům:

Plýtvání zdroji: Pokud je SYN požadavek klienta blokován, což má za následek opakovaný přenos více SYN paketů, server po přijetí požadavku naváže více redundantních neplatných spojení. To vede ke zbytečnému plýtvání zdroji serveru.

Zadržení zpráv: Vzhledem k absenci třetího navázání spojení nemá server žádný způsob, jak zjistit, zda klient správně obdržel potvrzení ACK pro navázání spojení. V důsledku toho, pokud se zprávy v síti zaseknou, klient bude neustále odesílat SYN požadavky, což způsobí, že server bude neustále navazovat nová připojení. To zvýší přetížení sítě a zpoždění a negativně ovlivní celkový výkon sítě.

Vyhněte se plýtvání zdroji

Proto, aby byla zajištěna stabilita a spolehlivost síťového připojení, používá TCP k navázání spojení třícestné navazování spojení, aby se předešlo vzniku těchto problémů.

Shrnutí
Ten/Ta/ToZprostředkovatel síťových paketůNavázání TCP spojení se provádí pomocí třícestného handshake. Během třícestného handshake klient nejprve odešle serveru paket s příznakem SYN, což znamená, že chce navázat spojení. Po přijetí požadavku od klienta server odpoví klientovi paketem s příznaky SYN a ACK, což znamená, že požadavek na připojení byl přijat, a odešle své vlastní počáteční pořadové číslo. Nakonec klient odpoví serveru příznakem ACK, což znamená, že spojení bylo úspěšně navázáno. Obě strany jsou tedy ve stavu ESTABLISHED (NAVEZENO) a mohou si začít navzájem posílat data.

Obecně je proces třícestného navazování TCP spojení navržen tak, aby zajistil stabilitu a spolehlivost spojení, zabránil nejasnostem a plýtvání zdroji kvůli historickým spojením a zajistil, že obě strany budou schopny přijímat a odesílat data.


Čas zveřejnění: 8. ledna 2025