Salta al contenuto
Note per Studenti Esercizio - Cinque pacchetti da A e B e TCP da 18,75 KB su collegamenti da 100 a 1000 kbps

Esercizio - Cinque pacchetti da A e B e TCP da 18,75 KB su collegamenti da 100 a 1000 kbps

Esame
In questa pagina 6

Testo (tema d'esame, sessione di giugno, esercizio 1). Rete a commutazione di pacchetto a datagramma (store-and-forward), code indipendenti per ogni interfaccia di uscita.

Collegamento Estremi Capacità Propagazione
C1C_1 A – R1 200200 kbit/s 88 ms
C2C_2 B – R1 400400 kbit/s 1515 ms
C3C_3 R1 – R2 250250 kbit/s 1010 ms
C4C_4 R2 – C 11 Mbit/s 5050 ms
C5C_5 R2 – D 100100 kbit/s 1010 ms
C6C_6 R2 – R3 100100 kbit/s 55 ms
C7C_7 R3 – E 200200 kbit/s 11 ms
C8C_8 R3 – F 200200 kbit/s 11 ms
  1. A t=0t=0 la coda del server A ha tre pacchetti diretti a C, C, E (E per ultimo); quella del server B ha due pacchetti diretti a D e F (F per ultimo). Pacchetti da L=250L=250 B, trasmissioni che partono a t=0t=0 in tutti i nodi. Calcolare l'arrivo dei soli tre pacchetti di A.
  2. Tra A e D c'è una connessione TCP (MSS=125\text{MSS}=125 B, apertura e ACK trascurabili, intestazioni trascurabili, cwnd=125\text{cwnd}=125 B, ssthresh=500\text{ssthresh}=500 B, rwnd=1000\text{rwnd}=1000 B). Calcolare RTT e BDP.
  3. Tempo totale per trasferire M=18,75M=18{,}75 kB (dall'apertura all'ultimo ACK).
  4. Lo stesso con rwnd=1\text{rwnd}=1 MB, se tutti i pacchetti in volo della quinta finestra sono persi e il timeout è 33 RTT.

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 →, TCP - connessione, affidabilità e controllo di flussoTCP (Transmission Control Protocol) è il protocollo di trasporto con connessione e affidabile: trasforma il servizio senza connessione e inaffidabile di IP in un flusso di byte ordinato, senza errori né duplicati. La connessione si apre con l'handshake a tre vie (SYN, SYN+ACK, ACK) e si chiude con tre o quattro segmenti (FIN). I byte sono numerati: il numero di sequenza è quello del primo byte del segmento, il numero di ACK (cumulativo) è il prossimo byte atteso. Il mittente può inviare $\min(\text{rwnd},\text{cwnd})$ byte non ancora confermati; rwnd (finestra del ricevitore, in un campo di 16 bit) è il controllo di flusso. L'errore si gestisce con checksum, ACK, timeout di ritrasmissione (RTO) e ritrasmissione rapida dopo tre ACK duplicati. Per usare tutto il canale la finestra deve valere almeno il prodotto banda-ritardo (BDP); il throughput massimo è $\text{MSS}\cdot W_{\max}/\text{RTT}$.TCP - connessione, affidabilità e controllo di flusso →, TCP - controllo di congestioneLa congestione nasce quando collegamenti veloci alimentano un collegamento lento: le code dei router si riempiono, i pacchetti si perdono o ritardano e, nel caso peggiore, la rete collassa (quasi solo ritrasmissioni). TCP controlla la propria finestra di congestione cwnd con il feedback delle perdite (timeout o tre ACK duplicati): slow start (cwnd raddoppia a ogni RTT) fino alla soglia ssthresh, poi congestion avoidance (+1 MSS per RTT); a ogni perdita ssthresh = W/2. Le varianti si distinguono per come reagiscono ai tre dupACK: Tahoe riparte da cwnd = 1 dopo la ritrasmissione rapida; Reno usa il fast recovery (ssthresh = cwnd/2, cwnd = ssthresh + 3, +1 per ogni altro dupACK); NewReno gestisce gli ACK parziali e recupera più perdite nella stessa finestra; SACK riscontra i blocchi ricevuti e ritrasmette solo quello che manca.TCP - controllo di congestione →.

Domanda 1: i pacchetti di A (con il traffico di B)

L=250L=250 B =2000=2000 bit; tempi di trasmissione:

Collegamento C1C_1 C2C_2 C3C_3 C4C_4 C5C_5 C6C_6 C7C_7 C8C_8
T=L/CT=L/C (ms) 1010 55 88 22 2020 2020 1010 1010

Percorsi: A→C: C1,C3,C4C_1,C_3,C_4; A→E: C1,C3,C6,C7C_1,C_3,C_6,C_7; B→D: C2,C3,C5C_2,C_3,C_5; B→F: C2,C3,C6,C8C_2,C_3,C_6,C_8. I due flussi si incontrano su C3C_3 (R1→R2) e, per i pacchetti verso E e F, su C6C_6 (R2→R3).

Uscita dagli host e arrivo in R1.

Pacchetto fine su C1C_1/C2C_2 arrivo in R1
A1A_1 (C) 1010 1818
A2A_2 (C) 2020 2828
A3A_3 (E) 3030 3838
B1B_1 (D) 55 2020
B2B_2 (F) 1010 2525

Coda su C3C_3 (T=8T=8 ms). Si servono per ordine di arrivo in R1: A1A_1 (1818), B1B_1 (2020), B2B_2 (2525), A2A_2 (2828), A3A_3 (3838).

Ordine Pacchetto pronto inizio fine in R2 (+10+10)
1 A1A_1 1818 1818 2626 3636
2 B1B_1 2020 2626 3434 4444
3 B2B_2 2525 3434 4242 5252
4 A2A_2 2828 4242 5050 6060
5 A3A_3 3838 5050 5858 6868

In R2.

  • A1A_1 (verso C) su C4C_4 (T=2T=2): 36→3836\to38, arriva a C a 38+50=8838+50=\mathbf{88} ms.
  • A2A_2 (verso C): 60→6260\to62, arriva a 62+50=11262+50=\mathbf{112} ms.
  • A3A_3 (verso E) e B2B_2 (verso F) usano C6C_6 (T=20T=20): B2B_2 arriva in R2 a 5252 e parte subito (52→7252\to72); A3A_3 arriva a 6868 ma C6C_6 è occupato fino a 7272: parte a 7272, finisce a 9292, arriva in R3 a 92+5=9792+5=97.
  • In R3, A3A_3 su C7C_7 (T=10T=10): 97→10797\to107, arriva a E a 107+1=108107+1=\mathbf{108} ms.
Pacchetto A1A_1 (C) A2A_2 (C) A3A_3 (E)
arrivo (ms) 8888 112112 108108

(Il pacchetto A3A_3 arriva prima del secondo per C perché passa per un tratto diverso.)

Domanda 2: RTT e BDP

Cammino A→D: C1,C3,C5C_1,C_3,C_5. Il collo di bottiglia è C5C_5 (100100 kbit/s). Un segmento da 125125 B =1000=1000 bit:

Collegamento C1C_1 C3C_3 C5C_5
T=L/CT=L/C 55 ms 44 ms 1010 ms
τ\tau 88 ms 1010 ms 1010 ms
  • Andata: 5+8+4+10+10+10=475+8+4+10+10+10=47 ms.
  • Ritorno dell'ACK (trascurabile): τ5+τ3+τ1=10+10+8=28\tau_5+\tau_3+\tau_1=10+10+8=28 ms.

RTT=47+28=75 ms,BDP=100 kbit/s⋅75 ms=7,5 kbit=7,5 MSS.\text{RTT}=47+28=\mathbf{75\ \text{ms}},\qquad\text{BDP}=100\ \text{kbit/s}\cdot75\ \text{ms}=\mathbf{7{,}5\ \text{kbit}}=7{,}5\ \text{MSS}.

Quindi swnd∗=8\text{swnd}^*=8 MSS e il tempo di trasmissione del collo di bottiglia è Tb=10T_b=10 ms.

Passaggi e unità: kbit/s ×\times ms == bit (10310^3 bit/s ⋅10−3\cdot10^{-3} s), quindi BDP=100⋅75=7500\text{BDP}=100\cdot75=7500 bit =7,5=7{,}5 segmenti da 10001000 bit. Il flusso è continuo se swnd⋅Tb≥RTT\text{swnd}\cdot T_b\ge\text{RTT}, cioè swnd≥75/10=7,5\text{swnd}\ge75/10=7{,}5: si arrotonda per eccesso a 88, perché con 77 segmenti la finestra occupa il collegamento 7070 ms su 7575 e lo lascia fermo 55 ms a ogni giro.

Domanda 3: 18,7518{,}75 kB con rwnd=1000\text{rwnd}=1000 B

K=18 750/125=150K=18\,750/125=150 segmenti; ssthresh=500/125=4\text{ssthresh}=500/125=4 MSS; rwnd=1000/125=8\text{rwnd}=1000/125=8 MSS.

Apertura. SYN e SYN+ACK solo propagazione: τ1+τ3+τ5=28\tau_1+\tau_3+\tau_5=28 ms ciascuno, quindi i dati partono a 5656 ms (con l'ACK finale).

Finestre. Slow start: 1,2,41,2,4 (si raggiunge ssthresh=4\text{ssthresh}=4); congestion avoidance: 5,6,7,85,6,7,8 (la finestra si ferma a 88 per il limite di rwnd\text{rwnd}).

RTT 1 2 3 4 5 6 7
finestra 11 22 44 55 66 77 88

Nelle prime sei finestre si inviano 1+2+4+5+6+7=251+2+4+5+6+7=25 segmenti (le prime tre sono una somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →: 1+2+4=23−1=71+2+4=2^3-1=7). Dalla settima swnd=8≥swnd∗=8\text{swnd}=8\ge\text{swnd}^*=8: flusso continuo per i 150−25=125150-25=125 segmenti restanti.

TTCP=56+6 RTT+(125−1) Tb+RTT=56+450+1240+75=1821 ms=1,821 s.T_{\text{TCP}}=56+6\,\text{RTT}+(125-1)\,T_b+\text{RTT}=56+450+1240+75=\mathbf{1821\ \text{ms}}=1{,}821\ \text{s}.

Lettura dei termini: 5656 ms è l'handshake (2828 ms per il SYN e 2828 per il SYN+ACK, solo propagazione); 6 RTT6\,\text{RTT} sono le prime sei finestre, ciascuna lunga un RTT perché swnd⋅Tb<RTT\text{swnd}\cdot T_b<\text{RTT} (ad esempio 7⋅10=70<757\cdot10=70<75 ms) e il mittente aspetta l'ACK del primo segmento; i 125125 segmenti rimanenti partono in flusso continuo uno ogni TbT_b, il primo all'inizio della settima finestra e l'ultimo 124 Tb124\,T_b dopo; l'ultimo RTT\text{RTT} è il ritorno dell'ACK dell'ultimo segmento (la sua trasmissione è già compresa nell'RTT).

Domanda 4: quinta finestra persa, rwnd=1\text{rwnd}=1 MB

Con rwnd\text{rwnd} grande la finestra non è mai limitata dal ricevitore: 1,2,41,2,4 (slow start), poi 5,6,7,…5,6,7,\dots in congestion avoidance.

  • Le prime quattro finestre (1,2,4,51,2,4,5) portano 1212 segmenti a destinazione.
  • La quinta finestra (66 segmenti) parte a 56+4 RTT=35656+4\,\text{RTT}=356 ms ed è persa per intero.
  • Dopo RTO=3 RTT=225\text{RTO}=3\,\text{RTT}=225 ms (misurati dall'inizio dell'invio della finestra persa) scatta il timeout: ssthresh=cwnd/2=6/2=3\text{ssthresh}=\text{cwnd}/2=6/2=3 MSS, cwnd=1\text{cwnd}=1.

Dopo il timeout: finestre 1,2,31,2,3 (si raggiunge ssthresh), poi 4,5,6,74,5,6,7 (congestion avoidance), con 1+2+3+4+5+6+7=281+2+3+4+5+6+7=28 segmenti in 77 finestre. I segmenti ancora da inviare erano 150−12=138150-12=138, ne restano 138−28=110138-28=110. Dall'ottava finestra swnd=8≥swnd∗\text{swnd}=8\ge\text{swnd}^*: flusso continuo.

TTCP=56+4 RTT+RTO+7 RTT+(110−1) Tb+RTT=56+300+225+525+1090+75=2271 ms.T_{\text{TCP}}=56+4\,\text{RTT}+\text{RTO}+7\,\text{RTT}+(110-1)\,T_b+\text{RTT}=56+300+225+525+1090+75=\mathbf{2271\ \text{ms}}.

Lettura dei termini: 5656 ms handshake; 4 RTT4\,\text{RTT} le prime quattro finestre (1,2,4,51,2,4,5) che vanno a buon fine; RTO=225\text{RTO}=225 ms l'attesa del timeout, contata dall'invio della quinta finestra persa; 7 RTT7\,\text{RTT} le sette finestre 1,…,71,\dots,7 dopo il timeout (somma 1+⋯+7=281+\dots+7=28, con la formula di Gauss 7⋅82\frac{7\cdot8}2, SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →); (110−1) Tb(110-1)\,T_b la parte in flusso continuo; RTT\text{RTT} finale per l'ultimo ACK.

Grafico interattivo: Finestra di invio (segmenti) nei round (1 round = 1 RTT = 75 ms dall'apertura a 56 ms): domanda 3 (rwnd = 8) e domanda 4 (quinta finestra persa, timeout dopo 3 RTT)

Il grafico mostra le due finestre di invio nei round (linea continua: domanda 3; tratteggiata: domanda 4): la finestra persa (6 segmenti) resta in attesa fino al timeout, poi si riparte da 11 con ssthresh=3\text{ssthresh}=3, e la linea orizzontale è swnd∗=8\text{swnd}^*=8, la soglia del flusso continuo.

Confronto con la soluzione ufficiale

Domanda Mio Ufficiale
1 C: 8888, C: 112112, E: 108108 ms uguale
2 RTT=75\text{RTT}=75 ms, BDP =7,5=7{,}5 kbit uguale
3 1,8211{,}821 s 1,8211{,}821 s
4 2,2712{,}271 s 2,2712{,}271 s

Tutto coincide.

Errori comuni

  • Mettere in coda A3A_3 dietro B2B_2 su C3C_3 in ordine di partenza dagli host: l'ordine di servizio è per arrivo in R1 (B2B_2 arriva a 2525, A2A_2 a 2828).
  • Dimenticare che B2B_2 occupa C6C_6 fino a 7272 ms e ritarda A3A_3 di 44 ms.
  • Alla domanda 3 non fermare la finestra a 88 MSS: con rwnd=1000\text{rwnd}=1000 B non si va oltre.
  • Alla domanda 4 prendere ssthresh=4/2\text{ssthresh}=4/2: la finestra al momento della perdita è 66, quindi ssthresh=3\text{ssthresh}=3.
  • Contare ancora la quinta finestra tra i segmenti consegnati.

(Verificato con Python: simulatore a eventi per la domanda 1 e simulatore TCP a finestra intera per le domande 3-4; 18211821 e 22712271 ms.)

Versione ripasso

Dati. L=2000L=2000 bit; TT: C1 10C_1\,10, C3 8C_3\,8, C4 2C_4\,2, C6 20C_6\,20, C7 10C_7\,10 ms. TCP A→D: MSS=1000\text{MSS}=1000 bit, K=150K=150, Tb=10T_b=10 ms (C5C_5). (TCP - controllo di congestioneLa congestione nasce quando collegamenti veloci alimentano un collegamento lento: le code dei router si riempiono, i pacchetti si perdono o ritardano e, nel caso peggiore, la rete collassa (quasi solo ritrasmissioni). TCP controlla la propria finestra di congestione cwnd con il feedback delle perdite (timeout o tre ACK duplicati): slow start (cwnd raddoppia a ogni RTT) fino alla soglia ssthresh, poi congestion avoidance (+1 MSS per RTT); a ogni perdita ssthresh = W/2. Le varianti si distinguono per come reagiscono ai tre dupACK: Tahoe riparte da cwnd = 1 dopo la ritrasmissione rapida; Reno usa il fast recovery (ssthresh = cwnd/2, cwnd = ssthresh + 3, +1 per ogni altro dupACK); NewReno gestisce gli ACK parziali e recupera più perdite nella stessa finestra; SACK riscontra i blocchi ricevuti e ritrasmette solo quello che manca.TCP - controllo di congestione →)

  • Domanda 1. Ordine su C3C_3: A1A_1 (1818), B1B_1 (2020), B2B_2 (2525), A2A_2 (2828), A3A_3 (3838). C: 8888 e 112112; E: 108108 ms (A3A_3 aspetta B2B_2 su C6C_6 fino a 7272).
  • RTT =47+28=75=47+28=75 ms; BDP=100 kbit/s⋅75 ms=7,5\text{BDP}=100\ \text{kbit/s}\cdot75\ \text{ms}=7{,}5 MSS ⇒swnd∗=8\Rightarrow\text{swnd}^*=8.
  • rwnd=8\text{rwnd}=8, ssthresh=4\text{ssthresh}=4: finestre 1,2,4,5,6,71,2,4,5,6,7 (2525 seg.), poi continuo: 56+6 RTT+124 Tb+RTT=182156+6\,\text{RTT}+124\,T_b+\text{RTT}=1821 ms.
  • 5ª finestra persa (rwnd=1\text{rwnd}=1 MB): 1212 consegnati; ssthresh=3\text{ssthresh}=3; finestre 1,…,71,\dots,7 (2828): 56+4 RTT+RTO+7 RTT+109 Tb+RTT=227156+4\,\text{RTT}+\text{RTO}+7\,\text{RTT}+109\,T_b+\text{RTT}=2271 ms.
  • Errore tipico: ssthresh\text{ssthresh} da finestra sbagliata; limite di rwnd ignorato.

Lezioni in cui compare

Teoria collegata