complementi sul controllo d’errore (parte iii)

Post on 09-Jan-2016

29 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Complementi sul controllo d’errore (parte III). 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. - PowerPoint PPT Presentation

TRANSCRIPT

Complementi sul controllo

d’errore (parte III)

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.

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

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

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

ACK N e N+1 corrotti

ACK(N) notifica la ricezione di tutti i frame fino ad N compreso!

Go-Back-N (3)

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;

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;

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 (Tix+2Tp)/Tix

pacchetti.

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.

top related