Esercizio - TCP, slow start e messaggio da 18 kB su un collegamento da 8 Mbps
Testo. deve trasferire a con TCP un messaggio applicativo di kbyte. Un solo collegamento con Mbit/s e ms. byte, intestazioni trascurabili, connessione aperta da con segmenti di apertura di lunghezza trascurabile, ACK trascurabili, 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 →.
Come si calcola il tempo: la convenzione del corso
Tutti gli esercizi di trasferimento TCP del corso si risolvono con lo stesso schema, che conviene capire una volta bene.
- Tempo di trasmissione di un segmento: . Ritardo di andata e ritorno con ACK trascurabili: (il segmento viene trasmesso e propagato, l'ACK torna solo con la propagazione; per più collegamenti si sommano trasmissioni e propagazioni).
- Apertura (three-way handshake): manda SYN (arriva dopo ), risponde SYN+ACK (arriva dopo altri ), manda l'ACK e nello stesso segmento può portare i primi dati. I dati partono quindi a (apertura , perché i segmenti di apertura hanno lunghezza trascurabile).
- Finestra a round (rounds). Si parte con MSS. Il mittente trasmette una finestra di segmenti uno dietro l'altro (impiegando ). L'ACK del primo segmento torna dopo un RTT dall'inizio della sua trasmissione e, siccome ogni ACK libera un posto in finestra, fa partire i segmenti successivi: la finestra seguente inizia quindi un RTT dopo l'inizio della precedente, purché (la finestra è finita prima che torni il primo ACK).
- Crescita della finestra: in slow start raddoppia a ogni round () finché raggiunge ; poi, in congestion avoidance, cresce di MSS a round. Se vale il vincolo , .
- Flusso continuo: se il primo ACK torna mentre il mittente sta ancora trasmettendo: da lì in poi il collegamento più lento non si ferma più e i segmenti rimasti si trasmettono uno ogni (del collo di bottiglia).
- Fine: il tempo totale termina quando torna l'ACK dell'ultimo segmento, cioè un RTT dopo l'inizio della sua trasmissione.
Il tempo totale di un trasferimento senza perdite e senza flusso continuo è perciò dove è il numero di round e la dimensione dell'ultima finestra.
Svolgimento
Dati in unità coerenti. bit. ms. ms. Segmenti: . Apertura: ms.
Finestre. MSS.
| round | (segmenti) | fase | inizio (ms) | segmenti inviati (totale) |
|---|---|---|---|---|
| 1 | 1 | slow start | 20 | 1 |
| 2 | 2 | slow start | 41 | 3 |
| 3 | 4 | slow start, raggiunge | 62 | 7 |
| 4 | 5 | congestion avoidance | 83 | 12 |
| 5 | 6 | congestion avoidance | 104 | 18 |
Perché : due ACK arrivano nel secondo round e portano da a ; da lì si va in congestion avoidance, per round. Si sommano : il messaggio finisce esattamente nel quinto round (le prime tre finestre sono una somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →: , poi ).
{"tipo":"geometria","uguale":false,"x":[0,5],"y":[0,8],"titolo":"Finestra di invio (segmenti) nei 5 round (1 round = 21 ms): slow start fino a ssthresh = 4, poi +1 per round; 1+2+4+5+6 = 18 segmenti","assi":{"x":"round (RTT)","y":"finestra (MSS)"},"elementi":[{"segmento":[[0,1],[1,1]],"colore":1,"etichetta":"cwnd"},{"segmento":[[1,1],[1,2]],"colore":1},{"segmento":[[1,2],[2,2]],"colore":1},{"segmento":[[2,2],[2,4]],"colore":1},{"segmento":[[2,4],[3,4]],"colore":1},{"segmento":[[3,4],[3,5]],"colore":1},{"segmento":[[3,5],[4,5]],"colore":1},{"segmento":[[4,5],[4,6]],"colore":1},{"segmento":[[4,6],[5,6]],"colore":1},{"segmento":[[0,4],[5,4]],"colore":3,"tratteggio":true,"etichetta":"ssthresh = 4"}]}
``` Nessun round è continuo: ms ms.
**Ultimo round.** Inizia a ms; i segmenti escono in ms (l'ultimo termina la trasmissione a ms, arriva a a ms); l'ACK dell'ultimo torna a ms.
(Verificato con Python con un simulatore a eventi: ms.)
## Confronto con la soluzione ufficiale
La slide riporta la formula con la scomposizione e il risultato ms: coincide (nella formula ms e i RTT comprendono quello dell'ultimo ACK: ).
## Errori comuni
- Continuare lo slow start oltre (cioè ): a si passa a crescita lineare.
- Contare l'apertura come o come un RTT intero: i dati partono col terzo segmento, a .
- Dimenticare il termine della serializzazione dell'ultima finestra.
- Dimenticare che il tempo si ferma con l'ACK dell'ultimo segmento, non con la sua consegna.
Versione ripasso
Dati. Mbit/s, ms, B, intestazioni e ACK trascurabili, MSS, kB segmenti (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 →).
Convenzione. ; ; apertura (handshake) , i primi dati partono col terzo segmento; la finestra successiva inizia un RTT dopo l'inizio della precedente se ; slow start fino a , poi per round; si finisce con l'ACK dell'ultimo segmento.
ms, ms.
| round | inizio (ms) | totale inviati | |
|---|---|---|---|
| 1 | 1 | 20 | 1 |
| 2 | 2 | 41 | 3 |
| 3 | 4 | 62 | 7 |
| 4 | 5 | 83 | 12 |
| 5 | 6 | 104 | 18 |
: round, ultima finestra , mai flusso continuo (). (coincide con le slide).
Errori: raddoppio oltre (); apertura ; dimenticare o l'ultimo ACK.