Salta al contenuto
Note per Studenti Esercizio - TCP e stop-and-wait su tre collegamenti, messaggio da 100 kB

Esercizio - TCP e stop-and-wait su tre collegamenti, messaggio da 100 kB

In questa pagina 6

Testo. Una connessione TCP è stabilita tra il server AA e l'host BB (si trascura ogni altro traffico) attraverso A→R1→R2→BA\to R_1\to R_2\to B con C1=20C_1=20 Mbit/s, τ1=6\tau_1=6 ms; C2=10C_2=10 Mbit/s, τ2=4\tau_2=4 ms; C3=2C_3=2 Mbit/s, τ3=10\tau_3=10 ms. MSS=1250\text{MSS}=1250 byte, segmenti di apertura e ACK di lunghezza trascurabile, come le intestazioni di tutti i livelli; cwnd\text{cwnd} iniziale =1250=1250 B, ssthresh=10\text{ssthresh}=10 kB, rwnd=1\text{rwnd}=1 MB.

  1. Trovare il RTT e il valore della finestra swnd∗\text{swnd}^* che permette un flusso continuo di segmenti tra AA e BB.
  2. Calcolare il tempo totale di trasferimento di un messaggio di M=100M=100 kB (dall'apertura della connessione alla ricezione dell'ultimo ACK), con i dati che partono il prima possibile.
  3. Ripetere il calcolo supponendo che, invece di TCP, sul livello di collegamento di ciascun collegamento si usi l'ARQ stop-and-wait.

Teoria usata: 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 →, 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 →, 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 →, 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 →. Convenzione di calcolo (apertura a 2τ2\tau, round a distanza di un RTT, flusso continuo): vedi Esercizio - TCP, slow start e messaggio da 18 kB su un collegamento da 8 Mbps.

Dati

MSS=1250⋅8=10 000\text{MSS}=1250\cdot8=10\,000 bit. Tempi di trasmissione: T1=10 000/(20⋅106)=0,5T_1=10\,000/(20\cdot10^6)=0{,}5 ms, T2=1T_2=1 ms, T3=5T_3=5 ms. Il collegamento 3 è il collo di bottiglia (22 Mbit/s). ∑τ=6+4+10=20\sum\tau=6+4+10=20 ms. Segmenti: 100 000/1250=80100\,000/1250=80. ssthresh=10 000/1250=8\text{ssthresh}=10\,000/1250=8 segmenti.

(1) RTT e finestra per il flusso continuo

Un segmento attraversa i tre collegamenti (trasmissione e propagazione su ciascuno), l'ACK torna con le sole propagazioni: RTT=T1+T2+T3+2∑τ=0,5+1+5+40=46,5 ms.\text{RTT}=T_1+T_2+T_3+2\sum\tau=0{,}5+1+5+40=\boxed{46{,}5\ \text{ms}}. Il flusso è continuo se, quando torna il primo ACK, la finestra è ancora in trasmissione sul collo di bottiglia: swnd∗⋅T3≥RTT\text{swnd}^*\cdot T_3\ge\text{RTT}: swnd∗≥46,55=9,3 segmenti ⇒ 10 segmenti interi.\text{swnd}^*\ge\frac{46{,}5}{5}=\boxed{9{,}3\ \text{segmenti}}\ \Rightarrow\ 10\ \text{segmenti interi}. (Equivale a dire che la finestra deve contenere il prodotto banda-ritardo del cammino, 2⋅106⋅0,0465=93 0002\cdot10^6\cdot0{,}0465=93\,000 bit =9,3=9{,}3 segmenti.)

(2) TCP: tempo totale

Apertura: 2∑τ=402\sum\tau=40 ms. Finestre: slow start 1,2,4,81,2,4,8 (si ferma a ssthresh=8\text{ssthresh}=8), poi avoidance 9,10,…9,10,\dots

round cwnd\text{cwnd} inizio (ms) segmenti inviati (totale) continuo?
1 1 40 1 no
2 2 86,5 3 no
3 4 133 7 no
4 8 179,5 15 no
5 9 226 24 no (9<9,39<9{,}3)
6 10 272,5 sì (10≥9,310\ge9{,}3)

I primi cinque round portano 1+2+4+8+9=241+2+4+8+9=24 segmenti (1+2+4+8=151+2+4+8=15 è una somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →; poi la crescita lineare +1+1 a round). Dal sesto round la finestra supera 9,39{,}3 e il collegamento 3 non si ferma più: restano 80−24=5680-24=56 segmenti, uno ogni T3=5T_3=5 ms a partire da 272,5272{,}5 ms. L'ultimo inizia dopo 55⋅5=27555\cdot5=275 ms, a 547,5547{,}5 ms, e l'ACK torna un RTT dopo: TTCP=Tsetup+5 RTT+(56−1)T3+RTT=40+232,5+275+46,5=594 ms.T_{TCP}=T_{setup}+5\,\text{RTT}+(56-1)T_3+\text{RTT}=40+232{,}5+275+46{,}5=\boxed{594\ \text{ms}}. Lettura dei termini: 4040 ms l'apertura; 5 RTT5\,\text{RTT} i primi cinque round; 55 T355\,T_3 la distanza tra il primo e l'ultimo dei 5656 segmenti; RTT\text{RTT} l'ultimo ACK.

Grafico interattivo: Finestra di invio (segmenti) nei round dopo l'apertura (40 ms; 1 round = 46,5 ms): dal round 6 la finestra (10) supera 9,3 e il flusso sul collegamento 3 è continuo

(3) Stop-and-wait su ogni collegamento

Qui non c'è finestra TCP: ogni collegamento ha il proprio ARQ stop-and-wait (trasmetto un pacchetto, aspetto il suo ACK, solo allora trasmetto il successivo, 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 →). Ogni collegamento ii può quindi emettere un pacchetto ogni RTTi=Ti+2τi:RTT1=0,5+12=12,5 ms, RTT2=1+8=9 ms, RTT3=5+20=25 ms.\text{RTT}_i=T_i+2\tau_i:\qquad \text{RTT}_1=0{,}5+12=12{,}5\ \text{ms},\ \text{RTT}_2=1+8=9\ \text{ms},\ \text{RTT}_3=5+20=25\ \text{ms}. Il più lento è il collegamento 3: il ritmo del trasferimento è un pacchetto ogni RTT3=25\text{RTT}_3=25 ms, mentre gli altri due collegamenti sono più veloci e i pacchetti si accodano in R2R_2 (buffer supposti sufficienti).

Il primo pacchetto arriva davanti al collegamento 3 a T1+τ1+T2+τ2=11,5T_1+\tau_1+T_2+\tau_2=11{,}5 ms e da lì i pacchetti partono ogni 2525 ms: l'ultimo (K=80K=80) parte a 11,5+79⋅25=1986,511{,}5+79\cdot25=1986{,}5 ms, viene trasmesso in 55 ms, si propaga 1010 ms e arriva a BB a 2001,52001{,}5 ms; l'ACK ripercorre i tre collegamenti in τ3+τ2+τ1=20\tau_3+\tau_2+\tau_1=20 ms. In formula, come per il TCP si arriva fino all'ultimo ACK: TS&W=(K−1) RTT3+RTT=79⋅25+46,5=2021,5 ms.T_{S\&W}=(K-1)\,\text{RTT}_3+\text{RTT}=79\cdot25+46{,}5=\boxed{2021{,}5\ \text{ms}}. Con la finestra TCP lo stesso trasferimento richiede 594594 ms: lo stop-and-wait tiene il collo di bottiglia occupato per soli 55 ms ogni 2525.

(Verificato con Python: simulatore a eventi per il TCP, 594,0594{,}0 ms; simulazione per-collegamento dello stop-and-wait con ACK trascurabili, consegna a BB a 2001,52001{,}5 ms e ultimo ACK in AA a 2021,52021{,}5 ms.)

Confronto con la soluzione ufficiale

Le slide danno swnd∗≥9,3\text{swnd}^*\ge9{,}3 MSS, TTCP=Tsetup+5 RTT+(56−1)T3+RTT=594T_{TCP}=T_{setup}+5\,\text{RTT}+(56-1)T_3+\text{RTT}=594 ms (con "80−(1+2+4+8+9)=5680-(1+2+4+8+9)=56 segmenti inviati in modo continuo") e TS&W=(K−1)RTT3+RTT=2021,5T_{S\&W}=(K-1)\text{RTT}_3+\text{RTT}=2021{,}5 ms: tutto coincide. Osservazione: nello stop-and-wait per collegamento l'ACK finale non arriva davvero fino ad AA (ogni collegamento ha i propri ACK); il risultato ufficiale conta comunque il ritorno dell'ultimo ACK lungo i tre collegamenti (2020 ms) per omogeneità con il caso TCP. Se si volesse il tempo di consegna a BB sarebbe 2001,52001{,}5 ms.

Errori comuni

  • Calcolare swnd∗\text{swnd}^* con il tempo di trasmissione sul collegamento 1 (0,50{,}5 ms) invece che sul collo di bottiglia (55 ms): la soglia sarebbe 9393 segmenti, sbagliata.
  • Dopo la soglia continua, contare ancora un RTT per finestra: i segmenti rimasti escono uno ogni T3T_3.
  • Nello stop-and-wait usare RTT\text{RTT} dell'intero cammino come passo tra i pacchetti: il passo è il ciclo del collegamento più lento, T3+2τ3=25T_3+2\tau_3=25 ms.
  • Fermare la crescita a 1010 segmenti pensando a ssthresh=10\text{ssthresh}=10 kB: 1010 kB sono 88 segmenti.

Versione ripasso

Dati. A→R1→R2→BA\to R_1\to R_2\to B: 2020 Mbit/s /6/6 ms, 1010 Mbit/s /4/4 ms, 22 Mbit/s /10/10 ms; MSS=1250\text{MSS}=1250 B =10 000=10\,000 bit; T1=0,5T_1=0{,}5, T2=1T_2=1, T3=5T_3=5 ms (collo di bottiglia: collegamento 3); ∑τ=20\sum\tau=20 ms; M=100M=100 kB =80=80 segmenti; ssthresh=10\text{ssthresh}=10 kB =8=8 segmenti; convenzione di Esercizio - TCP, slow start e messaggio da 18 kB su un collegamento da 8 Mbps (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 →).

(1) RTT=T1+T2+T3+2∑τ=0,5+1+5+40=46,5\text{RTT}=T_1+T_2+T_3+2\sum\tau=0{,}5+1+5+40=46{,}5 ms. Flusso continuo se swnd∗⋅T3≥RTT\text{swnd}^*\cdot T_3\ge\text{RTT}: swnd∗≥9,3\text{swnd}^*\ge9{,}3, cioè 1010 segmenti (il BDP del cammino).

(2) TCP. Apertura 4040 ms; finestre 1,2,4,81,2,4,8 (slow start), 99 (avoidance), 1010, ognuna un RTT dopo la precedente (inizi 4040; 86,586{,}5; 133133; 179,5179{,}5; 226226; 272,5272{,}5 ms). I primi cinque round portano 2424 segmenti (9<9,39<9{,}3, non continui); dal round 6 (10≥9,310\ge9{,}3) il collegamento 3 è sempre occupato, con i 5656 segmenti rimasti ogni T3=5T_3=5 ms. TTCP=40+5⋅46,5+(56−1)⋅5+46,5=594 ms.T_{TCP}=40+5\cdot46{,}5+(56-1)\cdot5+46{,}5=594\ \text{ms}.

(3) Stop-and-wait su ogni collegamento (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 →). Ciclo di ogni collegamento Ti+2τiT_i+2\tau_i: 12,512{,}5, 99, 2525 ms. Il passo è quello del più lento, RTT3=25\text{RTT}_3=25 ms; i pacchetti si accodano in R2R_2. TS&W=(K−1) RTT3+RTT=79⋅25+46,5=2021,5 ms.T_{S\&W}=(K-1)\,\text{RTT}_3+\text{RTT}=79\cdot25+46{,}5=2021{,}5\ \text{ms}. La consegna a BB avviene a 2001,52001{,}5 ms (l'ultimo ACK conta i 2020 ms di ritorno, come nelle slide, per omogeneità con TCP).

Errori: soglia con T1T_1 invece del collo di bottiglia (9393 segmenti); un RTT per finestra dopo la soglia; passo S&W uguale al RTT totale; 1010 kB letti come 1010 segmenti.

Lezioni in cui compare

Teoria collegata