Salta al contenuto
Note per Studenti Esercizio - Quattro pacchetti da A verso E e D in una rete store-and-forward

Esercizio - Quattro pacchetti da A verso E e D in una rete store-and-forward

In questa pagina 7

Testo. Nella rete della figura i router fanno commutazione di pacchetto a datagramma con store-and-forward; ogni router ha code indipendenti su ogni interfaccia di uscita. Al tempo t=0t=0 la coda di uscita del server A contiene quattro pacchetti, nell'ordine di trasmissione, diretti a E, E, D, D. Lunghezze: LD=250L_D=250 byte, LE=1250L_E=1250 byte. Le trasmissioni partono a t=0t=0 in tutti i nodi. Calcolare l'istante in cui i quattro pacchetti arrivano a destinazione.

Topologia (A si collega a R1; i terminali B e C non hanno traffico in questo esercizio):

Collegamento Estremi Capacità Propagazione
C1C_1 A – R1 2020 Mbit/s 66 ms
C2C_2 R1 – R2 1010 Mbit/s 44 ms
C5C_5 R2 – R3 12,512{,}5 Mbit/s 22 ms
C7C_7 R3 – E 55 Mbit/s 0,20{,}2 ms
C6C_6 R3 – D 2020 Mbit/s 0,80{,}8 ms

(C3C_3 verso B e C4C_4 verso C partono da R2 ma nessun pacchetto li usa.) Il cammino verso E è C1→C2→C5→C7C_1\to C_2\to C_5\to C_7, quello verso D è C1→C2→C5→C6C_1\to C_2\to C_5\to C_6.

Teoria usata: Commutazione di circuito e di pacchettoUn nodo di commutazione (switch) può collegare ingresso e uscita in tre modi. Commutazione di circuito: si stabilisce prima un collegamento fisico dedicato (rete telefonica), tempo di consegna $T=3Nt_p+Nt_s+M/R$. Commutazione di pacchetto a datagramma: il messaggio è diviso in $K$ pacchetti con intestazione, ognuno è instradato indipendentemente con store-and-forward, $T=Nt_p+(N+K-1)\frac{M/K+H}{R}$, con $K_{ott}=\sqrt{(N-1)M/H}$. A circuito virtuale: tre fasi (setup, dati, chiusura), connessione logica dedicata ma senza risorse dedicate, identificatore locale che cambia a ogni salto.Commutazione di circuito e di pacchetto →, 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 →.

Modello e regola di calcolo

Un pacchetto ii che attraversa un collegamento con capacità CC e propagazione τ\tau si comporta così:

  1. è pronto nel nodo di partenza quando è stato ricevuto per intero (store-and-forward: il router non inizia a inoltrare finché non ha tutti i bit);
  2. se il collegamento è occupato aspetta in coda (FIFO, in ordine di arrivo al nodo): la trasmissione inizia a tinizio=max⁡(tpronto, tlibero)t_{inizio}=\max(t_{pronto},\,t_{libero});
  3. dura T=L/CT=L/C: finisce a tfine=tinizio+Tt_{fine}=t_{inizio}+T e il collegamento torna libero;
  4. il pacchetto è pronto al nodo successivo a tfine+τt_{fine}+\tau.

Il tempo di trasmissione T=L/CT=L/C va calcolato con LL in bit: LE=1250⋅8=10000L_E=1250\cdot8=10000 bit, LD=250⋅8=2000L_D=250\cdot8=2000 bit. Per esempio il pacchetto E su C5C_5: 10 000/(12,5⋅106)=0,8⋅10−310\,000/(12{,}5\cdot10^{6})=0{,}8\cdot10^{-3} s =0,8=0{,}8 ms; il pacchetto D su C6C_6: 2000/(20⋅106)=0,12000/(20\cdot10^{6})=0{,}1 ms.

C1C_1 (20 Mbit/s) C2C_2 (10 Mbit/s) C5C_5 (12,5 Mbit/s) C7C_7 (5 Mbit/s) C6C_6 (20 Mbit/s)
pacchetto E (1000010000 bit) 0,50{,}5 ms 11 ms 0,80{,}8 ms 22 ms –
pacchetto D (20002000 bit) 0,10{,}1 ms 0,20{,}2 ms 0,160{,}16 ms – 0,10{,}1 ms

Passo 1: il collegamento C1C_1 (A → R1)

A trasmette i quattro pacchetti uno dopo l'altro, senza pause:

Pacchetto inizio fine pronto in R1 (+6+6 ms)
E1 00 0,50{,}5 6,56{,}5
E2 0,50{,}5 1,01{,}0 7,07{,}0
D1 1,01{,}0 1,11{,}1 7,17{,}1
D2 1,11{,}1 1,21{,}2 7,27{,}2

(tempi in ms). I pacchetti arrivano a R1 distanziati di 0,50{,}5 ms, 0,10{,}1 ms, 0,10{,}1 ms.

Passo 2: il collegamento C2C_2 (R1 → R2), più lento di C1C_1

C2C_2 ha capacità metà di C1C_1, quindi i pacchetti si accodano in R1:

Pacchetto pronto inizio =max⁡(pronto,libero)=\max(\text{pronto},\text{libero}) fine pronto in R2 (+4+4 ms)
E1 6,56{,}5 6,56{,}5 7,57{,}5 11,511{,}5
E2 7,07{,}0 7,57{,}5 (aspetta 0,50{,}5) 8,58{,}5 12,512{,}5
D1 7,17{,}1 8,58{,}5 (aspetta 1,41{,}4) 8,78{,}7 12,712{,}7
D2 7,27{,}2 8,78{,}7 (aspetta 1,51{,}5) 8,98{,}9 12,912{,}9

Passo 3: il collegamento C5C_5 (R2 → R3)

C5C_5 (12,512{,}5 Mbit/s) è più veloce di C2C_2 (1010 Mbit/s), ma i pacchetti arrivano a R2 già in fila, e dopo E1 serve ancora 0,80{,}8 ms:

Pacchetto pronto inizio fine pronto in R3 (+2+2 ms)
E1 11,511{,}5 11,511{,}5 12,312{,}3 14,314{,}3
E2 12,512{,}5 12,512{,}5 (libero da 12,312{,}3) 13,313{,}3 15,315{,}3
D1 12,712{,}7 13,313{,}3 13,4613{,}46 15,4615{,}46
D2 12,912{,}9 13,4613{,}46 13,6213{,}62 15,6215{,}62

Qui D1 aspetta E2 (0,60{,}6 ms) e D2 aspetta D1 (0,560{,}56 ms).

Passo 4: l'ultimo salto, due uscite diverse in R3

R3 ha due code di uscita indipendenti: C7C_7 verso E e C6C_6 verso D. I pacchetti per D non aspettano quelli per E.

  • Verso E (C7C_7, 22 ms per pacchetto): E1 inizia a 14,314{,}3 e finisce a 16,316{,}3; arriva a E a 16,3+0,2=16,516{,}3+0{,}2=\mathbf{16{,}5} ms. E2 era pronto a 15,315{,}3 ma C7C_7 è occupato fino a 16,316{,}3: inizia a 16,316{,}3, finisce a 18,318{,}3 e arriva a 18,3+0,2=18,518{,}3+0{,}2=\mathbf{18{,}5} ms.
  • Verso D (C6C_6, 0,10{,}1 ms): D1 inizia a 15,4615{,}46, finisce a 15,5615{,}56, arriva a 15,56+0,8=16,3615{,}56+0{,}8=\mathbf{16{,}36} ms; D2 inizia a 15,6215{,}62, finisce a 15,7215{,}72, arriva a 16,52\mathbf{16{,}52} ms.
Pacchetto E1 E2 D1 D2
arrivo a destinazione (ms) 16,516{,}5 18,518{,}5 16,3616{,}36 16,5216{,}52

Grafico interattivo: Occupazione dei collegamenti (ms): i pacchetti E1, E2 (colore 1) e D1, D2 (colore 2); in R1 si accodano su C2 perché è più lento di C1, in R3 hanno due code separate: E1 ed E2 occupano C7 (5 Mbit/s) uno dopo l'altro, D1 e D2 passano su C6 senza attendere

Si nota che D1 e D2, partiti per ultimi, arrivano prima di E1: sono corti e il loro ultimo collegamento è veloce. E2 invece ricomincia a ritardare perché C7C_7 (55 Mbit/s) è il collo di bottiglia.

Confronto con la soluzione ufficiale

La soluzione ufficiale dà E1 =16,5=16{,}5 ms, E2 =18,5=18{,}5 ms, D1 =16,36=16{,}36 ms e per l'ultimo pacchetto 16,5216{,}52 ms. Coincide. Nell'ultima riga la soluzione scrive "second packet towards E", ma 16,5216{,}52 ms è il secondo pacchetto verso D (E2 arriva a 18,518{,}5 ms): è un refuso del testo ufficiale.

Errori comuni

  • Usare i byte al posto dei bit in L/CL/C: 12501250 byte a 1010 Mbit/s sono 11 ms, non 0,1250{,}125 ms.
  • Far partire il pacchetto successivo prima che il precedente sia stato ricevuto per intero dal router (si dimentica lo store-and-forward).
  • Dimenticare la coda: il tempo di inizio è max⁡(tpronto,tlibero)\max(t_{pronto},t_{libero}), non semplicemente tprontot_{pronto}.
  • Mettere in coda insieme i pacchetti per E e per D in R3: le code sono per interfaccia di uscita.

(Verificato con Python: simulatore a eventi FIFO per interfaccia; E1 16,516{,}5, E2 18,518{,}5, D1 16,3616{,}36, D2 16,5216{,}52 ms.)

Versione ripasso

Dati. Al tempo 00 la coda di A contiene quattro pacchetti, nell'ordine E, E, D, D, con LE=1250L_E=1250 B =10 000=10\,000 bit e LD=250L_D=250 B =2000=2000 bit. Cammino verso E: C1C_1 (2020 Mbit/s, 66 ms), C2C_2 (1010 Mbit/s, 44 ms), C5C_5 (12,512{,}5 Mbit/s, 22 ms), C7C_7 (55 Mbit/s, 0,20{,}2 ms). Verso D: C1C_1, C2C_2, C5C_5, C6C_6 (2020 Mbit/s, 0,80{,}8 ms) (Commutazione di circuito e di pacchettoUn nodo di commutazione (switch) può collegare ingresso e uscita in tre modi. Commutazione di circuito: si stabilisce prima un collegamento fisico dedicato (rete telefonica), tempo di consegna $T=3Nt_p+Nt_s+M/R$. Commutazione di pacchetto a datagramma: il messaggio è diviso in $K$ pacchetti con intestazione, ognuno è instradato indipendentemente con store-and-forward, $T=Nt_p+(N+K-1)\frac{M/K+H}{R}$, con $K_{ott}=\sqrt{(N-1)M/H}$. A circuito virtuale: tre fasi (setup, dati, chiusura), connessione logica dedicata ma senza risorse dedicate, identificatore locale che cambia a ogni salto.Commutazione di circuito e di pacchetto →, 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 →).

Regola. Un pacchetto è pronto al nodo di partenza quando è ricevuto per intero (store-and-forward). La trasmissione inizia a tinizio=max⁡(tpronto,tlibero)t_{inizio}=\max(t_{pronto},t_{libero}), dura L/CL/C, e il pacchetto è pronto al nodo successivo dopo tfine+τt_{fine}+\tau. Le code sono FIFO per interfaccia di uscita.

Passo 1, C1C_1. I pacchetti escono da A a 0,50{,}5, 1,01{,}0, 1,11{,}1 e 1,21{,}2 ms e sono pronti in R1 a 6,56{,}5, 7,07{,}0, 7,17{,}1 e 7,27{,}2 ms.

Passo 2, C2C_2 (più lento di C1C_1). Si accodano in R1: E1 da 6,56{,}5 a 7,57{,}5; E2 attende fino a 7,57{,}5 e finisce a 8,58{,}5; D1 attende fino a 8,58{,}5 e finisce a 8,78{,}7; D2 attende fino a 8,78{,}7 e finisce a 8,98{,}9. Pronti in R2: 11,511{,}5, 12,512{,}5, 12,712{,}7, 12,912{,}9 ms.

Passo 3, C5C_5. E1 da 11,511{,}5 a 12,312{,}3, pronto in R3 a 14,314{,}3; E2 da 12,512{,}5 a 13,313{,}3, pronto a 15,315{,}3; D1 attende fino a 13,313{,}3, finisce a 13,4613{,}46, pronto a 15,4615{,}46; D2 da 13,4613{,}46 a 13,6213{,}62, pronto a 15,6215{,}62.

Passo 4, ultimo salto. R3 ha due code separate.

  • Verso E, C7C_7 (22 ms per pacchetto): E1 da 14,314{,}3 a 16,316{,}3, arrivo a 16,5\mathbf{16{,}5} ms; E2 attende fino a 16,316{,}3, finisce a 18,318{,}3, arrivo a 18,5\mathbf{18{,}5} ms.
  • Verso D, C6C_6 (0,10{,}1 ms): D1 da 15,4615{,}46 a 15,5615{,}56, arrivo a 16,36\mathbf{16{,}36} ms; D2 da 15,6215{,}62 a 15,7215{,}72, arrivo a 16,52\mathbf{16{,}52} ms.

Risultati ufficiali. E1 16,516{,}5, E2 18,518{,}5, D1 16,3616{,}36 e D2 16,5216{,}52 ms: coincidono. La soluzione scrive "second packet towards E" per l'ultima riga, ma 16,5216{,}52 ms è il secondo pacchetto verso D: refuso.

Errori tipici.

  • Usare i byte al posto dei bit in L/CL/C: 12501250 B a 1010 Mbit/s sono 11 ms, non 0,1250{,}125 ms.
  • Far partire il pacchetto successivo prima che il precedente sia stato ricevuto per intero dal router.
  • Usare tprontot_{pronto} come istante di partenza, dimenticando la coda: l'inizio è max⁡(tpronto,tlibero)\max(t_{pronto},t_{libero}).
  • Mettere in una sola coda i pacchetti per E e per D in R3: le code sono per interfaccia di uscita.

Esercizi su questo argomento

Teoria collegata