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.
Queste procedure sono attivate a qualunque livello, è presente a livello trasporto per il recupero end-to-end.
I protocolli di ritrasmissione hanno come obiettivo l'integrità del messaggio, l'ordine della sequenza di pacchetti e evitare la duplicazione, usando i messaggi ACK e NACK e meccanismi come il timeout e la finestra di trasmissione
Questo protocollo utilizza soltanto gli ACK e un contatore di timeout. Ogni messaggio ricevuto correttamente è riscontrato con un ACK.
Il trasmettitore trasmette un pacchetto e inizializza un contatore di timeout, in base all'evento successivo decide cosa fare:
ACK trasmette il pacchetto successivoIl 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:
È spesso utilizzato in modalità half-duplex.
È una variante di Stop & Wait, dove si possono trasmettere fino a
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 (
Per rimediare possiamo:
NACKGli ACK possono essere inseriti negli header dei pacchetti che viaggiano in direzione opposta (Piggy-backing). Per farlo introduciamo i campi SN e AN, dove SN è il numero di sequenza del pacchetto trasmesso e AN è un riscontro cumulativo dei pacchetti fino a SN
Le regole del protocollo Go-back-N in modalità full duplex (canale di trasmissione doppio bidirezionale) per il trasmettitore, definendo
SN pari a AN ricevuto si pone AN.L'intervallo della finestra di trasmissione è :
Analogamente, per il ricevitore, definendo AN come stato dei riscontri corrente:
SNAN, questo viene inoltrato ai livelli superiori e si incrementa AN di uno.AN viene trasmesso al mittente utilizzando i pacchetti in direzione opposta.Per evitare errori è necessario inizializzare SN e AN e deve esistere un momento
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, W sia ricevuto. Inoltre, il ricevitore può aspettare che il buffer si svuoti per una frazione significativa (ad esempio, dichiarando 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.