Salta al contenuto
Note per Studenti Esercizio - TCP, slow start e 120 segmenti su un collegamento da 32 Mbps

Esercizio - TCP, slow start e 120 segmenti su un collegamento da 32 Mbps

In questa pagina 5

Testo. AA deve trasferire con TCP una sequenza di 120120 segmenti di dimensione massima a BB, su un collegamento con C=32C=32 Mbit/s e τ=1,5\tau=1{,}5 ms. MSS=1000\text{MSS}=1000 byte, intestazioni trascurabili, connessione aperta da AA con segmenti di apertura trascurabili, ACK trascurabili, ssthresh=8\text{ssthresh}=8 MSS. Calcolare il tempo totale di trasferimento.

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

Dati

MSS=8000\text{MSS}=8000 bit, T=8000/(32⋅106)=0,25T=8000/(32\cdot10^6)=0{,}25 ms, RTT=T+2τ=0,25+3=3,25\text{RTT}=T+2\tau=0{,}25+3=3{,}25 ms, apertura 2τ=32\tau=3 ms.

Quando il flusso diventa continuo. Una finestra di ww segmenti occupa wTwT di trasmissione; il primo ACK torna dopo RTT\text{RTT}. Il flusso è continuo se w T≥RTTw\,T\ge\text{RTT}, cioè w≥RTTT=3,250,25=13 segmenti.w\ge\frac{\text{RTT}}T=\frac{3{,}25}{0{,}25}=13\ \text{segmenti}. Con 1212 segmenti la finestra dura 33 ms e lascia il collegamento fermo per 0,250{,}25 ms; con 1313 dura 3,253{,}25 ms =RTT=\text{RTT}: da qui non ci sono più pause.

Finestre round per round

ssthresh=8\text{ssthresh}=8: slow start 1,2,4,81,2,4,8 (il raddoppio si ferma al raggiungimento di 88), poi congestion avoidance 9,10,11,12,13,…9,10,11,12,13,\dots

round cwnd\text{cwnd} inizio (ms) segmenti inviati (totale) wTwT (ms) continuo?
1 1 3,00 1 0,25 no
2 2 6,25 3 0,50 no
3 4 9,50 7 1,00 no
4 8 12,75 15 2,00 no
5 9 16,00 24 2,25 no
6 10 19,25 34 2,50 no
7 11 22,50 45 2,75 no
8 12 25,75 57 3,00 no
9 13 29,00 70 3,25 sì

L'inizio del round kk è 3+(k−1)⋅3,253+(k-1)\cdot3{,}25 ms. Nei primi otto round si inviano 1+2+4+8+9+10+11+12=571+2+4+8+9+10+11+12=57 segmenti: 1+2+4+8=151+2+4+8=15 (somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →) e 9+10+11+12=429+10+11+12=42 (somma dei primi numeri naturali1 + 2 + ... + n = n(n+1)/2Sommatorie →: 4⋅(9+12)2=42\frac{4\cdot(9+12)}{2}=42). Restano 120−57=63120-57=63 segmenti, tutti inviati in modo continuo a partire dal round 99 (qui cwnd=13≥13\text{cwnd}=13\ge13 e continuerà a crescere, quindi non ci sono più pause).

Grafico interattivo: Finestra cwnd all'inizio di ogni round (segmenti)

Tempo totale

Il round 99 inizia a 3+8⋅3,25=293+8\cdot3{,}25=29 ms. I 6363 segmenti restanti escono uno ogni T=0,25T=0{,}25 ms: l'ultimo comincia la trasmissione 62T=15,562T=15{,}5 ms dopo, a 44,544{,}5 ms, termina a 44,7544{,}75 ms, arriva a BB dopo altri τ\tau (46,2546{,}25 ms) e il suo ACK torna a 46,25+1,5=47,7546{,}25+1{,}5=47{,}75 ms. In formula: Ttot=2τ+8 RTT+63 T+2τ=3+8⋅3,25+63⋅0,25+3=3+26+15,75+3=47,75 ms.T_{tot}=2\tau+8\,\text{RTT}+63\,T+2\tau=3+8\cdot3{,}25+63\cdot0{,}25+3=3+26+15{,}75+3=\boxed{47{,}75\ \text{ms}}. (L'ultimo termine 2τ2\tau è l'ultimo ACK; 63T63T è la durata di trasmissione dei 6363 segmenti rimasti.)

(Verificato con Python con un simulatore a eventi: 47,7547{,}75 ms.)

Confronto con la soluzione ufficiale

Le slide danno Ttot=2τ+8 RTT+63T+2τ=47,75T_{tot}=2\tau+8\,\text{RTT}+63T+2\tau=47{,}75 ms, con la scomposizione 1+2+4+8+9+10+11+12=571+2+4+8+9+10+11+12=57 e 120−57=63120-57=63 "[Continuous transmission]": coincide, e nel grafico indicano lo stesso punto di inizio del flusso continuo (swnd≥13\text{swnd}\ge13).

Errori comuni

  • Sbagliare la soglia del flusso continuo: si confronta wTwT con il RTT intero (T+2τT+2\tau), non con 2τ2\tau.
  • Continuare la serie con il raddoppio dopo ssthresh\text{ssthresh}.
  • Dimenticare che, entrata nel flusso continuo, la finestra non limita più: il tempo dei 6363 segmenti rimasti è 63T63T (collo di bottiglia), non 6363 RTT.

Versione ripasso

Dati. C=32C=32 Mbit/s, τ=1,5\tau=1{,}5 ms, MSS=1000\text{MSS}=1000 B, ssthresh=8\text{ssthresh}=8 MSS, 120120 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 →).

  • T=8000/(32⋅106)=0,25T=8000/(32\cdot10^6)=0{,}25 ms; RTT=T+2τ=3,25\text{RTT}=T+2\tau=3{,}25 ms; apertura 2τ=32\tau=3 ms.
  • Flusso continuo se wT≥RTTwT\ge\text{RTT}, cioè w≥3,25/0,25=13w\ge3{,}25/0{,}25=13.
  • Finestre: slow start 1,2,4,81,2,4,8, poi avoidance 9,10,11,12,139,10,11,12,13. Il round kk inizia a 3+(k−1)⋅3,253+(k-1)\cdot3{,}25 ms.
round 1 2 3 4 5 6 7 8 9
cwnd\text{cwnd} 1 2 4 8 9 10 11 12 13
inizio (ms) 3 6,25 9,5 12,75 16 19,25 22,5 25,75 29
inviati 1 3 7 15 24 34 45 57 70

Nei primi otto round 5757 segmenti, nessuno continuo (12⋅0,25=3<3,2512\cdot0{,}25=3<3{,}25); dal round 99 (inizio 2929 ms) il flusso è continuo con i 120−57=63120-57=63 segmenti rimasti. Ttot=2τ+8 RTT+63T+2τ=3+26+15,75+3=47,75 msT_{tot}=2\tau+8\,\text{RTT}+63T+2\tau=3+26+15{,}75+3=47{,}75\ \text{ms} (l'ultimo 2τ2\tau è l'ultimo ACK; coincide con le slide).

Errori: soglia confrontata con 2τ2\tau invece del RTT intero; raddoppio oltre ssthresh\text{ssthresh}; 6363 RTT invece di 63T63T.

Lezioni in cui compare

Teoria collegata