Esercizio - RTT e swnd, TCP da 100 KB e stop-and-wait su ogni collegamento
In questa pagina 5
Testo (tema d'esame, sessione di settembre, 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 | Mbit/s | ms | |
| R1 – R2 | Mbit/s | ms | |
| R2 – B | Mbit/s | ms | |
| R2 – C | Mbit/s | ms | |
| R2 – R3 | Mbit/s | ms | |
| R3 – D | Mbit/s | ms | |
| R3 – E | Mbit/s | ms |
La domanda 1 (arrivo di quattro pacchetti da A verso E e D con lunghezze diverse) è in Esercizio - Quattro pacchetti da A verso E e D in una rete store-and-forward. Qui le altre tre. Tra il server A e l'host B c'è una connessione TCP ( B, apertura e ACK trascurabili, intestazioni trascurabili, B, KB, MB).
- RTT e valore della finestra di invio che permette un flusso continuo tra A e B.
- Tempo totale per trasferire KB (dall'apertura all'ultimo ACK), con i dati che partono appena possibile.
- Lo stesso, ma usando al posto di TCP lo stop-and-wait a livello di collegamento su ogni collegamento.
Teoria usata: 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 →, Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective RepeatARQ (Automatic Repeat reQuest) rende affidabile un collegamento che sbaglia: il ricevitore conferma (ACK) i frame ricevuti bene, il trasmettitore ritrasmette allo scadere del timeout. Servono timeout (contro il deadlock) e numeri di sequenza (contro i duplicati). Con $t_G=t_F+2\tau_p+t_A$ e probabilità di errore $p$: Stop-and-Wait $\rho=\frac{t_F(1-p)}{t_G}$; Go-Back-N con finestra $N\ge t_G/t_F$ $\rho=\frac{1-p}{1+(N-1)p}$; Selective Repeat $\rho=1-p$. Efficienza $\eta=\rho,I/F$. La finestra ottima è la capacità del tubo in pacchetti. In Selective Repeat esiste anche una lunghezza ottima del frame: con overhead $o$ e probabilità di errore sul bit $P_b$, $x_{ott}\simeq\frac o2+\sqrt{o/P_b}$ (frame più corti se il canale sbaglia di più).Protocolli ARQ - Stop-and-Wait, Go-Back-N e Selective Repeat →, 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 →; per lo stop-and-wait anche Tecniche ARQ - stop-and-wait, go-back-N e selective repeatL'ARQ (automatic repeat request) usa un codice che rivela gli errori e fa ritrasmettere i pacchetti sbagliati, con conferme ACK/NACK. Con $p=1-(1-P_{bit})^L$ la probabilità che un pacchetto sia errato, $t_P$ il tempo di pacchetto, $t_A$ quello dell'ACK e $\tau_P$ il ritardo di propagazione: stop-and-wait $S=\frac{t_P(1-p)}{t_P+t_A+2\tau_P}$; go-back-N $S=\frac{(1-p),t_P}{1+(N-1)p}$ con $N-1=\left\lceil\frac{2\tau_P}{t_P+t_A}\right\rceil$; selective repeat $S=(1-p)\frac{t_P}{t_P+t_A}$. Il numero medio di trasmissioni di un pacchetto è $\frac1{1-p}$.Tecniche ARQ - stop-and-wait, go-back-N e selective repeat →.
Domanda 2: RTT e
Il cammino A→B usa . Con B kbit i tempi di trasmissione sono ms, ms, ms. Il collo di bottiglia è ( Mbit/s): ms.
- Andata: ms.
- Ritorno dell'ACK: ms.
(Poiché MB è enorme, .) Perché si divide per e si arrotonda per eccesso: in un RTT il collo di bottiglia riesce a trasmettere segmenti, quindi per tenerlo sempre occupato ne servono almeno in volo; la finestra è un numero intero di segmenti e con il collegamento resterebbe fermo ms a ogni giro.
Domanda 3: KB con TCP
segmenti; MSS. Apertura: SYN e SYN+ACK valgono ms ciascuno (), i dati partono a ms.
Finestre: (slow start fino a ssthresh), poi (congestion avoidance); alla sesta finestra : flusso continuo.
| RTT | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| finestra |
Inviati segmenti ( è una somma geometrica1 + 2 + 4 + ... + 2^k = 2^(k+1) − 1, perché ogni termine è il doppio del precedenteSerie notevoli - geometrica, telescopica, armonica →, più ); rimangono , spediti a ritmo ms:
Lettura dei termini: ms l'apertura ( ms di propagazione); le cinque finestre non continue (, tutte sotto ); il flusso continuo; l'ultimo ACK.
Grafico interattivo: Finestra di invio (segmenti) nei round dopo l'apertura (40 ms; 1 round = 46,5 ms): dal round 6 la finestra raggiunge swnd* e il flusso è continuo
Domanda 4: stop-and-wait su ogni collegamento
Su ogni collegamento ogni nodo spedisce un pacchetto e aspetta l'ACK del collegamento prima del successivo. Il tempo per pacchetto di un collegamento è (trasmissione, andata, ritorno dell'ACK trascurabile):
| Collegamento | |||
|---|---|---|---|
| ms | |||
| ms | |||
| ms |
Il più lento è : un pacchetto ogni ms. Gli altri due, più veloci, lasciano i pacchetti in coda in R2: il flusso è dettato da .
- Il primo pacchetto arriva a R2 dopo ms.
- parte con il pacchetto () a ms; l'ultimo parte a ms.
- Arriva a B dopo ms: ms. Il suo ACK torna a R2 dopo altri ms: ms.
- La soluzione ufficiale conta fino all'ACK ricevuto in A, cioè altri ms di ritorno sul cammino:
(Qui non c'è apertura di connessione: lo stop-and-wait è un protocollo di collegamento.) Il primo termine ( ms) è il tempo per portare il primo pacchetto a R2; ms sono gli cicli di (l'ultimo ciclo comprende la trasmissione, la propagazione e l'ACK); ms è l'ultimo tratto dell'ACK verso A.
Confronto con la soluzione ufficiale
| Domanda | Mio | Ufficiale |
|---|---|---|
| 2 | ms, MSS | uguale |
| 3 | ms | ms |
| 4 | ms | ms |
Coincide. Nota sulla domanda 4: la convenzione "ultimo ACK fino ad A" aggiunge ms rispetto all'ACK dell'ultimo collegamento ( ms) e ms rispetto alla ricezione dell'ultimo pacchetto in B ( ms). Nel testo non si distingue: si segue la soluzione ufficiale.
Errori comuni
- Usare per il collo di bottiglia del stop-and-wait il tempo di trasmissione ms invece di ms: lo stop-and-wait paga l'attesa dell'ACK a ogni pacchetto.
- Prendere (arrotondando per difetto): per un flusso continuo si arrotonda per eccesso.
- In TCP, non fermare la crescita a per passare in congestion avoidance.
- Sommare i dei tre collegamenti (): la coda in R2 e R1 assorbe i collegamenti più veloci, conta solo il più lento.
(Verificato con Python: simulatore TCP a finestra intera ( ms) e simulazione dello stop-and-wait per collegamento ( ms alla destinazione, ms con il ritorno fino ad A).)
Versione ripasso
- RTT ms; MSS.
- TCP: finestre ( seg.), restano : ms.
- S&W per collegamento: ms: domina . ms.
- Errore tipico: al posto di nel stop-and-wait.