Lezione (2025-11-06)
TCP è un protocollo punto-punto bidirezionale che garantisce un flusso di byte affidabile e consegnato in ordine.
Esiste un meccanismo di controllo di congestione che definisce dinamicamente le dimensioni delle finestre. Gli ACK sono cumulativi.
Struttura di un segmento TCP
Section titled “Struttura di un segmento TCP”| sezione | dimensione (bit) |
|---|---|
| porta sorgente | 16 |
| porta destinazione | 16 |
| numero di sequenza (bytes inviati) | 32 |
| numero di ACK (bytes ricevuti) | 32 |
| offset dati (lunghezza delle opzioni) | 4 |
| spazio inutilizzato | 3 |
| flag URG: dati urgenti | 1 |
| flag ACK: il segmento contiene un ACK valido | 1 |
| flag PSH: invia i dati immediatamente, senza aspettare | 1 |
| flag RST: resetta la connessione | 1 |
| flag SYN: usato per settare i numeri di sequenza iniziali | 1 |
| flat FIN: usato per chiudere la connessione | 1 |
| lunghezza finestra di ricezione | 16 |
| checksum header | 16 |
| offset fine dati urgenti | 16 |
| opzioni (campo non obbligatorio) | 0-320 |
Il numero di sequenza è il numero del primo byte del segmento (rispetto al totale dei byte inviati). Il numero di ACK è il numero di sequenza del prossimo byte atteso dal ricevitore.

Setup della connessione TCP
Section titled “Setup della connessione TCP”La procedura di connessione TCP avviene attraverso un three way handshake.
- L’host A (colui che inizia la connessione) invia un segmento con flag SYN a 1, porta sorgente A, porta destinazione B e numero di sequenza casuale.
- L’host B (server in attesa di connessioni) risponde con un segmento con flag SYN e ACK a 1, porta sorgente B, porta destinazione A, numero di sequenza casuale e numero di ACK .
- L’host A invia un segmento con flag ACK a 1 e numero di ACK .
Maximum Segment Size (MSS)
Section titled “Maximum Segment Size (MSS)”TCP non invia mai un singolo byte alla volta (a meno che non sia forzato). Cerca invece di inviare segmenti lunghi quanto un MSS.
L’MSS è la massima lunghezza dei dati trasportati dal segmento, che dipende dall’MTU dei livelli sottostanti e dalla conformazione di tutto il percorso che devono compiere i pacchetti.
Per scegliere l’MSS si prova ad aumentarlo fino a quando ci si accorge che qualche segmento viene perso.
Chiusura soft di una connessione TCP
Section titled “Chiusura soft di una connessione TCP”Le connessioni TCP sono sempre bidirezionali e quindi bisogna che la chiusura avvenga da entrambe le parti.
La chiusura controllata consiste nell’inviare un segmento con FIN=1 e ricevere un ACK. Si possono ancora ricevere segmenti dall’altro host ma non possono contenere dati (connessione half-closed). Quando l’altro host esegue lo stesso processo allora la connessione viene chiusa.
Chiusura hard di una connessione TCP
Section titled “Chiusura hard di una connessione TCP”Il flag RST si usa per resettare connessioni non gestibili o che si trovano in uno stato errato.
In questo caso l’host che invia l’RST non deve aspettare altri messaggi e può liberare subito le risorse allocate alla connessione.
Retransmission TimeOut (RTO)
Section titled “Retransmission TimeOut (RTO)”Il retransmission timeout è il tempo che un host aspetta per ricevere un ACK, prima di considerare l’invio fallito e riprovare la ritrasmissione.
Questo tempo dipende dal RTT, impostarlo troppo piccolo porta a ritrasmissioni non necessarie, troppo grande porta a una reazione lenta alla perdita di segmenti.
Per calcolare il RTO (RFC 6298) si usano meccanismi di media mobile, che si basano su sugli RTT precedenti () 2 valori:
- : media mobile del RTT, il valore dei vecchi campioni diminuisce esponenzialmente con valore di tipicamente a .
- : deviazione standard dell’errore tra la media dell’RTT e l’RTT misurato.
L’RTO si calcola con la seguente formula:
Per inizializzare si pone e .
Controllo di flusso TCP
Section titled “Controllo di flusso TCP”Il controllo di flusso del protocollo TCP è un meccanismo mediante il quale il ricevitore può controllare la velocità con cui trasmettitore invia i dati.
Il ricevitore comunica quanto spazio libero ha nel proprio buffer di ricezione includendo il valore nel campo ‘finestra di ricezione’ dell’header. Il mittente limita la quantità di dati in volo (che non hanno ricevuto ACK) al valore specificato.