Esercizio - Cinque pacchetti da A e trasferimento TCP di 50 KB con finestra persa
In questa pagina 7
Testo (simulazione d'esame 1, esercizio 1). Rete a commutazione di pacchetto a datagramma (store-and-forward), con code indipendenti per ogni interfaccia di uscita dei router R1 e R2.
| Collegamento | Estremi | Capacità | Propagazione |
|---|---|---|---|
| A – R1 | Mbit/s | ms | |
| R1 – R2 | Mbit/s | ms | |
| R2 – B | Mbit/s | ms | |
| R1 – D | Mbit/s | ms | |
| R2 – C | Mbit/s | ms |
- A la coda di A contiene cinque pacchetti diretti a B, B, D, D, C (in questo ordine), con canale libero. Pacchetti di byte: calcolare l'istante di arrivo a destinazione di ciascuno.
- Tra A e C c'è una connessione TCP, byte; apertura e ACK di lunghezza trascurabile, intestazioni trascurabili; B all'inizio, B, MB. Calcolare RTT e prodotto banda-ritardo (BDP).
- Il tempo di apertura della connessione (pacchetti scambiati), con i dati che partono appena possibile.
- Il tempo totale per trasferire KB (dall'apertura alla ricezione dell'ultimo ACK).
- Lo stesso calcolo se tutti i segmenti in volo della quarta finestra vanno persi (i fuori sequenza vengono scartati), con timeout pari a 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: i cinque pacchetti
Un pacchetto da B bit impiega per essere trasmesso su un collegamento:
| Collegamento | |||||
|---|---|---|---|---|---|
| (ms) |
Regola: un pacchetto può uscire da un nodo solo quando è arrivato per intero (store-and-forward), parte a , finisce dopo e arriva al nodo successivo dopo in più. Percorsi: B: ; D: ; C: .
Uscita da A. I pacchetti (B, B, D, D, C) escono uno dopo l'altro ogni ms e arrivano a R1 dopo ms:
| (B) | (B) | (D) | (D) | (C) | |
|---|---|---|---|---|---|
| fine su | |||||
| arrivo in R1 |
In R1. Le code sono due, una per interfaccia di uscita:
- (verso R2, ms): parte a , finisce a ; è arrivato a ma aspetta fino a , finisce a ; arriva a , trova il collegamento appena libero, parte a e finisce a . Arrivi in R2 (con ms): a , a , a .
- (verso D, ms): parte a , finisce a , arriva a D a ; aspetta fino a , finisce a , arriva a .
In R2.
- (verso B, ms): parte a , finisce a , arriva a B a ; (pronto a ) parte a , finisce a , arriva a .
- (verso C, ms): pronto a , finisce a , arriva a C a .
| Pacchetto | D | D | B | B | C |
|---|---|---|---|---|---|
| arrivo (ms) |
Domanda 2: RTT e BDP
Il cammino A→C usa . Il collegamento più lento è ( Mbit/s): è il collo di bottiglia, e il suo tempo di trasmissione ms è l'intervallo minimo fra due segmenti consecutivi in arrivo.
- Andata di un segmento da B: ms.
- Ritorno dell'ACK (lunghezza trascurabile, quindi solo propagazione): ms.
Significato: per tenere sempre occupato il collo di bottiglia servono almeno segmenti in volo, quindi MSS. Con MB la finestra di invio è .
Domanda 3: apertura della connessione
I segmenti di apertura hanno lunghezza trascurabile: contano solo le propagazioni, ms in un verso.
- SYN da A a C: ms.
- SYN+ACK da C ad A: altri ms (a ms A considera aperta la connessione).
- ACK da A a C, con il primo segmento di dati sullo stesso pacchetto (piggyback): parte a ms e, come ogni segmento da B, arriva dopo ms.
Quindi la connessione risulta aperta anche in C a ms, quando arriva l'ACK con il primo dato: è il valore della soluzione ufficiale ( ms). I due segmenti di controllo da soli occupano ms: è l'istante in cui A comincia a trasmettere i dati, ed è il ms che compare nel calcolo del tempo totale.
Domanda 4: trasferimento di 50 KB
Numero di segmenti. Si usa segmenti.
Crescita della finestra. Si parte da MSS e B MSS: in slow start la finestra raddoppia ogni RTT (); a si raggiunge ssthresh e inizia la congestion avoidance con MSS per RTT (). Segmenti inviati nelle prime finestre:
| RTT | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| finestra (MSS) |
Totale segmenti (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 segmenti.
Flusso continuo. Alla sesta finestra : il collo di bottiglia non resta mai vuoto e i segmenti restanti escono uno ogni ms.
Tempo totale. L'ACK dell'ultimo segmento arriva a
Spiegazione dei termini: le prime finestre occupano RTT, poi il primo dei segmenti parte a e l'ultimo dopo; da quando l'ultimo parte a quando ne arriva l'ACK passa un RTT (il suo è già dentro l'RTT).
Domanda 5: quarta finestra persa, timeout di 3 RTT
Le finestre passano senza problemi ( segmenti consegnati). La quarta finestra ( segmenti) parte a ed è persa per intero. Dopo ms scatta il timeout (misurato dall'inizio dell'invio della finestra persa):
- MSS e MSS (riparte la slow start);
- finestre dopo il timeout: (si arriva a ssthresh), poi in congestion avoidance .
Segmenti ancora da consegnare: , quindi servono esattamente finestre. Tutte restano sotto il BDP ( MSS): il collo di bottiglia non si satura e ogni finestra dura un RTT. Nell'ultima finestra ( segmenti) i segmenti escono a distanza , quindi l'ultimo parte dopo il primo, e il suo ACK torna dopo un RTT.
Lettura dei termini: ms sono SYN e SYN+ACK; le finestre riuscite; ms l'attesa del timeout della quarta finestra; le sette finestre dopo il timeout ( segmenti, ), di cui l'ultima è anche l'ultima a spedire; la serializzazione dei suoi segmenti al collo di bottiglia ( ms); l'ultimo ACK è già nell'ultimo RTT (tutte le finestre restano sotto il BDP , quindi ciascuna dura un RTT).
Grafico interattivo: Finestra di invio (segmenti) nei round dopo l'apertura (40 ms): domanda 4 senza perdite e domanda 5 con la quarta finestra persa (timeout dopo 3 RTT)
Confronto con la soluzione ufficiale
| Domanda | Risultato mio | Soluzione ufficiale |
|---|---|---|
| 1 | ms | uguale |
| 2 | RTT ms, BDP kbit MSS | uguale |
| 3 | ms (con ACK+dato) | uguale |
| 4 | ms | ms |
| 5 | ms | ms |
Discrepanza sulla domanda 5. La soluzione ufficiale scrive la stessa formula () ma riporta ms; con i suoi stessi termini () la somma è ms. Ho verificato il risultato con un simulatore a eventi (finestra intera, ACK cumulativi, timeout a dall'inizio della finestra persa): ms. Sembra un errore di somma nella soluzione.
Errori comuni
- Dare a (C) una coda dietro : sul collegamento i due pacchetti non si sovrappongono, perché finisce proprio a ms.
- Usare o come collo di bottiglia: il cammino A→C passa per .
- Calcolare il BDP in MSS senza arrotondare per eccesso: MSS richiedono .
- Dimenticare che dopo il timeout e non .
- Contare come consegnati i segmenti della finestra persa.
(Verificato con Python: simulatore a eventi per i pacchetti e per TCP; ms e ms.)
Versione ripasso
- Arrivi. D: ; B: ; C: ms.
- RTT. ms; MSS .
- Apertura. SYN e SYN+ACK ms; l'ACK porta il primo segmento (ricevuto a ms).
- Totale (50 KB). Finestre ( seg.), restano : ms.
- 4ª finestra persa (): ; finestre : ms (ufficiale , errore di somma).
- Errore tipico: dopo il timeout e arrotondamento di .