Esercizio - UDP e TCP su tre collegamenti, messaggio da 225 kB
In questa pagina 7
Testo. Si trasmette un messaggio di kbyte dall'host all'host attraverso con Mbit/s, ms; Mbit/s, ms; Mbit/s, ms.
- Con UDP a livello di trasporto e pacchetti di dimensione massima byte, calcolare il tempo totale (si trascurano elaborazione, accodamento e intestazioni di tutti i livelli).
- Con TCP tra e : B, ACK e segmenti di apertura trascurabili, intestazioni trascurabili, iniziale B, B, MB. Calcolare il tempo totale (dall'apertura della connessione alla ricezione dell'ultimo ACK), con la trasmissione dei dati che comincia il prima possibile.
- Ripetere con kB.
- Ripetere (con kB) nel caso in cui la seconda finestra di pacchetti sia persa, con timeout pari a RTT; i pacchetti fuori ordine vengono scartati e non generano ACK.
Teoria usata: Protocollo UDPUDP (User Datagram Protocol) è il protocollo di trasporto senza connessione e inaffidabile: rispetto a IP aggiunge soltanto la comunicazione processo-processo (numeri di porta) e un controllo d'errore facoltativo. L'intestazione è di soli 8 byte (porta sorgente, porta destinazione, lunghezza, checksum). Il checksum copre pseudo-intestazione (indirizzi IP, protocollo 17, lunghezza), intestazione e dati, ed è il complemento a uno della somma a 16 bit; se vale 0 significa "non calcolato", e un risultato 0 si trasmette come 0xFFFF. UDP non ha connessione, numeri di sequenza, controllo di flusso, di errore né di congestione: si sceglie per i messaggi brevi (DNS, DHCP, RIP, SNMP) e per le applicazioni in tempo reale, dove conta non aggiungere ritardo.Protocollo UDP →, 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 →, 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 →. Convenzione di calcolo (apertura a , 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 comuni
bit. Tempi di trasmissione di un segmento: ms, ms; il collegamento 2 è il collo di bottiglia. Somma delle propagazioni ms. Segmenti: .
(1) UDP
UDP non ha apertura, né ACK, né finestra: spedisce i pacchetti uno dietro l'altro. Il collegamento 2 è più lento del 1, quindi i pacchetti escono da a distanza ms: il tempo è determinato dal collo di bottiglia. Si finisce quando l'ultimo pacchetto arriva a (nessun ACK da aspettare).
- il primo pacchetto arriva a dopo ms;
- il collegamento 2 lavora senza pause per ms;
- l'ultimo pacchetto, finita la trasmissione sul collegamento 2, si propaga per , viene trasmesso dal collegamento 3 in e si propaga per .
(2) TCP con MB
segmenti; segmenti (non limita).
Soglia del flusso continuo. Il collo di bottiglia ha ms, quindi servono , cioè segmenti, che con finestre intere significa .
| round | inizio (ms) | segmenti inviati (totale) | |
|---|---|---|---|
| 1 | 1 | 18 | 1 |
| 2 | 2 | 39 | 3 |
| 3 | 4 | 60 | 7 |
| 4 | 8 | 81 | 15 |
| 5 | 9 | 102 | 24 |
| 6 | 10 | 123 | 34 |
| 7 | 11 | 144 | continuo |
Slow start (, una somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →), poi avoidance ; con il flusso diventa continuo. Nei primi sei round si inviano segmenti; restano , tutti in flusso continuo a partire da ms: uno ogni ms. L'ultimo inizia ms dopo, a ms, e il suo ACK torna un RTT dopo:
(3) TCP con kB
segmenti: . La finestra non può superare , quindi non si arriva mai al flusso continuo: ogni finestra dura ms ms.
| round | inizio (ms) | segmenti inviati (totale) | |
|---|---|---|---|
| 1 | 1 | 18 | 1 |
| 2 | 2 | 39 | 3 |
| 3 | 4 | 60 | 7 |
| 4 | 8 | 81 | 15 |
| 5, 6, | 9 (limitata da ) | per round |
Dopo i primi segmenti restano segmenti: esattamente finestre da , la prima a ms, l'ultima a ms; i suoi segmenti escono in ms e l'ACK dell'ultimo torna un RTT dopo l'inizio dell'ultimo segmento:
(4) Perdita della seconda finestra, kB
- A ms parte la prima finestra (1 segmento); l'ACK torna a ms.
- A ms parte la seconda finestra, di segmenti (): vanno persi entrambi.
- Il temporizzatore parte a ms e scade dopo ms, a ms.
- Alla scadenza: segmento e . Poiché , la ripartenza avviene già in congestion avoidance: non c'è slow start, la finestra cresce di per round:
- I segmenti fuori ordine sono scartati senza ACK (nessun ACK duplicato, quindi niente ritrasmissione rapida).
| round dopo il timeout | inizio (ms) | segmenti consegnati (totale con il primo) | |
|---|---|---|---|
| 1 | 1 | 102 | 2 |
| 2 | 2 | 123 | 4 |
| 3 | 3 | 144 | 7 |
| 8 | 8 | 249 | |
| 9 | 9 (limita ) | 270 | 46 |
I segmenti inviati fino alla finestra da inclusa sono (somma dei primi numeri naturali1 + 2 + ... + n = n(n+1)/2Sommatorie →: ). Restano , inviati con finestre da : , cioè finestre complete (da ms) più un'ultima da segmenti, che comincia a ms: Nessuna finestra è continua ().
Grafico interattivo: Finestra di invio (segmenti) nei round dopo l'apertura (18 ms; 1 round = 21 ms): caso (2) rwnd = 1 MB, caso (3) rwnd = 9 MSS, caso (4) seconda finestra persa con timeout dopo 3 RTT
(I risultati TCP, , e ms, sono stati verificati con Python con un simulatore a eventi di collegamenti in serie; il caso UDP con la formula: ms.)
Confronto con la soluzione ufficiale
Le slide danno ms, ms, ms, ms: coincidono. Nel caso (4) la slide scrive, nella scomposizione, "": il primo è la prima finestra, il secondo la finestra di ripartenza dopo il timeout. Resta implicito che kB si mantiene anche nel caso (4) (si vede dal grafico, ).
Con la regola abituale MSS la ripartenza sarebbe in slow start e il risultato diverso; qui il corso, con , parte direttamente in avoidance.
Errori comuni
- Dimenticare che UDP non ha apertura né ACK: il tempo è fissato dal collo di bottiglia e termina all'arrivo dell'ultimo pacchetto ( ms invece di ms).
- Usare la soglia al posto del RTT per il flusso continuo: con segmenti ms ms, quindi la finestra limita ancora.
- Nel caso (4) riprendere in slow start dopo il timeout: con si cresce già linearmente.
- Nel caso (4) non contare nel tempo l'attesa del timeout ( RTT) e il RTT della prima finestra.
Versione ripasso
Dati. : Mbit/s ms, Mbit/s ms, Mbit/s ms; kB segmenti da B ( bit). ms, ms (collo di bottiglia), ms; ms; apertura ms. Convenzione: Esercizio - TCP, slow start e messaggio da 18 kB su un collegamento da 8 Mbps (Protocollo UDPUDP (User Datagram Protocol) è il protocollo di trasporto senza connessione e inaffidabile: rispetto a IP aggiunge soltanto la comunicazione processo-processo (numeri di porta) e un controllo d'errore facoltativo. L'intestazione è di soli 8 byte (porta sorgente, porta destinazione, lunghezza, checksum). Il checksum copre pseudo-intestazione (indirizzi IP, protocollo 17, lunghezza), intestazione e dati, ed è il complemento a uno della somma a 16 bit; se vale 0 significa "non calcolato", e un risultato 0 si trasmette come 0xFFFF. UDP non ha connessione, numeri di sequenza, controllo di flusso, di errore né di congestione: si sceglie per i messaggi brevi (DNS, DHCP, RIP, SNMP) e per le applicazioni in tempo reale, dove conta non aggiungere ritardo.Protocollo UDP →, 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) UDP: senza apertura né ACK, il tempo è dettato dal collegamento 2: ms.
(2) TCP, MB. ; flusso continuo se , cioè . Finestre (inizi ms): segmenti in round; dal round 7 ( ms) continuo con segmenti.
(3) kB segmenti. : mai continuo. Finestre ( segmenti), poi , la prima a ms.
(4) Seconda finestra (2 segmenti, a ms) persa, RTO ms. Timeout a ms: , quindi si riparte già in congestion avoidance: (inizi ms), poi (limite di ) da ms. Inviati fino alla finestra da : ; restano , ultima finestra da a ms. I fuori ordine sono scartati senza ACK, quindi niente ritrasmissione rapida. Le slide danno ms.
Errori: UDP con ACK o apertura; soglia continua con invece del RTT; slow start dopo il timeout con ; dimenticare l'attesa del timeout e il RTT della prima finestra.