Sobes.tech
Junior

Cum funcționează protocolul TCP?

sobes.tech AI

Răspuns de la AI

TCP (Transmission Control Protocol) — acesta este un protocol de nivel de transport care asigură livrarea fiabilă, orientată pe conexiune, a datelor.

Aspecte cheie ale funcționării:

  1. Handshake-ul în trei pași (Three-way Handshake):

    • Clientul trimite un pachet SYN (Synchronize) cu un număr de secvență inițial (ISN).
    • Serverul primește SYN, trimite un SYN-ACK (Synchronize-Acknowledge) care conține propriul ISN și o confirmare (ACK) a ISN-ului clientului (acknowledgement number = client ISN + 1).
    • Clientul primește SYN-ACK, trimite un ACK pentru confirmarea ISN-ului serverului (acknowledgement number = server ISN + 1).
    • Conexiunea este stabilită, datele pot fi transmise.
  2. Transferul de date în flux: Datele sunt transmise ca un flux continuu de octeți, nu ca pachete separate. TCP segmentează fluxul de date în segmente pentru transmitere.

  3. Numerotarea secvențială (Sequence Numbers): Fiecare octet din fluxul de date are un număr unic. Segmentele conțin numărul primului octet din ele (sequence number) și numărul de confirmare (acknowledgement number), indicând următorul octet pe care expeditorul îl așteaptă să-l primească.

  4. Confirmări (Acknowledgements - ACK): Destinatarul trimite un ACK pentru a informa expeditorul despre datele care au fost primite cu succes. Dacă expeditorul nu primește un ACK în timpul alocat (timeout), retransmite segmentul.

  5. Controlul erorilor (Error Control): Se utilizează sume de control (checksums) pentru a verifica integritatea datelor. Dacă segmentul este corupt, este respins și expeditorul așteaptă un timeout sau un ACK duplicat pentru retransmitere.

  6. Controlul fluxului (Flow Control): Un mecanism folosit pentru a preveni supraîncărcarea bufferului destinatarului. Destinatarul informează expeditorul despre dimensiunea ferestrei de recepție (receive window) în pachetele ACK. Expeditorul poate trimite doar atât cât indică fereastra.

  7. Controlul congestiei (Congestion Control): Un mecanism pentru a determina capacitatea de transfer disponibilă a rețelei și pentru a regla dinamic viteza de transmitere a datelor pentru a evita congestia. Include algoritmi precum slow start, congestion avoidance, fast retransmit și fast recovery.

  8. Închiderea conexiunii: De obicei, se folosește o handshake în patru pași:

    • O parte trimite un pachet FIN (Finish).
    • Cealaltă parte trimite un ACK pentru FIN.
    • Cealaltă parte trimite propriul FIN (după finalizarea transmiterii datelor restante).
    • Prima parte trimite un ACK pentru acest FIN.
    • Conexiunea este închisă.

Structura segmentului TCP:

Câmp Dimensiune (octeți) Descriere
Port sursă 2 Portul expeditorului
Port destinație 2 Portul destinatarului
Număr de secvență 4 Numărul primului octet din segment
Număr de confirmare 4 Numărul următorului octet așteptat
Offset date / Lungime header 4 bits Lungimea header-ului TCP
Rezervat 6 bits Rezervat
Flags (Bit control) 6 bits URG, ACK, PSH, RST, SYN, FIN
Dimensiune fereastră 2 Dimensiunea ferestrei de recepție
Sumă de control 2 Sumă de control a header-ului și datelor
Pointer urgent 2 Indică date urgente (dacă URG este setat)
Opțiuni Variabil Opțiuni suplimentare
Padding Variabil Pentru alinierea header-ului
Date Variabil Date transmise
// Flag-uri (Bit control):
// URG: Câmpul Pointer urgent este semnificativ
// ACK: Câmpul de confirmare este semnificativ
// PSH: Funcție Push
// RST: Resetarea conexiunii
// SYN: Sincronizează numerele de secvență
// FIN: Nu mai sunt date de la expeditor