RFC 793: TCP – 3-way handshake a flow control ako pre CCIE

Ak sa pripravuješ na certifikáciu CCNA, CCNP alebo CCIE, bez dôkladného porozumenia protokolu TCP (Transmission Control Protocol) sa ďaleko nedostaneš. V tomto článku sa ponoríme do RFC 793, ktoré definuje základný transportný protokol internetu – TCP. Vysvetlíme si 3-way handshake, riadenie prúdenia (flow control), okná, retransmisie aj to, ako sa TCP správa pri stratách paketov.

Čo je TCP podľa RFC 793?

RFC 793, publikované v septembri 1981, definuje TCP ako spoľahlivý, spojovo-orientovaný protokol pracujúci nad IP. Jeho úlohou je zabezpečiť:

Tieto ciele dosahuje TCP pomocou zložitých mechanizmov, ako sú číslovanie sekvencií, potvrdzovanie (ACK), sliding window, a retransmisie. Poďme sa na ne pozrieť podrobnejšie.

TCP 3-Way Handshake: ako vzniká spojenie

Každé TCP spojenie začína trojstupňovým procesom vytvárania spojenia, tzv. 3-way handshake:

  1. SYN – klient odošle segment so SYN flagom, navrhne počiatočné sekvenčné číslo (ISN)
  2. SYN-ACK – server odpovie segmentom so SYN aj ACK, potvrdí klientov ISN a ponúkne svoj vlastný
  3. ACK – klient potvrdí ISN servera a spojenie je vytvorené
Wireshark – 3-way handshake:
Frame 1: TCP SYN
  Flags: SYN
  Seq: 0

Frame 2: TCP SYN-ACK
  Flags: SYN, ACK
  Seq: 0, Ack: 1

Frame 3: TCP ACK
  Flags: ACK
  Seq: 1, Ack: 1

Tento mechanizmus zabraňuje tomu, aby sa vytvorili „polospojky“, ktoré by zahlcovali systém (ochrana pred SYN flood útokmi – viď TCP backlog).

TCP segment a jeho hlavička

Každý TCP segment má špecifickú štruktúru hlavičky, ktorá obsahuje:

Príklad výpisu v Wiresharku:

Transmission Control Protocol
  Src Port: 443
  Dst Port: 53112
  Seq: 12345
  Ack: 67890
  Flags: ACK, PSH
  Window: 512
  Checksum: 0x9a8b

Riadenie toku: Sliding Window a Flow Control

TCP flow control zabezpečuje, aby vysielajúci host neposielal viac dát, ako prijímajúci dokáže spracovať. Každý ACK segment obsahuje Window Size, ktoré určuje, koľko bajtov môže byť poslaných bez potvrdenia. Tento mechanizmus sa nazýva sliding window.

Príklad:

Ak prijímač zahltený, môže nastaviť okno na 0 a dočasne zastaviť prenos.

Retransmisie a spoľahlivosť

TCP zabezpečuje spoľahlivé doručenie cez retransmisie. Ak odosielateľ nedostane včas ACK, po timeout-e znova odošle segment. Timeout sa počíta adaptívne na základe RTT (Round-Trip Time).

Selective Acknowledgment (SACK) je rozšírenie, ktoré umožňuje prijímaču oznámiť, ktoré segmenty mu chýbajú, a znížiť tak zbytočné retransmisie.

Wireshark – Retransmission:
Frame 14: TCP segment
  Seq: 2001
  [No ACK received]

Frame 18: [TCP Retransmission]
  Seq: 2001

TCP vs UDP: prečo je TCP „spoľahlivejší“

TCP na rozdiel od UDP vytvára spojenie, potvrdzuje segmenty a má kontrolu toku a retransmisie. To ho robí vhodným pre aplikácie ako:

UDP je naopak vhodnejší pre reálne-časové aplikácie (VoIP, videostreaming), kde je dôležitejšia rýchlosť ako spoľahlivosť.

Najčastejšie otázky (FAQ)

  1. Čo je ISN v TCP?
    Initial Sequence Number – náhodne generované číslo, ktorým sa začína spojenie.
  2. Na ktorom leveli OSI pracuje TCP?
    Na 4. vrstve – transportnej vrstve.
  3. Ako TCP zistí, že sa paket stratil?
    Nedostane ACK včas, vyprší timeout alebo pomocou duplicitných ACK.
  4. Čo znamená PSH flag?
    Push – prijímač má dáta ihneď odovzdať aplikačnej vrstve.
  5. Čo ak sa nedokončí 3-way handshake?
    Spojenie sa nezaloží, port zostane v stave SYN_RECEIVED (na strane servera).

Top 5 zaujímavostí o TCP a RFC 793

  1. RFC 793 je funkčné dodnes – je základ TCP, aj keď ho rozšírili RFC ako 7323 (Window Scaling).
  2. TCP má viac ako 6 stavov – vrátane LISTEN, SYN_SENT, ESTABLISHED, TIME_WAIT…
  3. TCP checksum kontroluje nielen TCP segment, ale aj pseudo-header z IP.
  4. Delayed ACK znižuje počet potvrdení – oneskorenie až 500 ms!
  5. TCP sa dokáže adaptovať na sieťové podmienky – cez algoritmy ako slow start a congestion avoidance.

Záver

TCP podľa RFC 793 je chrbticou spoľahlivej komunikácie na internete. Ak chceš uspieť na skúške CCNA/CCNP/CCIE, alebo len pochopiť, ako funguje web či email, TCP musíš poznať do hĺbky. Od 3-way handshake, cez sliding window až po retransmisie – je to fascinujúci protokol, ktorý stále drží internet pohromade.

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí.

Stiahnite si náš ebook teraz výnimočne zdarma!!!

Viac informacií preberáme na kurze:

Kurz NA0 - Administrácia LAN/WAN a návrh TCP/IP sietí - základné koncepty

Marián Knězek

 

Súvisiace články: