Files
learning/networking/020-tcp.md
2025-05-24 12:19:09 +02:00

4.3 KiB

TCP

TCP, acronimo di Transmission Control Protocol, è un protocollo del livello 4 (transport layer) che si distingue per il suo approccio connection-oriented, a differenza di UDP. Questo significa che TCP stabilisce una connessione affidabile tra i processi degli host prima di iniziare lo scambio di informazioni, garantendo così una trasmissione sicura e ordinata.

Caratteristiche principali

  • Connection-Oriented: prima dell'invio dei dati, TCP stabilisce una connessione tra le due estremità attraverso il meccanismo del three-way handshake (SYN, SYN-ACK, ACK). La chiusura della connessione avviene in modo simile, utilizzando un meccanismo che assomiglia a un three-way handshake (FIN, FIN-ACK, ACK)

  • Affidabilità: TCP è progettato per ambienti in cui è fondamentale non perdere informazioni. TCP effettua la rilevazione degli errori mediante il controllo del checksum, in modo analogo a UDP. Inoltre, garantisce il corretto ordinamento dei segmenti, poiché questi potrebbero pervenire in ordine diverso da quello in cui sono stati inviati. Infine, TCP scarta i pacchetti duplicati, assicurando la precisione e l'integrità dei dati trasmessi

  • Full Duplex: la comunicazione è bidirezionale, ovvero i dati possono essere inviati e ricevuti simultaneamente su entrambi i lati della connessione.

  • Controllo del flusso e della congestione: TCP regola la velocità di invio dei dati in base alla capacità del ricevente, evitando di sovraccaricarlo. Questa gestione avviene attraverso meccanismi di controllo delle finestre di trasmissione e ricezione. Inoltre, TCP adotta algoritmi per il controllo della congestione, riducendo la velocità di trasmissione in caso di congestione della rete

Segmento TCP

L'header del segmento TCP può variare da 20 byte (minimo) a 60 byte (massimo), e incapsula il payload, ovvero il messaggio generato dall'application layer.

tcp

I campi principali dell'header TCP sono i seguenti:

  • Porta Sorgente (16 bit o 2 byte)
  • Porta Destinazione (16 bit o 2 byte)
  • Sequence Number (SEQ) (32 bit o 4 byte): rappresenta il numero del primo byte del segmento TCP trasmesso
  • Acknowledgment Number (ACK) (32 bit o 4 byte): utilizzato dal destinatario per confermare la ricezione di n byte. Se il mittente invia n byte di dati, il destinatario risponderà con un un segmento con il campo ACK impostato a n+1. Questo valore indica che sono stati ricevuti correttamente n byte e che il prossimo byte atteso ha un numero di sequenza con un valore di n+1. Il punto di partenza del Sequence Number non è obbligatoriamente 0, ma dipende dall'ISN (Initial Sequence Number), che viene scelto casualmente tra 0 e 2^32-1
  • Flags (6 bit): Ogni bit rappresenta un flag con una funzione specifica.
    • URG (Urgent): indica che il campo Urgent Data Pointer contiene informazioni importanti che devono essere gestite
    • PUSH: il mittente richiede al destinatario di inviare immediatamente i dati all'application layer
    • ACK: attivato se il campo Acknowledgment Number contiene un valore valido
    • SYN: attivato durante l'instaurazione di una connessione
    • FIN: Attivato per segnalare la chiusura della connessione
    • RST (Reset): utilizzato per interrompere bruscamente la connessione
  • Checksum (16 bit): controllo degli errori nel segmento TCP.
  • Options (40 byte): Campo opzionale che può contenere informazioni aggiuntive per la gestione della connessione.
  • Receive Window (16 bit): campo utilizzato per la gestione del flusso e delle finestre. Il destinatario indica al mittente la dimensione massima della finestra di ricezione

Gestione del flusso

Il controllo del flusso in TCP viene realizzato tramite il meccanismo delle finestre, che aiuta a evitare che il mittente sovraccarichi il destinatario. In particolare:

  • La Receive Window (finestra di ricezione) impostata dal destinatario indica quanti byte è in grado di accogliere
  • Il mittente regola la quantità di dati inviati in base a questo valore (Send Window), garantendo che il destinatario non venga sopraffatto. La dimensione della finestra di invio può essere dinamica e viene regolata in base alla capacità di ricezione del destinatario e alle condizioni della rete.
  • A livello di invio, la congestion window può ulteriormente limitare il flusso in base alle condizioni di rete