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.
