La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Complementi sul controllo d’errore (parte III). Selective Repeat (richiesta esplicita) Come nello schema Idle RQ, per velocizzare la ritrasmissione di.

Presentazioni simili


Presentazione sul tema: "Complementi sul controllo d’errore (parte III). Selective Repeat (richiesta esplicita) Come nello schema Idle RQ, per velocizzare la ritrasmissione di."— Transcript della presentazione:

1 Complementi sul controllo d’errore (parte III)

2 Selective Repeat (richiesta esplicita) Come nello schema Idle RQ, per velocizzare la ritrasmissione di un pacchetto difettoso, il mittente M può inviare al ricevente R il pacchetto NAK di not-acknowledgment. Alternativamente, dopo un NAK, R può smettere di inviare ACK.

3 X ACK(N+4 ) Usando l’explicit request, ACK(N) notifica la ricezione di tutti i frame fino ad N compreso! Dopo l’invio di un NAK, R smette di inviare ACK. Altrimenti un NAK corrotto porterebbe alla perdita del pacchetto! Selective Repeat [richiesta esplicita] Frame N+1 corrotto

4 Go-Back-N (1) Il metodo Selective Repeat è molto costoso in termini di buffer al ricevente. Viene utilizzato soprattutto: quando l’ordine di ricezione dei pacchetti non è importante (per esempio, quando i pacchetti sono molto piccoli); quando i pacchetti vengono riassemblati direttamente dal ricevente, prima di essere inviati al livello superiore (bit rate elevati, pacchetti piccoli). Nei casi in cui i pacchetti possono essere più grandi, viene preferito lo schema Go-Back-N. Go-Back-N è lo schema usato per TCP/IP

5 Frame N+1 corrotto Go-Back-N (2)

6 ACK N e N+1 corrotti ACK(N) notifica la ricezione di tutti i frame fino ad N compreso! Go-Back-N (3)

7 Go-Back-N lato mittente [V(S) = 0] [RL] = retransmission list; start: switch(evento) { case ‘arriva pacchetto dal livello superiore’ : assegnagli il numero V(S); V(S)++; mettilo in [RL]; trasmettilo; Timer pacchetto V(S) start; case ‘ACK[N]’ : if(corretto) Elimina pacchetti <= N da [RL], Stop Timers; else Trascura ACK; case ‘NAK[N]’ : case ‘scade timer pacchetto’ : for(i=1; i<=numero pacchetti in [RL], i++) trasmetti pacchetto i in [RL]; Timer pacchetto start; } goto start;

8 Go-Back-N lato destinatario [V(R) = 0] stato = "normale" start: switch(evento) { case ‘pacchetto[N]’ : if(corretto) if(N == V(R)) stato = "normale"; timer NAK stop; manda ACK[V(R)]; passa pacchetto al livello superiore, V(R)++; else if( (N > V(R)) && (stato == "normale") ) invia NAK[V(R)]; Timer NAK start; stato = "nak"; else manda ACK[V(R)], elimina pacchetto; else elimina pacchetto; case ‘scade timer nak’ : invia NAK[V(R)]; Timer NAK start; } goto start;

9 Commenti Con lo schema Go-Back-N, al ricevente è richiesta una finestra di ricezione di solo 1 frame. Il mittente invece deve avere una retransmission list abbastanza grande da contenere tutti i pacchetti in attesa di un ACK dal secondario. La lista deve quindi contenere almeno (T ix+ 2T p )/T ix pacchetti.

10 Piggybacking Nei tre schemi ARQ considerati abbiamo sempre supposto che la comunicazione fosse half-duplex. FINE In genere, le connessioni sono full-duplex e ciascuno dei due host si comporta sia da mittente che da ricevente. In ciascuna delle due direzioni fluiscono quindi sia pacchetti che ACK e NAK. Per ridurre il flusso di pacchetti si utilizza una tecnica detta piggyback (portare sulla schiena). Tutti i pacchetti contengono un codice I(N) che indica il loro ordine nella sequenza di spedizione e un codice di ACK o NAK N(R) che indica l’ ordine per la direzione opposta.


Scaricare ppt "Complementi sul controllo d’errore (parte III). Selective Repeat (richiesta esplicita) Come nello schema Idle RQ, per velocizzare la ritrasmissione di."

Presentazioni simili


Annunci Google