Note
Un collegamento è detto ideale se tutto ciò che viene trasmesso arriva nello stesso ordine e viene correttamente interpretato a destinazione.
In un protocollo di ritrasmissione ciascuna trama ricevuta viene riscontrata da un messaggio di ACK o NACK. La mancanza di ACK o la presenza di NACK comportano la necessità di ritrasmettere il messaggio, e la procedura è ripetuta fino a quando la trama ricevuta non è corretta.
Controllo di integrità
Queste procedure sono attivate a qualunque livello, è presente a livello trasporto per il recupero end-to-end.
Protocolli di ritrasmissione
Note
I protocolli di ritrasmissione hanno come obiettivo l’integrità del messaggio, l’ordine della sequenza di pacchetti e evitare la duplicazione, usando i messaggi
ACKeNACKe meccanismi come il timeout e la finestra di trasmissione
Protocollo Stop & Wait
Note
Questo protocollo utilizza soltanto gli
ACKe un contatore di timeout. Ogni messaggio ricevuto correttamente è riscontrato con unACK.
Il trasmettitore trasmette un pacchetto e inizializza un contatore di timeout, in base all’evento successivo decide cosa fare:
- In caso di
ACKtrasmette il pacchetto successivo - In caso di timeout ritrasmette il pacchetto corrente

Il protocollo ha funzionamento corretto se
Ogni pacchetto e ACK viene numerato per evitare errori dati dalla trasmissione multipla di pacchetti. I pacchetti sono numerati con SN, mentre gli ACK sono numerati con AN.
Quando il trasmettitore riceve un ACK deve poterlo assegnare al pacchetto corretto.
L’efficienza del protocollo, cioè la frazione di tempo in cui il canale è usato per trasmettere informazione utile in assenza di errori, si calcola con la formula:
Ha un efficienza molto bassa se . Infatti non è adatto a situazioni con elevato ritardo di propagazione o a elevato ritmo di trasmissione.
È spesso utilizzato in modalità half-duplex.
Protocollo Go-back-N
Note
È una variante di Stop & Wait, dove si possono trasmettere fino a pacchetti (finestra) senza aver avuto il riscontro.
Se il riscontro del primo pacchetto arriva prima della fine della finestra, la finestra viene fatta scorrere di una posizione.
Quando si verifica un errore si ricomincia a trasmettere la finestra dal primo pacchetto non riscontrato.
Il timeout funziona come nello Stop & Wait: raggiunto l’ultimo pacchetto della finestra, la trasmissione si blocca in attesa di un nuovo ACK o della scadenza del timeout.

Questo sistema può causare la ritrasmissione di pacchetti corretti ma semplifica il funzionamento dato che permette al ricevitore di ignorare ricezioni fuori sequenza, in quanto per i pacchetti ignorati non è trasmesso alcun ACK.
In caso il timeout non scada e i pacchetti non siano fuori sequenza un ACK può essere collettivo.
La finestra ottima coincide con il Round Trip Time:

La finestra può essere dimensionata in tempo, in byte e in molti altri modi, tuttavia il dimensionamento si complica se i tempi di attraversamento della rete () variano con il tempo.
Per rimediare possiamo:
- Rendere la finestra grande:
- Non pregiudica il funzionamento in assenza d’errore
- In caso di errore aumenta il ritardo con cui si scopre ed il numero di ritrasmissioni inutili
- Uso del
NACK
- Stimare il tempo del RTT e adattare la finestra o il timeout.
Protocollo Go-back-N full duplex
Piggy backing
Gli
ACKpossono essere inseriti negli header dei pacchetti che viaggiano in direzione opposta (Piggy-backing). Per farlo introduciamo i campiSNeAN, doveSNè il numero di sequenza del pacchetto trasmesso eANè un riscontro cumulativo dei pacchetti fino aSNed è inviato come risposta dal ricevente.
Le regole del protocollo Go-back-N in modalità full duplex (canale di trasmissione doppio bidirezionale) per il trasmettitore, definendo come la dimensione della finestra, come l’ultimo riscontro ricevuto e come numero corrente disponibile per la trasmissione, sono:
- Ogni nuovo pacchetto viene messo in attesa se , altrimenti, se , il pacchetto viene trasmesso con
SNpari a , viene inizializzato il timer di timeout e il valore di viene incrementato di uno. - Ad ogni riscontro
ANricevuto si poneAN. - I pacchetti nella finestra vengono trasmessi senza vincoli di temporizzazione.
- In caso di scadenza di timeout la ritrasmissione deve ripartire da
L’intervallo della finestra di trasmissione è :
Analogamente, per il ricevitore, definendo AN come stato dei riscontri corrente:
- Se viene ricevuto correttamente un pacchetto con
SNAN, questo viene inoltrato ai livelli superiori e si incrementaANdi uno. - Ad istanti arbitrari ma con ritardo finito,
ANviene trasmesso al mittente utilizzando i pacchetti in direzione opposta.
Per evitare errori è necessario inizializzare SN e AN e deve esistere un momento non equivocabile per scambiare l’informazione per l’inizializzazione.
Controllo di flusso a finestra mobile
Il buffer di ricezione è limitato a W posizioni, e il ritmo di assorbimento dell’utente può essere arbitrario. L’obiettivo è regolare il ritmo di invio per evitare che i pacchetti vadano persi perché all’arrivo trovano il buffer pieno.
Per gestire il controllo di flusso si può utilizzare un meccanismo a finestra mobile, come il Go-Back-N. In questo schema, la sorgente non può inviare più di W trame senza aver ricevuto il riscontro. I riscontri vengono inviati dal ricevitore solo quando i pacchetti vengono letti dal livello superiore e rimossi dal buffer.
Un problema significativo è quello delle ritrasmissioni. Se il ricevitore ritarda molto l’invio dei riscontri a causa della lentezza del livello superiore, il trasmettitore inizia la ritrasmissione perché scade il timeout. Questo dimostra come il controllo di flusso a finestra mobile e il controllo d’errore a finestra mobile siano fortemente legati. Tuttavia, aumentare il timeout non è una soluzione efficace, in quanto aumenterebbe i ritardi in caso di errore.
Una soluzione radicale per questo problema consiste nel separare i meccanismi di controllo d’errore e di controllo di flusso a finestra. Si può inserire nei riscontri, o nell’header dei pacchetti in direzione opposta, un campo finestra W, oltre a quello del Go-Back-N. In questo modo, il ricevitore invia i riscontri sulla base dell’arrivo dei pacchetti e utilizza il campo W per indicare lo spazio rimanente nel buffer.
La gestione della finestra del controllo di flusso può essere ulteriormente ottimizzata. Non è necessario che il ricevitore dichiari esattamente lo spazio rimanente R; può mantenere un margine di sicurezza (ad esempio, ), dichiarando il buffer vuoto anche se non lo è completamente, garantendo robustezza nel caso in cui arrivino altri segmenti prima che il nuovo valore di W sia ricevuto. Inoltre, il ricevitore può aspettare che il buffer si svuoti per una frazione significativa (ad esempio, dichiarando se e altrimenti), evitando così l’invio di segmenti troppo brevi. Infine, è possibile usare meccanismi adattativi per regolare dinamicamente il valore di W in base alla situazione del buffer.
Questi accorgimenti permettono una gestione più efficiente del controllo di flusso e riducono la probabilità di perdita di pacchetti, migliorando la robustezza e l’affidabilità della comunicazione.

