Kako funkcioniše TCP protokol?
sobes.tech АИ
Одговор од АИ
TCP (Transmission Control Protocol) — to je protokol sloja prenosa koji obezbeđuje pouzdanu, usmerenu na konekciju isporuku podataka.
Ključni aspekti rada:
-
Trostruki rukohvat (Three-way Handshake):
- Klijent šalje SYN (Synchronize) paket sa početnim brojem sekvence (ISN).
- Server prima SYN, šalje SYN-ACK (Synchronize-Acknowledge) koji sadrži njegov ISN i potvrdu (ACK) ISN klijenta (
acknowledgement number = client ISN + 1). - Klijent prima SYN-ACK, šalje ACK za potvrdu ISN servera (
acknowledgement number = server ISN + 1). - Veza je uspostavljena, podaci mogu biti preneti.
-
Strujni prenos podataka: Podaci se prenose kao neprekidni tok bajtova, a ne kao odvojeni paketi. TCP segmentira tok podataka u segmente za prenos.
-
Numerisanje sekvenci (Sequence Numbers): Svaki bajt u toku podataka ima jedinstveni broj. Segmenti sadrže broj prvog bajta (sequence number) i broj potvrde (acknowledgement number), koji ukazuje na sledeći bajt koji pošiljalac očekuje da primi.
-
Potvrde (Acknowledgements - ACK): Primalac šalje ACK da obavesti pošiljaoca koji su podaci uspešno primljeni. Ako pošiljalac ne primi ACK u određenom vremenu (timeout), ponovo šalje segment.
-
Kontrola grešaka (Error Control): Koriste se kontrolne sume (checksums) za proveru integriteta podataka. Ako je segment oštećen, odbacuje se, a pošiljalac čeka timeout ili duplikat ACK za ponovno slanje.
-
Kontrola toka (Flow Control): Mehanizam koji sprečava preopterećenje bafera primaoca. Primalac obaveštava pošiljaoca o veličini svog prozora za primanje (receive window) u ACK paketima. Pošiljalac može poslati samo onoliko podataka koliko dozvoli prozor.
-
Kontrola zagušenja (Congestion Control): Mehanizam za određivanje dostupne propusnosti mreže i dinamičko regulisanje brzine prenosa podataka radi izbegavanja zagušenja. Uključuje algoritme kao što su slow start, congestion avoidance, fast retransmit i fast recovery.
-
Zatvaranje veze: Obično putem četvorostranog rukohvata:
- Jedna strana šalje FIN (Finish) paket.
- Druga strana šalje ACK za FIN.
- Druga strana šalje svoj FIN (nakon završetka prenosa preostalih podataka).
- Prva strana šalje ACK za taj FIN.
- Veza se zatvara.
Struktura TCP segmenta:
| Polje | Veličina (bajtovi) | Opis |
|---|---|---|
| Source Port | 2 | Poštanski broj pošiljaoca |
| Destination Port | 2 | Poštanski broj primaoca |
| Sequence Number | 4 | Broj prvog bajta u segmentu |
| Acknowledgement Number | 4 | Broj sledećeg očekivanog bajta |
| Data Offset/Header Length | 4 bita | Dužina TCP zaglavlja |
| Reserved | 6 bita | Rezervisano |
| Flags (Control Bits) | 6 bita | URG, ACK, PSH, RST, SYN, FIN |
| Window Size | 2 | Veličina prozora za primanje |
| Checksum | 2 | Kontrolna suma zaglavlja i podataka |
| Urgent Pointer | 2 | Ukazuje na hitne podatke (ako je URG postavljeno) |
| Options | Promenljivo | Dodatne opcije |
| Padding | Promenljivo | Za poravnanje zaglavlja |
| Data | Promenljivo | Preneseni podaci |
// Flags (Control Bits):
// URG: Važno polje Urgent Pointer
// ACK: Važno polje potvrde
// PSH: Funkcija Push
// RST: Resetovanje veze
// SYN: Sinhronizacija brojeva sekvence
// FIN: Nema više podataka od pošiljaoca