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ů.
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.
Každé TCP spojení začíná třífázovým procesem vytváření spojení, tzv. 3-way handshake:
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).
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
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.
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 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.
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ě.
Viac informacií preberáme na kurze: