TCP (Transmission Control Protocol)

TCP je stěžejní protokol transportní vrstvy (L4) z rodiny TCP/IP. Na rozdíl od UDP je spojově orientovaný, což znamená, že před samotnou výměnou dat musí dojít k navázání relace. Zajišťuje spolehlivý, seřazený a bezchybný přenos dat mezi aplikacemi.

Definován je primárně v RFC 793 (s mnoha pozdějšími aktualizacemi jako RFC 9293).

### 1. TCP Handshake (Navazování spojení) Pro zahájení komunikace se používá proces tzv. třícestného potřesení rukou (Three-way Handshake).

1. **SYN (Synchronize):** Klient pošle paket s náhodným sekvenčním číslem ($X$) a nastaveným příznakem SYN.
2. **SYN-ACK:** Server odpoví potvrzením ($ACK = X + 1$) a vlastním sekvenčním číslem ($Y$).
3. **ACK (Acknowledge):** Klient potvrdí přijetí serverového čísla ($ACK = Y + 1$).

Spojení se ukončuje podobným způsobem pomocí příznaků FIN (Finish) nebo RST (Reset) v případě chyby.

### 2. Struktura TCP segmentu Každý TCP segment obsahuje hlavičku o velikosti minimálně 20 bajtů.

Pole	Velikost (bitů)	Popis
Source Port	16	Číslo portu odesílatele.
Destination Port	16	Číslo portu příjemce.
Sequence Number	32	Číslo prvního bajtu dat v segmentu (pro řazení).
Acknowledgment Number	32	Číslo dalšího očekávaného bajtu (pokud je nastaven ACK).
Data Offset	4	Velikost hlavičky (počet 32bitových slov).
Flags	9	Příznaky řízení (SYN, ACK, FIN, RST, PSH, URG).
Window Size	16	Velikost přijímacího okna (řízení toku).
Checksum	16	Kontrolní součet pro detekci poškození dat.

### 3. Mechanismy spolehlivosti a řízení toku

#### A. Flow Control (Sliding Window) TCP používá mechanismus klouzavého okna. Příjemce v každé odpovědi informuje odesílatele, kolik bajtů je schopen ještě přijmout (Window Size). Tím zabraňuje zahlcení pomalejšího příjemce rychlým odesílatelem.

#### B. Congestion Control (Řízení zahlcení sítě) Na rozdíl od Flow Control se toto týká propustnosti cesty mezi nimi. Algoritmy (jako Tahoe, Reno, Cubic) používají fáze:

Slow Start: Exponenciální nárůst rychlosti odesílání.

Congestion Avoidance: Lineární nárůst po dosažení prahu (ssthresh).

Fast Retransmit/Recovery: Reakce na ztrátu paketu bez nutnosti čekat na timeout.

#### C. Retransmission (Opakování přenosu) Pokud odesílatel nedostane potvrzení (ACK) v rámci časového limitu (RTO - Retransmission Timeout), považuje segment za ztracený a odešle jej znovu.

### 4. Analýza v terminálu Pro sledování stavu TCP spojení v systému se používají příkazy:

Zobrazení aktivních spojení a naslouchajících portů:

ss -tunap
# nebo starší
netstat -ant

Sledování příznaků v reálném čase:

tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

### 5. Srovnání: TCP vs UDP

Vlastnost	TCP	UDP
Spojení	Ano (navazuje se)	Ne (bezstavové)
Spolehlivost	Ano (potvrzování)	Ne (best effort)
Pořadí dat	Garantováno	Negarantováno
Rychlost	Nižší (režie hlavičky a potvrzování)	Vysoká (minimální režie)
Využití	HTTP, SSH, Databáze	Streaming, VoIP, Online hry, DNS
Důležité: Moderní protokoly jako QUIC (základ HTTP/3) se snaží kombinovat výhody obou – běží nad UDP, ale implementují vlastní mechanismy spolehlivosti, aby eliminovaly slabinu TCP zvanou Head-of-Line Blocking.

Zpět na přehled protokolů