RFC 793: TCP - Třícestný handshake a řízení toku pro CCIE

Pokud se připravuješ na certifikaci CCNA, CCNP nebo CCIE, bez důkladného pochopení protokolu TCP (Transmission Control Protocol) se daleko nedostaneš. V tomto článku se ponoříme do RFC 793, které definuje základní transportní protokol internetu – TCP. Vysvětlíme si 3-way handshake, řízení toku (flow control), okna, retransmise i to, jak se TCP chová při ztrátách paketů.

Co je TCP podle RFC 793?

RFC 793, publikované v září 1981, definuje TCP jako spolehlivý, spojově orientovaný protokol fungující nad IP. Jeho úkolem je zajistit:

Těchto cílů TCP dosahuje pomocí sofistikovaných mechanismů, jako je číslování sekvencí, potvrzení (ACK), sliding window a retransmise. Podívejme se na ně podrobněji.

TCP 3-Way Handshake: jak vzniká spojení

Každé TCP spojení začíná třífázovým procesem vytváření spojení, tzv. 3-way handshake:

  1. SYN – klient odešle segment se SYN flagem a navrhne počáteční sekvenční číslo (ISN)
  2. SYN-ACK – server odpoví segmentem se SYN a ACK, potvrdí klientovo ISN a nabídne své vlastní
  3. ACK – klient potvrdí ISN serveru a spojení je navázáno
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 mechanismus zabraňuje vytváření tzv. „polospojení“, která by zahlcovala systém (ochrana proti SYN flood útokům – viz TCP backlog).

TCP segment a jeho hlavička

Každý TCP segment má specifickou strukturu hlavičky, která obsahuje:

Příklad výpisu ve Wiresharku:

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

Řízení toku: Sliding Window a Flow Control

TCP flow control zajišťuje, aby odesílající host neposílal více dat, než příjemce zvládne zpracovat. Každý ACK segment obsahuje Window Size, které určuje, kolik bajtů může být odesláno bez potvrzení. Tento mechanismus se nazývá sliding window.

Příklad:

Pokud je příjemce zahlcený, může nastavit okno na 0 a dočasně zastavit přenos.

Retransmise a spolehlivost

TCP zajišťuje spolehlivé doručení pomocí retransmisí. Pokud odesílatel neobdrží ACK včas, po timeoutu znovu odešle segment. Timeout se počítá adaptivně na základě RTT (Round-Trip Time).

Selective Acknowledgment (SACK) je rozšíření, které umožňuje příjemci oznámit, které segmenty mu chybí, a snížit tak zbytečné retransmise.

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

Frame 18: [TCP Retransmission]
  Seq: 2001

TCP vs UDP: proč je TCP „spolehlivější“

TCP na rozdíl od UDP vytváří spojení, potvrzuje segmenty a má kontrolu toku i retransmise. Je vhodný pro aplikace jako:

UDP je naopak vhodnější pro real-time aplikace (VoIP, streamování videa), kde je důležitější rychlost než spolehlivost.

Nejčastější otázky (FAQ)

  1. Co je ISN v TCP?
    Initial Sequence Number – náhodně generované číslo, kterým začíná spojení.
  2. Na které vrstvě OSI pracuje TCP?
    Na 4. vrstvě – transportní vrstvě.
  3. Jak TCP zjistí, že se paket ztratil?
    Nedorazí ACK včas, vyprší timeout nebo díky duplicitním ACK.
  4. Co znamená PSH flag?
    Push – příjemce má data ihned předat aplikační vrstvě.
  5. Co když se nedokončí 3-way handshake?
    Spojení nevznikne, port zůstane ve stavu SYN_RECEIVED (na straně serveru).

Top 5 zajímavostí o TCP a RFC 793

  1. RFC 793 stále platí – je základem TCP, i když ho rozšiřují RFC jako 7323 (Window Scaling).
  2. TCP má více než 6 stavů – například LISTEN, SYN_SENT, ESTABLISHED, TIME_WAIT…
  3. TCP checksum kontroluje nejen TCP segment, ale i pseudo-header z IP.
  4. Delayed ACK snižuje počet potvrzení – může se zpozdit až o 500 ms!
  5. TCP se dokáže adaptovat na podmínky sítě – pomocí algoritmů jako slow start a congestion avoidance.

Závěr

TCP podle RFC 793 je páteří spolehlivé komunikace na internetu. Pokud chceš uspět u zkoušky CCNA/CCNP/CCIE, nebo jen pochopit, jak funguje web nebo email, TCP musíš znát do hloubky. Od 3-way handshake, přes sliding window až po retransmise – je to fascinující protokol, který stále drží internet pohromadě.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Viac informacií preberáme na kurze:

Kurz NA0 - Administrace a návrh LAN/WAN TCP/IP sítí - základní koncepty

Marián Knězek