Esercizio - Go-Back-N su un collegamento e stop-and-wait sull'altro, messaggio da 300 KB
In questa pagina 5
Testo. Si trasmette un messaggio di KB, diviso in pacchetti di byte, dall'host A all'host B. A e B sono collegati da due collegamenti in serie tramite un nodo intermedio R: il primo ha Mbit/s e ms di propagazione, il secondo Mbit/s e ms.
- Determinare il tempo totale di trasferimento (dalla trasmissione del primo byte in A alla ricezione dell'ultimo byte in B) se sul primo collegamento si esegue GBN con finestra pacchetti e sul secondo si esegue stop-and-wait. Ritardi di elaborazione e di coda trascurati.
- Ripetere il calcolo se invece GBN con è eseguito end-to-end sui due collegamenti e il 2° pacchetto è perso sul primo collegamento. Si consideri il timeout minimo possibile per GBN.
Teoria usata: Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective RepeatARQ (Automatic Repeat reQuest) rende affidabile un collegamento che sbaglia: il ricevitore conferma (ACK) i frame ricevuti bene, il trasmettitore ritrasmette allo scadere del timeout. Servono timeout (contro il deadlock) e numeri di sequenza (contro i duplicati). Con $t_G=t_F+2\tau_p+t_A$ e probabilità di errore $p$: Stop-and-Wait $\rho=\frac{t_F(1-p)}{t_G}$; Go-Back-N con finestra $N\ge t_G/t_F$ $\rho=\frac{1-p}{1+(N-1)p}$; Selective Repeat $\rho=1-p$. Efficienza $\eta=\rho,I/F$. La finestra ottima è la capacità del tubo in pacchetti. In Selective Repeat esiste anche una lunghezza ottima del frame: con overhead $o$ e probabilità di errore sul bit $P_b$, $x_{ott}\simeq\frac o2+\sqrt{o/P_b}$ (frame più corti se il canale sbaglia di più).Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective Repeat →, Analisi delle prestazioni di reteLe prestazioni di una rete si misurano con tre famiglie di metriche: traffico (bitrate $R_0$ massimo del collegamento, throughput $S\le R_0$ dati consegnati con successo, goodput al livello applicazione), ritardo (end-to-end $d_{tot}=d_{proc}+d_{queue}+d_{trans}+d_{prop}$ con $d_{trans}=L/R$ e $d_{prop}=d/v$; jitter; RTT) e capacità del tubo (BDP $=R\cdot$ ritardo, bit che riempiono il collegamento), più l'affidabilità (PER, PDR, PLR). Il throughput di un percorso è quello del collegamento collo di bottiglia, $\min$ dei bitrate, ricordando che i collegamenti condivisi dividono la capacità.Analisi delle prestazioni di rete →, Livello di collegamento e framingIl livello di collegamento (DLL) consegna un frame da un nodo a un nodo adiacente su un collegamento. Servizi: framing, accesso al mezzo (MAC) con indirizzi MAC a 48 bit, controllo di flusso, rilevazione e correzione degli errori. Si divide in DLC (framing, controllo di errore e di flusso) e MAC (accesso al mezzo condiviso). Il framing delimita i frame con un flag: nei protocolli a byte (flag di 8 bit, ESC) si usa il byte stuffing, in quelli a bit (flag 01111110) il bit stuffing, che inserisce uno 0 dopo ogni cinque 1 consecutivi.Livello di collegamento e framing →, Tecniche ARQ - stop-and-wait, go-back-N e selective repeatL'ARQ (automatic repeat request) usa un codice che rivela gli errori e fa ritrasmettere i pacchetti sbagliati, con conferme ACK/NACK. Con $p=1-(1-P_{bit})^L$ la probabilità che un pacchetto sia errato, $t_P$ il tempo di pacchetto, $t_A$ quello dell'ACK e $\tau_P$ il ritardo di propagazione: stop-and-wait $S=\frac{t_P(1-p)}{t_P+t_A+2\tau_P}$; go-back-N $S=\frac{(1-p),t_P}{1+(N-1)p}$ con $N-1=\left\lceil\frac{2\tau_P}{t_P+t_A}\right\rceil$; selective repeat $S=(1-p)\frac{t_P}{t_P+t_A}$. Il numero medio di trasmissioni di un pacchetto è $\frac1{1-p}$.Tecniche ARQ - stop-and-wait, go-back-N e selective repeat →.
Dati e grandezze di base
- Numero di pacchetti: .
- Lunghezza di un pacchetto: bit.
- Tempi di trasmissione: ms, ms.
- Propagazioni: ms, ms.
- Gli ACK sono trascurabili (dimensione non data): il loro unico effetto è il ritardo di propagazione.
Modello. Tempi di coda trascurati significa che R ha una memoria sufficiente e inoltra i pacchetti nell'ordine di arrivo (store-and-forward): inizia a ritrasmettere un pacchetto solo quando lo ha ricevuto per intero. Su ciascun collegamento l'ARQ regola quante volte il mittente può inviare nuovi pacchetti.
(1) GBN () sul collegamento 1, stop-and-wait sul collegamento 2
Chi è il collo di bottiglia?
Non basta guardare i bitrate ( suggerirebbe il primo collegamento): conta quanti pacchetti al secondo ciascun collegamento riesce davvero a far passare con il suo ARQ.
- Collegamento 1 (GBN, ). Il del collegamento è ms. La trasmissione continua (finestra sempre piena) richiederebbe , cioè : falso. Dunque il mittente trasmette pacchetti e poi attende l'ACK: pacchetti ogni ms, cioè pacchetti/ms.
- Collegamento 2 (stop-and-wait). Un pacchetto per ogni ms, cioè pacchetti ogni ms, ossia pacchetti/ms.
Il collegamento 2 è più lento ( ms per pacchetti), nonostante il bitrate doppio: il suo stop-and-wait lo spreca quasi tutto in attesa. Il collo di bottiglia è il secondo collegamento, a causa dell'ARQ. Il primo collegamento consegna i pacchetti a R più in fretta di quanto R riesca a smaltirli, quindi si forma una coda in R e il secondo collegamento non resta mai a corto di pacchetti.
Tempo totale
Il primo pacchetto arriva a R dopo ms. Da quel momento il collegamento 2 lavora a cicli da , uno per pacchetto: il pacchetto inizia sul collegamento 2 all'istante . L'ultimo () viene poi trasmesso () e propagato (), e non serve aspettare il suo ACK:
Verifica che la coda non si svuoti: l'ultimo pacchetto arriva a R, col ritmo del collegamento 1, intorno ai ms, mentre il collegamento 2 lo trasmette a ms: R ha sempre pacchetti pronti, quindi la formula vale.
(2) GBN con end-to-end, 2° pacchetto perso
Ora la finestra di pacchetti si applica all'intero percorso: un pacchetto viene considerato confermato solo quando il suo ACK ritorna da B ad A.
Si ha trasmissione continua?
Il collo di bottiglia ora è semplicemente il collegamento con il tempo di trasmissione più lungo, il primo (). Il end-to-end è Trasmissione continua se : è falso. Quindi il mittente invia pacchetti, poi resta fermo ad aspettare: si lavora a finestre, una ogni ms (il primo ACK arriva dopo un e riapre la finestra).
Senza perdite
Con e finestre da : finestre complete; l'ultima contiene pacchetti. Le finestre complete durano . L'ultima finestra non attende l'ACK: il secondo pacchetto parte dopo (il primo è trasmesso per primo), quindi l'ultimo pacchetto arriva a B dopo :
Con la perdita del 2° pacchetto
Cosa succede, istante per istante:
| Istante (ms) | Evento |
|---|---|
| A trasmette il pacchetto 1 | |
| A trasmette il pacchetto 2, che si perde sul primo collegamento: il suo timer parte | |
| A trasmette il pacchetto 3, che arriva a B ma fuori ordine (B aspetta il 2): viene scartato, senza ACK | |
| arriva l'ACK del pacchetto 1: la finestra scorre e A trasmette il 4 (fino a ) | |
| timeout del pacchetto 2 (timeout minimo ms dall'inizio della sua trasmissione, ): A ritrasmette dal 2 in poi |
Da ms in poi servono ancora i pacchetti da a , cioè pacchetti: finestre complete da più un pacchetto. Quindi
È esattamente il caso senza perdite più un timeout: ms. Il timeout minimo è perché l'ACK del pacchetto non può tornare prima di un ciclo completo dall'inizio della sua trasmissione: aspettare meno farebbe ritrasmettere pacchetti ancora in viaggio.
Quanto conta la finestra? Il grafico mostra senza perdite con (valore dell'esercizio, ms) e con finestre più grandi. Per avere trasmissione continua servirebbe pacchetti, e il tempo scenderebbe a ms: con il collegamento 1 lavora del tempo.
Grafico interattivo: Tempo totale fino all'ultimo byte T(N) in ms del GBN end-to-end senza perdite (K = 200 pacchetti, T1 = 0,5 ms, RTT = 12,75 ms): 848,75 ms con N = 3, 106,25 ms con N ≥ 26
Confronto con la soluzione ufficiale
- (1) Ufficiale: ms. Coincide, con la stessa formula .
- (2) Ufficiale: ms senza perdite, ms con perdita (timeout uguale all'RTT). Coincide, anche confrontando con una simulazione a eventi del GBN end-to-end (stessi tre valori).
Errori comuni
- Dire che il collo di bottiglia è il collegamento 1 perché : con lo stop-and-wait sul 2 conta il throughput di ARQ, non il bitrate.
- Aggiungere il tempo dell'ultimo ACK: il testo chiede fino alla ricezione dell'ultimo byte in B.
- Contare finestre senza notare che l'ultima ne ha solo (o nel caso con perdita): l'ultima finestra non dura un intero.
- Calcolare il senza i due tempi di trasmissione e (qui ms e non ms).
(Verificato con Python: simulazione a eventi: ms; ms; ms.)
Versione ripasso
Dati. pacchetti da kbit; ms, ms, , ms.
- (1) GBN su link 1: pacchetti/ ms; S&W su link 2: pacchetti/ ms collo di bottiglia sul 2 (per l'ARQ), coda in R. ms.
- (2) GBN e2e: ms, : a finestre. finestre complete pacchetti: ms. Con perdita: timeout ms.
Errore tipico: scegliere il collo di bottiglia dal bitrate invece che dal ritmo dell'ARQ; contare una finestra piena in più alla fine.