From 262c4654d67dca7b2ebe41361bae03db1873329c Mon Sep 17 00:00:00 2001 From: dado Date: Sat, 31 May 2025 11:30:45 +0200 Subject: [PATCH] Controllo degli errori e ritrasmissione --- networking/020-tcp.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/networking/020-tcp.md b/networking/020-tcp.md index 859233e..81e50e8 100644 --- a/networking/020-tcp.md +++ b/networking/020-tcp.md @@ -68,6 +68,8 @@ La comunicazione TCP è *full-duplex*, cioè entrambi gli host possono inviare e - Il campo `ACK number` viene impostato al valore 2001 (*ISN di A + lunghezza dati + 1*), supponendo che il SEQ di A fosse 1001, e che il segmento TCP di A fosse di 1000 byte - Inoltre, B indica il valore della sua `Receive Window`, che servirà ad A per regolarsi nella trasmissione dei dati +> Dimensione payload=Y SEQ=X ACK=X+Y+1 + ### 3. Conferma (ACK) - **Host A**: @@ -89,3 +91,19 @@ La chiusura di una connessione TCP avviene solitamente tramite una procedura a t - *Chiusura standard*: è il processo descritto sopra - *Chiusura brusca*: in alcuni casi, invece di seguire la procedura standard, la connessione TCP può essere terminata in modo brusco tramite l'invio di un segmento contenente la flag `RST` (reset). Tale operazione si verifica ad esempio in presenza di errori o situazioni in cui una delle due parti deve abortire immediatamente la connessione senza completare il normale scambio FIN/ACK - *Chiusura half-closed*: si verifica quando un host chiude il proprio lato della comunicazione, inviando un segmento FIN, mentre l'altro host mantiene aperta la connessione. Questo può verificarsi, ad esempio, quando un server è oberato e deve ancora elaborare richieste in arrivo + +## Controllo degli errori e ritrasmissione + +Nel protocollo TCP, un segmento può andare perso, subire alterazioni (come corruzione) oppure arrivare duplicato o fuori sequenza, rispetto al SEQ atteso dal destinatario. + +Per il controllo degli errori, TCP utilizza il *checksum*: se il destinatario rileva che il checksum non corrisponde, il segmento viene scartato. + +Nel caso in cui un segmento venga perso, duplicato o arrivi fuori sequenza, TCP implementa meccanismi per la ritrasmissione del segmento. + +Esistono due tecniche principali di ritrasmissione: + +1. Invio di `ACK duplicati`: quando un segmento arriva fuori sequenza, il destinatario continua a inviare ACK ripetuti per il numero di sequenza atteso. Questi ack informano il mittente che il segmento successivo non è stato ricevuto correttamente + +2. `RTO` (*Retransmission Time Out*): all'invio del primo segmento, un timer viene avviato. Se nel periodo definito dal timeout (RTO) il mittente non riceve un ACK che confermi l’avvenuta ricezione, allora il segmento si ritiene perso e viene ritrasmesso. Il timer viene azzerato al momento della ritrasmissione e rilanciato per il nuovo segmento. + +In aggiunta, TCP utilizza il meccanismo degli `ACK cumulativi`: un singolo ack può confermare la corretta ricezione di più segmenti precedenti.