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
Host 1 invia SYN (SEQ.N=X).
Host 2 risponde con SYN-ACK (ACK.N=X+1, SEQ.N=Y).
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).