====== 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ů]]