TCP 3-Way Handshake (SYN, SYN-ACK, ACK)
⚡ Chytré shrnutí
TCP 3-Way Handshake je rituál navazování spojení, kterým začíná každá TCP relace. Klient a server si vyměňují pakety SYN, SYN-ACK a ACK, aby synchronizovali pořadová čísla a potvrdili, že obě strany jsou připraveny, než je odeslán jediný bajt dat aplikace.
Co je to třícestné navazování spojení TCP?
Jedno TCP třícestný handshake je procedura, kterou klient a server používají na TCP/IP síť nastavit spolehlivé spojení před výměnou dat aplikace. Jak název napovídá, skládá se ze tří kroků, ve kterých si obě strany vyměňují synchronizační (SYN) a potvrzovací (ACK) pakety a dohodnou se na počátečních pořadových číslech, která budou používat.
Handshake je navržen tak, aby oba koncové body mohly symetricky iniciovat, vyjednávat a rušit TCP sockety. Po dokončení handshake je spojení plně duplexní – obě strany mohou odesílat a přijímat paralelně, dokud jedna z nich nevydá příkaz FIN k ukončení relace.
Typy TCP zpráv
Během handshake a teardownu se opakovaně objevují čtyři kontrolní příznaky.
| Zpráva | Description |
|---|---|
| SYN | Zahájí připojení a synchronizuje pořadová čísla mezi zařízeními. |
| ACK | Potvrzuje druhé straně, že byl přijat předchozí segment. |
| SYN-ACK | Kombinovaná zpráva – SYN z lokálního zařízení a ACK předchozího SYN peer-u. |
| PLOUTEV | Používá se k elegantnímu ukončení spojení. |
TCP třícestný proces handshake
TCP komunikace vždy začíná třístranným navázáním kontaktu (handshake). Klient zahajuje konverzaci požadavkem na relaci se serverem.
Schéma třícestného handshake.
- Krok 1 – SYN: Klient odešle segment s nastaveným příznakem SYN. Sdělí serveru „Chci zahájit komunikaci“ a navrhne počáteční pořadové číslo.
- Krok 2 – SYN-ACK: Server odpovídá segmentem, ve kterém jsou nastaveny příznaky SYN i ACK. ACK potvrzuje SYN klienta a SYN navrhuje vlastní počáteční pořadové číslo serveru.
- Krok 3 – ACK: Klient potvrdí SYN-ACK serveru finálním ACK. Spojení je nyní navázáno a obě strany mohou začít. transmitzpracování dat aplikace.
Příklad reálného světa
Zde je zpracovaný příklad s konkrétními pořadovými čísly.
- Hostitel X zahájí spojení odesláním TCP SYN paketu na server. Paket obsahuje náhodné počáteční pořadové číslo – například
4321— který označuje začátek bajtového proudu, který hostitel X odešle. - Server přijme SYN a odpoví SYN-ACK. Číslo ACK je pořadové číslo hostitele X zvýšené o 1 (
4322) a SYN navrhne vlastní počáteční pořadové číslo serveru. - Hostitel X odpoví finálním potvrzením (ACK), jehož potvrzovací číslo je pořadové číslo serveru zvýšené o 1.
Jakmile je výměna dat dokončena, TCP ukončí spojení pomocí čtyřcestné sekvence FIN/ACK, aby oba koncové body mohly socket čistě uvolnit.
Proč TCP potřebuje třícestné navazování spojení
Handshake není jen formalita – řeší tři konkrétní problémy, které s sebou nese spolehlivý přenos bajtového proudu:
- Synchronizace pořadových čísel: Oba protějšky se dozvědí počáteční pořadové číslo druhé strany, které TCP používá k detekci ztracených nebo neuspořádaných segmentů.
- Dohoda o stavu připojení: Třetí ACK potvrzuje, že SYN-ACK serveru dorazil, takže žádná strana nezačne odesílat data, dokud obě strany nejsou v ZALOŽENO stav.
- Ochrana proti duplicitním paketům: Náhodná počáteční pořadová čísla a časované stavy handshake zabraňují omylem přijímat zastaralé segmenty z předchozí relace.
Běžné problémy s TCP Handshake
Handshake je robustní, ale rozpadá se identifikovatelnými způsoby. Síťoví inženýři obvykle vidí jeden z následujících:
- SYN flood útoky: Zlomyslný klient odesílá tisíce SYNů, aniž by odpověděl na SYN-ACKy, čímž vyčerpává tabulku připojení serveru. Soubory cookie SYN jsou standardní obranou.
- Polootevřené spoje: Když se ztratí třetí potvrzení (ACK), spojení zůstane napůl otevřené a nakonec je vyčištěno po uplynutí časového limitu.
- Výpadky firewallu nebo NATu během provozu: Stavové middleboxy, které ztratí stav, mohou zahodit pakety SYN-ACK a nechat klienta znovu se pokusit o operaci.
- Resety RST: Pokud server nenaslouchá na požadovaném portu, odpoví na SYN pomocí RST, což pokus o navázání kontaktu okamžitě ukončí.



