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.

  • ๐Ÿ“จ Znรกt ฤtyล™i typy zprรกv: SYN inicializuje, ACK potvrzuje, SYN-ACK obojรญ kombinuje a FIN ukonฤuje TCP spojenรญ.
  • ๐Ÿ” Postupujte podle tฤ›chto tล™รญ krokลฏ: SYN klienta โ†’ SYN-ACK serveru โ†’ ACK klienta; relace je navรกzรกna aลพ po doruฤenรญ tล™etรญho paketu.
  • ๐Ÿ”ข Poล™adovรก ฤรญsla jsou dลฏleลพitรก: Kaลพdรก strana si vybere poฤรกteฤnรญ poล™adovรฉ ฤรญslo; druhรก strana ho potvrdรญ pล™idรกnรญm jednรฉ, coลพ udrลพuje poล™adรญ bajtovรฉho proudu.
  • ๐Ÿšช Plรกn demontรกลพe: Po pล™enosu dat TCP uzavล™e spojenรญ pomocรญ pรกrลฏ FIN/ACK, aby uvolnil socket na obou koncรญch.
  • ๐Ÿค– Pouลพijte umฤ›lou inteligenci pro analรฝzu paketลฏ: Asistenti s umฤ›lou inteligencรญ vysvฤ›tlujรญ Wireshark zachycenรญ, oznaฤenรญ chybฤ›jรญcรญch potvrzenรญ (ACK) a zvรฝraznฤ›nรญ SYN zรกplav nebo polootevล™enรฝch spojenรญ.

TCP 3-Way Handshake

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.

Diagram tล™รญcestnรฉho handshake protokolu TCP

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

Pล™รญklad tล™รญcestnรฉho handshake protokolu TCP z 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ฤรญ.

Nejฤastฤ›jลกรญ dotazy

Dvฤ› zprรกvy nemohou dokรกzat, ลพe se obฤ› strany dohodly na poฤรกteฤnรญch poล™adovรฝch ฤรญslech a jsou pล™ipraveny k odeslรกnรญ. Tล™etรญ zprรกva ACK potvrzuje doruฤenรญ SYN-ACK serveru, ฤรญmลพ zajiลกลฅuje, ลพe oba koncovรฉ body dosรกhnou stavu ESTABLISHED pล™ed zahรกjenรญm datovรฉho toku.

SYN je jedinรฝ pล™รญznak, kterรฝ zahajuje konverzaci a navrhuje poฤรกteฤnรญ poล™adovรฉ ฤรญslo. SYN-ACK kombinuje SYN s potvrzenรญm dล™รญvฤ›jลกรญho SYN uzlu, ฤรญmลพ dokonฤuje synchronizaci v jednom paketu.

SYN zรกplava zahlcuje server odeslรกnรญm mnoha SYN paketลฏ bez dokonฤenรญ handshake. Polootevล™enรก pล™ipojenรญ zaplลˆujรญ frontu nevyล™รญzenรฝch paketลฏ a blokujรญ legitimnรญ uลพivatele. Standardnรญm zpลฏsobem ochrany jsou SYN soubory cookie.

TCP uzavรญrรก spojenรญ ฤtyล™cestnรฝm handshake, kterรฝ zahrnuje vรฝmฤ›nu FIN a ACK. Kaลพdรฝ smฤ›r je uzavรญrรกn nezรกvisle, coลพ umoลพลˆuje jednรฉ stranฤ› dokonฤit odesรญlรกnรญ dat i potรฉ, co druhรก strana uzavล™ela svou polovinu.

Poฤรกteฤnรญ poล™adovรฉ ฤรญslo je nรกhodnฤ› zvolenรก 32bitovรก hodnota, kterou si kaลพdรฝ koncovรฝ bod vybere pro svลฏj vlastnรญ bajtovรฝ proud. Nastavuje poฤitadlo pouลพรญvanรฉ k detekci chybฤ›jรญcรญch nebo duplicitnรญch segmentลฏ a k obranฤ› proti faleลกnรฝm paketลฏm.

Ne. UDP je bezspojkovรฝ protokol a odesรญlรก datagramy bez jakรฉhokoli navazovรกnรญ spojenรญ (handshake). Dรญky tomu je rychlejลกรญ a lehฤรญ neลพ TCP, ale aplikace si musรญ samy postarat o spolehlivost, ล™azenรญ a ล™รญzenรญ pล™etรญลพenรญ.

Asistenti umฤ›lรฉ inteligence anotujรญ zachycenรฉ pakety a klasifikujรญ jetransmits a RST a detekujรญ SYN zรกplavy. Pล™eklรกdajรญ Wireshark filtry pล™evedou do srozumitelnรฉ angliฤtiny a doporuฤรญ dalลกรญ diagnostickรฝ krok pro problรฉmy s pล™ipojenรญm.

Ano. Asistenti kรณdovรกnรญ s umฤ›lou inteligencรญ promฤ›nรญ poลพadavek v jednoduchรฉ angliฤtinฤ› v Python Scapy nebo skript netcat, kterรฝ spouลกtรญ a kontroluje tล™รญcestnรฉ navazovรกnรญ spojenรญ (handshake), a potรฉ vysvฤ›tluje kaลพdรฝ ล™รกdek, aby si ho inลพenรฝล™i mohli pล™ed spuลกtฤ›nรญm zkontrolovat.

Shrลˆte tento pล™รญspฤ›vek takto: