Esercizio - Cinque pacchetti da A e B e TCP da 18,75 KB su collegamenti da 100 a 1000 kbps
In questa pagina 6
Testo (tema d'esame, sessione di giugno, esercizio 1). Rete a commutazione di pacchetto a datagramma (store-and-forward), code indipendenti per ogni interfaccia di uscita.
| Collegamento | Estremi | Capacità | Propagazione |
|---|---|---|---|
| A – R1 | kbit/s | ms | |
| B – R1 | kbit/s | ms | |
| R1 – R2 | kbit/s | ms | |
| R2 – C | Mbit/s | ms | |
| R2 – D | kbit/s | ms | |
| R2 – R3 | kbit/s | ms | |
| R3 – E | kbit/s | ms | |
| R3 – F | kbit/s | ms |
- A la coda del server A ha tre pacchetti diretti a C, C, E (E per ultimo); quella del server B ha due pacchetti diretti a D e F (F per ultimo). Pacchetti da B, trasmissioni che partono a in tutti i nodi. Calcolare l'arrivo dei soli tre pacchetti di A.
- Tra A e D c'è una connessione TCP ( B, apertura e ACK trascurabili, intestazioni trascurabili, B, B, B). Calcolare RTT e BDP.
- Tempo totale per trasferire kB (dall'apertura all'ultimo ACK).
- Lo stesso con MB, se tutti i pacchetti in volo della quinta finestra sono persi e il timeout è 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 pacchetti di A (con il traffico di B)
B bit; tempi di trasmissione:
| Collegamento | ||||||||
|---|---|---|---|---|---|---|---|---|
| (ms) |
Percorsi: A→C: ; A→E: ; B→D: ; B→F: . I due flussi si incontrano su (R1→R2) e, per i pacchetti verso E e F, su (R2→R3).
Uscita dagli host e arrivo in R1.
| Pacchetto | fine su / | arrivo in R1 |
|---|---|---|
| (C) | ||
| (C) | ||
| (E) | ||
| (D) | ||
| (F) |
Coda su ( ms). Si servono per ordine di arrivo in R1: (), (), (), (), ().
| Ordine | Pacchetto | pronto | inizio | fine | in R2 () |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 |
In R2.
- (verso C) su (): , arriva a C a ms.
- (verso C): , arriva a ms.
- (verso E) e (verso F) usano (): arriva in R2 a e parte subito (); arriva a ma è occupato fino a : parte a , finisce a , arriva in R3 a .
- In R3, su (): , arriva a E a ms.
| Pacchetto | (C) | (C) | (E) |
|---|---|---|---|
| arrivo (ms) |
(Il pacchetto arriva prima del secondo per C perché passa per un tratto diverso.)
Domanda 2: RTT e BDP
Cammino A→D: . Il collo di bottiglia è ( kbit/s). Un segmento da B bit:
| Collegamento | |||
|---|---|---|---|
| ms | ms | ms | |
| ms | ms | ms |
- Andata: ms.
- Ritorno dell'ACK (trascurabile): ms.
Quindi MSS e il tempo di trasmissione del collo di bottiglia è ms.
Passaggi e unità: kbit/s ms bit ( bit/s s), quindi bit segmenti da bit. Il flusso è continuo se , cioè : si arrotonda per eccesso a , perché con segmenti la finestra occupa il collegamento ms su e lo lascia fermo ms a ogni giro.
Domanda 3: kB con B
segmenti; MSS; MSS.
Apertura. SYN e SYN+ACK solo propagazione: ms ciascuno, quindi i dati partono a ms (con l'ACK finale).
Finestre. Slow start: (si raggiunge ); congestion avoidance: (la finestra si ferma a per il limite di ).
| RTT | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| finestra |
Nelle prime sei finestre si inviano segmenti (le prime tre sono una somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →: ). Dalla settima : flusso continuo per i segmenti restanti.
Lettura dei termini: ms è l'handshake ( ms per il SYN e per il SYN+ACK, solo propagazione); sono le prime sei finestre, ciascuna lunga un RTT perché (ad esempio ms) e il mittente aspetta l'ACK del primo segmento; i segmenti rimanenti partono in flusso continuo uno ogni , il primo all'inizio della settima finestra e l'ultimo dopo; l'ultimo è il ritorno dell'ACK dell'ultimo segmento (la sua trasmissione è già compresa nell'RTT).
Domanda 4: quinta finestra persa, MB
Con grande la finestra non è mai limitata dal ricevitore: (slow start), poi in congestion avoidance.
- Le prime quattro finestre () portano segmenti a destinazione.
- La quinta finestra ( segmenti) parte a ms ed è persa per intero.
- Dopo ms (misurati dall'inizio dell'invio della finestra persa) scatta il timeout: MSS, .
Dopo il timeout: finestre (si raggiunge ssthresh), poi (congestion avoidance), con segmenti in finestre. I segmenti ancora da inviare erano , ne restano . Dall'ottava finestra : flusso continuo.
Lettura dei termini: ms handshake; le prime quattro finestre () che vanno a buon fine; ms l'attesa del timeout, contata dall'invio della quinta finestra persa; le sette finestre dopo il timeout (somma , con la formula di Gauss , SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →); la parte in flusso continuo; finale per l'ultimo ACK.
Grafico interattivo: Finestra di invio (segmenti) nei round (1 round = 1 RTT = 75 ms dall'apertura a 56 ms): domanda 3 (rwnd = 8) e domanda 4 (quinta finestra persa, timeout dopo 3 RTT)
Il grafico mostra le due finestre di invio nei round (linea continua: domanda 3; tratteggiata: domanda 4): la finestra persa (6 segmenti) resta in attesa fino al timeout, poi si riparte da con , e la linea orizzontale è , la soglia del flusso continuo.
Confronto con la soluzione ufficiale
| Domanda | Mio | Ufficiale |
|---|---|---|
| 1 | C: , C: , E: ms | uguale |
| 2 | ms, BDP kbit | uguale |
| 3 | s | s |
| 4 | s | s |
Tutto coincide.
Errori comuni
- Mettere in coda dietro su in ordine di partenza dagli host: l'ordine di servizio è per arrivo in R1 ( arriva a , a ).
- Dimenticare che occupa fino a ms e ritarda di ms.
- Alla domanda 3 non fermare la finestra a MSS: con B non si va oltre.
- Alla domanda 4 prendere : la finestra al momento della perdita è , quindi .
- Contare ancora la quinta finestra tra i segmenti consegnati.
(Verificato con Python: simulatore a eventi per la domanda 1 e simulatore TCP a finestra intera per le domande 3-4; e ms.)
Versione ripasso
- Domanda 1. Ordine su : (), (), (), (), (). C: e ; E: ms ( aspetta su fino a ).
- RTT ms; MSS .
- , : finestre ( seg.), poi continuo: ms.
- 5ª finestra persa ( MB): consegnati; ; finestre (): ms.
- Errore tipico: da finestra sbagliata; limite di rwnd ignorato.