Jak funguje protokol TCP?
sobes.tech AI
Odpověď od AI
TCP (Transmission Control Protocol) — je protokol vrstvy přenosu, který zajišťuje spolehlivou, spojení orientovanou doručování dat.
Klíčové aspekty fungování:
-
Trojstranné navázání spojení (Three-way Handshake):
- Klient odešle SYN (Synchronize) paket s počátečním číslem sekvence (ISN).
- Server obdrží SYN, odešle SYN-ACK (Synchronize-Acknowledge), který obsahuje jeho vlastní ISN a potvrzení (ACK) ISN klienta (
acknowledgement number = client ISN + 1). - Klient obdrží SYN-ACK, odešle ACK, kterým potvrzuje ISN serveru (
acknowledgement number = server ISN + 1). - Spojení je navázáno, data mohou být přenášena.
-
Proudová přenos dat: Data jsou přenášena jako nepřerušovaný proud bajtů, nikoli jako samostatné pakety. TCP segmentuje datový proud do segmentů pro přenos.
-
Číslování sekvencí (Sequence Numbers): Každý bajt v datovém proudu má unikátní číslo. Segmenty obsahují číslo prvního bajtu (sequence number) a číslo potvrzení (acknowledgement number), které ukazuje na další očekávaný bajt.
-
Potvrzení (Acknowledgements - ACK): Příjemce posílá ACK, aby informoval o úspěšném přijetí dat. Pokud odesílatel nedostane ACK v určitém čase (timeout), segment znovu odešle.
-
Ovládání chyb (Error Control): Kontrolní součty (checksums) se používají k ověření integrity dat. Pokud je segment poškozen, je odmítnut a odesílatel čeká na timeout nebo duplicitní ACK pro opakované odeslání.
-
Řízení toku (Flow Control): Mechanismus, který zabraňuje přetížení bufferu příjemce. Příjemce informuje o velikosti svého okna příjmu (receive window) v ACK paketech. Odesílatel může poslat pouze tolik dat, kolik dovolí okno.
-
Řízení zahlcení (Congestion Control): Mechanismus pro určení dostupné kapacity sítě a dynamické řízení rychlosti přenosu dat, aby se předešlo zahlcení sítě. Zahrnuje algoritmy jako slow start, congestion avoidance, fast retransmit a fast recovery.
-
Ukončení spojení: Obvykle pomocí čtyřstranného navázání:
- Jedna strana odešle FIN (Finish) paket.
- Druhá strana odešle ACK na FIN.
- Druhá strana odešle svůj FIN (po dokončení přenosu zbývajících dat).
- První strana odešle ACK na tento FIN.
- Spojení je uzavřeno.
Struktura TCP segmentu:
| Pole | Velikost (byty) | Popis |
|---|---|---|
| Source Port | 2 | Zdrojový port |
| Destination Port | 2 | Cílový port |
| Sequence Number | 4 | Číslo prvního bajtu v segmentu |
| Acknowledgement Number | 4 | Číslo následujícího očekávaného bajtu |
| Data Offset/Header Length | 4 bity | Délka hlavičky TCP |
| Reserved | 6 bitů | Vyhrazeno |
| Flags (Control Bits) | 6 bitů | URG, ACK, PSH, RST, SYN, FIN |
| Window Size | 2 | Velikost okna příjmu |
| Checksum | 2 | Kontrolní součet hlavičky a datů |
| Urgent Pointer | 2 | Ukazuje na urgentní data (pokud je URG nastaveno) |
| Options | Proměnné | Další volby |
| Padding | Proměnné | Vyrovnání hlavičky |
| Data | Proměnné | Přenášená data |
// Flags (Control Bits):
// URG: Důležité pole Urgent Pointer
// ACK: Důležité pole potvrzení
// PSH: Funkce Push
// RST: Reset spojení
// SYN: Synchronizace čísel sekvence
// FIN: Žádná další data od odesílatele