UDP e TCP: Protocolli di Trasporto

UDP: Protocollo di Trasporto Connectionless

UDP (User Datagram Protocol) è un protocollo a livello Transport che opera senza connessione tra mittente e destinatario, trattando ogni datagramma in modo indipendente. Offre un servizio Best Effort, senza garanzie di consegna o sequenza dei datagrammi. UDP fornisce funzionalità di multiplexing (tramite porte) e controllo dell'integrità dei dati (checksum opzionale).

Datagramma UDP

Il datagramma UDP è composto da:

  • Source port number (16 bit): porta del mittente.

  • Destination port number (16 bit): porta del destinatario.

  • Length (16 bit): lunghezza totale del datagramma (header + dati).

  • Checksum (16 bit, opzionale): codice di controllo.

  • Data: informazioni trasmesse.

La dimensione massima di un datagramma UDP è di 65.508 byte.

Multiplexing/Demultiplexing UDP

  • Multiplexing: aggiunta dell'header UDP al messaggio, usando la socket per la source port, la primitiva Data_Request per la destination port, calcolo di length e checksum.

  • Demultiplexing: verifica dell'integrità tramite checksum, ricerca della socket associata alla destination port, invio dei dati alla socket.

Vantaggi di UDP

  • Non richiede connessione.

  • Non mantiene lo stato della connessione.

  • Sovraccarico minimo (8 byte di header).

  • Controllo del livello applicativo più efficace.

UDP-Lite

UDP-Lite permette di non scartare datagrammi UDP con errori, utile per applicazioni come VoIP e streaming. Il campo length nell'UDP-Lite indica la "checksum coverage length", specificando quanti byte del datagramma sono controllati.

TCP: Protocollo di Trasporto Connection-Oriented

TCP (Transmission Control Protocol) è un protocollo connection-oriented e affidabile, che garantisce la consegna ordinata dei dati (data stream). Stabilisce una connessione full-duplex, point-to-point, richiedendo l'inizializzazione di variabili di stato.

TCP utilizza più risorse rispetto a UDP in termini di CPU, memoria e banda.

Comunicazione tra TCP e processo applicativo

I Sistemi Operativi permettono l'accesso sincrono alle porte. Le informazioni di controllo passate a TCP includono:

  • Source address

  • Destination address

  • Next packet sequence number

  • Current buffer size

  • Next write position

  • Next read position

Segmento TCP

I campi del segmento TCP sono:

  • Source port number (16 bit)

  • Destination port number (16 bit)

  • Sequence number (32 bit)

  • Acknowledgment number (32 bit)

  • Header length (4 bit)

  • Flags (8 bit): CWR, ECE, URG, ACK, PSH, RST, SYN, FIN

  • Window size (16 bit)

  • Checksum (16 bit)

  • Urgent pointer (16 bit)

  • Options

  • Data

La dimensione massima di un segmento TCP è 65.495 byte.

Gestione della Congestione (TCP)

TCP adotta il modello Best Effort, gestendo la congestione tramite timer e algoritmi come slow start e congestion avoidance.
maxWindow = min(FinestraDiCongestione, FinestraDiRicezione)

  • Slow start: la finestra di congestione viene raddoppiata ad ogni ACK fino a raggiungere una soglia (threshold).

  • Congestion avoidance: incrementi lineari della finestra di congestione.

  • Timeout: la soglia viene impostata alla metà del valore della finestra di congestione, che viene riportata al suo valore iniziale.

Handshaking TCP

Three-Way Handshake

  1. Host 1 invia SYN (SEQ.N=X).

  2. Host 2 risponde con SYN-ACK (ACK.N=X+1, SEQ.N=Y).

  3. Host 1 risponde con ACK (ACK.N=Y+1).
    MSS = min(MTU, MRU) - 20 byte

Trasmissione dati

TCP gestisce il controllo di flusso e gli errori con il protocollo sliding window (Go-back-N con timeout).