====== 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//.
[[it_encyklopedie:sitove_protokoly|Zpět na přehled protokolů]]