Esercizio - Sei pacchetti con traffico concorrente e TCP con rwnd limitata
In questa pagina 7
Testo (simulazione d'esame 2, esercizio 1). Rete a commutazione di pacchetto a datagramma (store-and-forward) con code indipendenti per ogni interfaccia di uscita dei router R1, R2, R3.
| Collegamento | Estremi | Capacità | Propagazione |
|---|---|---|---|
| A – R1 | Mbit/s | ms | |
| B – R1 | Mbit/s | ms | |
| R1 – R2 | Mbit/s | ms | |
| R2 – C | Mbit/s | ms | |
| R2 – R3 | Mbit/s | ms | |
| R3 – E | Mbit/s | ms | |
| R3 – D | Mbit/s | ms |
- A la coda di A contiene quattro pacchetti diretti a E, E, D, D; quella di B due pacchetti diretti a C, C. Lunghezze kbit, kbit, kbit. Calcolare l'istante di arrivo di ogni pacchetto.
- Tra A e C c'è una connessione TCP, B, apertura e ACK trascurabili, intestazioni trascurabili; B, B, MB. Calcolare la finestra di invio che permette un flusso continuo tra A e C.
- Tempo totale per trasferire KB (dall'apertura alla ricezione dell'ultimo byte).
- Lo stesso con KB.
- Lo stesso con KB se tutti i pacchetti in volo della settima finestra vanno persi (fuori sequenza scartati), con timeout di 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: sei pacchetti con lunghezze diverse
Percorsi: E: ; D: ; C (pacchetti di B): . Tempi di trasmissione in ms:
| Pacchetto | |||||||
|---|---|---|---|---|---|---|---|
| E ( kbit) | – | – | – | ||||
| D ( kbit) | – | – | – | ||||
| C ( kbit, da B) | – | – | – | – |
Uscita dai due host. A manda uno dietro l'altro; B manda :
- : , in R1 a ; : , in R1 a ; : , in R1 a ; : , in R1 a .
- (di B, per distinguerlo lo chiamo ): , in R1 a ; : , in R1 a .
Coda su (R1 → R2). Si servono i pacchetti per ordine di arrivo in R1: (), (), (), (), (), ().
| Ordine | Pacchetto | pronto | inizio | fine | in R2 () |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 | |||||
| 6 |
In R2. I pacchetti per C (, ) vanno su ( Mbit/s, ms): da a , arriva a C a ; , pronto a , aspetta fino a , finisce a e arriva a ms. I pacchetti per R3 vanno su (coda FIFO per arrivo in R2: , , , ):
| Pacchetto | (inizio → fine) | in R3 () |
|---|---|---|
In R3. su : , arriva a E a ; : , arriva a . su : , arriva a D a ; : , arriva a .
| Pacchetto | (a C) | (a C) | ||||
|---|---|---|---|---|---|---|
| arrivo (ms) |
Domanda 2: finestra per un flusso continuo
Il cammino A→C usa . Il collo di bottiglia è ( Mbit/s): con B kbit, ms.
- Andata di un segmento: ms.
- Ritorno dell'ACK: ms.
Equivalente: kbit MSS.
Domanda 3: 50 KB con MB
segmenti. L'apertura (SYN e SYN+ACK, solo propagazione ms ciascuno) dura ms; l'ACK finale porta il primo dato.
Finestre: (slow start fino a MSS), poi in congestion avoidance:
| RTT | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| finestra |
Inviati (le prime quattro finestre sono una somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →: , più ); rimangono . Dalla sesta finestra : flusso continuo, un segmento ogni ms. L'ultimo byte arriva quando l'ultimo segmento ha attraversato tutti i collegamenti (non serve aspettare l'ACK):
Lettura dei termini: ms l'apertura; le prime cinque finestre (); la distanza tra il primo e l'ultimo dei segmenti in flusso continuo; ms il viaggio dell'ultimo segmento fino a C (si chiede l'ultimo byte, quindi niente ritorno dell'ACK).
Domanda 4: KB
MSS. La finestra di invio è , quindi si ferma a : finestre Poiché ms ms, il mittente invia segmenti, poi aspetta: ogni finestra dura un RTT.
- Nelle prime due finestre: segmenti; rimangono .
- : finestre complete da e una finale da segmento.
Domanda 5: settima finestra persa
Con le finestre sono (sei finestre, segmenti consegnati) e poi la settima ( segmenti, inviata a ) è persa. Dopo scatta il timeout:
- MSS, MSS;
- finestre dopo il timeout: (si raggiunge ssthresh), (congestion avoidance), poi (limite di rwnd): segmenti nelle prime finestre.
Rimangono segmenti; dopo le tre finestre da ne restano : finestre da e una da .
L'ultima finestra ha segmenti: l'ultimo esce dopo il primo. Numericamente (i tre blocchi da sono, nell'ordine, il timeout, le finestre e le tre finestre da ).
Grafico interattivo: Finestra di invio (segmenti) nei round dopo l'apertura (40 ms; 1 round = 45,9 ms): domanda 3 (rwnd = 1 MB), domanda 4 (rwnd = 4 MSS) e domanda 5 (settima finestra persa, timeout dopo 3 RTT)
Confronto con la soluzione ufficiale
| Domanda | Mio | Ufficiale |
|---|---|---|
| 1 | E: ; D: ; C: ms | uguale |
| 2 | ms, MSS | uguale |
| 3 | ms | ms |
| 4 | ms | ms |
| 5 | ms | ms |
Tutto coincide. L'ufficiale usa il tempo "fino all'ultimo byte" (non all'ultimo ACK): aggiungendo ms di ritorno dell'ACK si avrebbero , e ms.
Errori comuni
- Servire in ordine di partenza dagli host invece che di arrivo in R1: () passa prima di ().
- Usare con la stessa per tutti i pacchetti: qui sono diverse.
- Dimenticare che resta in coda in R2 per fino a ms.
- Con piccola, continuare a raddoppiare la finestra oltre .
- Dopo il timeout calcolare da una non limitata da rwnd: si usa la finestra effettivamente in volo ( MSS), quindi .
(Verificato con Python: simulatore a eventi per la domanda 1; simulatore TCP a finestra intera per le domande 3-5, riportato all'istante dell'ultimo byte.)
Versione ripasso
- Arrivi. E: ; D: ; C: ms. Code FIFO per istante di arrivo in R1/R2.
- RTT. ms; ms (); MSS.
- 50 KB (, ): finestre ( seg.), restano : ms (ultimo byte). (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 →)
- MSS: ; : ms.
- 7ª finestra persa: consegnati; ; finestre e : ms.
- Errore tipico: ordine di servizio in ; da cwnd non limitato.