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ฤรญ.


