Esercizio - SRTT, deviazione media e RTO da sette misure di RTT
In questa pagina 7
Testo (esempio del corso). Sette misure successive di RTT, ms. Si calcolano la stima levigata e la deviazione media con le medie mobili esponenziali di Jacobson, e , partendo da valori iniziali nulli; poi il timeout di ritrasmissione . In più: confronto con l'inizializzazione dell'RFC 6298 e caso con ritrasmissioni (algoritmo di Karn e raddoppio del timeout).
Teoria usata: Stima del timeout di ritrasmissione (RTO)TCP ritrasmette un segmento se il suo ACK non arriva entro il timeout di ritrasmissione (RTO), che deve seguire il tempo di andata e ritorno (RTT) della rete: troppo corto provoca ritrasmissioni inutili, troppo lungo rallenta il recupero. L'RTT si misura con un solo timer per connessione (granularità G del clock). Si mantengono una media mobile esponenziale SRTT_i = (1-α)SRTT_{i-1} + α·rtt_i con α = 1/8 e la deviazione media MAD_i = (1-ρ)MAD_{i-1} + ρ|rtt_i - SRTT_{i-1}| con ρ = 1/4 (in RFC 6298 RTTVAR, β = 1/4); RTO = SRTT + 4·MAD, con minimo di 1 s. L'algoritmo di Karn ignora le misure dei segmenti ritrasmessi (non si sa a quale trasmissione si riferisce l'ACK) e a ogni timeout consecutivo il valore raddoppia fino a 64 volte T0. Per un RTT gaussiano la deviazione media vale MAD = σ·sqrt(2/π) ≈ 0,797σ.Stima del timeout di ritrasmissione (RTO) →, 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 →.
Le formule
Dopo la misura -esima ( = tempo tra la trasmissione di un segmento e il ricevimento del suo ACK): ( è il timeout da usare per i segmenti trasmessi dopo la misura ). Nota l'ordine: la deviazione si aggiorna con la stima levigata precedente .
Perché due medie e il fattore 4: la media esponenziale pesa di più i campioni recenti (si adatta ai cambi di carico) con costo di una moltiplicazione, e , sono potenze di due, quindi si fanno con scorrimenti di bit (dividere per è uno scorrimento a destra di posizioni, Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →). Il fattore non è casuale: per RTT gaussiani , quindi e un campione supera con probabilità (Distribuzione gaussiana (normale)N(μ, σ²) ha densità e^(−(x−μ)²/(2σ²)) / √(2πσ²), a campana centrata in μ con larghezza σ; media μ, varianza σ²; si standardizza con Z = (X − μ)/σ ~ N(0, 1) e si calcola P(X ≤ x) = Φ((x − μ)/σ), con Φ(−z) = 1 − Φ(z); aX + b è ancora gaussiana, N(aμ + b, a²σ²).Distribuzione gaussiana (normale) →; dimostrazione della costante nella teoria). Il timeout storico scade troppo presto se il RTT ha varianza alta (carico elevato): aggiungere un multiplo della deviazione media rende il timeout robusto.
Come si ottiene un campione
Il TCP ha un solo temporizzatore di misura alla volta (un timer per connessione, non per segmento), con la granularità del clock del sistema operativo. Esempio delle slide: parte il segmento e il timer si avvia; torna l'ACK dopo tick, misura e il timer si ferma. Si manda il segmento , il timer riparte; i segmenti e non vengono misurati perché il timer è già attivo; torna l'ACK dopo tick, . Questo spiega perché le misure sono poche (una per finestra al massimo). L'estensione timestamp (marca temporale nell'intestazione, ripetuta dal ricevitore negli ACK) permette di misurare con più precisione.
Tabella con valori iniziali nulli ()
| 1 | 30 | 3,75 | 7,50 | 33,75 |
| 2 | 80 | 13,28 | 24,69 | 112,03 |
| 3 | 40 | 16,62 | 25,20 | 117,40 |
| 4 | 130 | 30,79 | 47,24 | 219,76 |
| 5 | 50 | 33,19 | 40,23 | 194,12 |
| 6 | 70 | 37,79 | 39,38 | 195,30 |
| 7 | 90 | 44,32 | 42,58 | 214,65 |
Passaggi della prima riga: ; . Seconda riga: ; .
Che cosa mostra la tabella.
- La stima levigata sale molto lentamente: dopo sette misure ms, ma la media vera dei sette RTT è ms. È l'effetto dell'inizializzazione a : la memoria dello zero iniziale pesa ancora . Il perché: srotolando la formula, ; i pesi dei sette campioni sommano a (somma geometricaLe serie di cui si conosce il carattere e da usare come termine di paragone: geometrica (converge a 1/(1-q) se |q|<1), telescopiche (somma b_1 - lim b_n, come Mengoli), armonica generalizzata (1/n^alpha converge se e solo se alpha>1).Serie notevoli - geometrica, telescopica, armonica → finita) e il resto, , va al valore iniziale nullo. Per questo , dove è la media dei sette campioni pesata con i pesi normalizzati (più peso ai recenti), invece dei ms della media semplice.
- La deviazione , invece, è alta e sovrastimata ( ms): la differenza misura la distanza da una stima ancora troppo bassa. Per questo, nei primi campioni, il timeout è comunque ragionevole (maggiore dei RTT osservati: ms contro ms al massimo) pur con errato.
- Confronto con i valori "veri" dei sette campioni: media ms, deviazione standard ms (popolazione) o ms (campionaria), deviazione media assoluta ms. La slide riporta "avg ms, stdev ms" per l'intera serie, di cui mostra solo sette righe.
(Verificato con Python: i valori coincidono con le slide a meno dell'ultimo decimale; le slide troncano alcune cifre: , , per , , .)
Grafico interattivo: rtt misurati, SRTT e RTO = SRTT + 4·MAD con partenza da zero (ms): lo zero iniziale tiene SRTT molto sotto la media vera (70 ms), mentre RTO resta sopra quasi tutti i campioni
Nel grafico i punti uniti dalla linea tratteggiata sono gli rtt misurati, la linea in basso è e quella in alto è ; vale per il campione ed è più piccolo del campione che segue solo due volte ( e ).
Con l'inizializzazione dell'RFC 6298
La procedura standard, che evita il difetto dello zero iniziale:
- prima misura : , ;
- misure successive: , poi (stessi pesi e , stesso ordine);
- , e comunque non meno di s.
| (senza minimo) | ||||
|---|---|---|---|---|
| 1 | 30 | 30,00 | 15,00 | 90,00 |
| 2 | 80 | 36,25 | 23,75 | 131,25 |
| 3 | 40 | 36,72 | 18,75 | 111,72 |
| 4 | 130 | 48,38 | 37,38 | 197,91 |
| 5 | 50 | 48,58 | 28,44 | 162,35 |
| 6 | 70 | 51,26 | 26,69 | 158,00 |
| 7 | 90 | 56,10 | 29,70 | 174,90 |
La stima ms è più vicina alla media ( ms) di quella con zero iniziale ( ms), e i timeout sono più bassi ( contro ms) perché non c'è la deviazione gonfiata. Con il minimo di s previsto dall'RFC tutti i valori in tabella (sono tutti sotto s) verrebbero portati a s: il minimo domina, come negli esercizi sul modello di throughput (Esercizio - throughput TCP di tre flussi con la formula del modello).
Ritrasmissioni: algoritmo di Karn e raddoppio del timeout
Problema. Se un segmento è stato ritrasmesso, l'ACK che arriva è relativo alla prima, alla seconda o alla -esima trasmissione? Non si può sapere: misurando dalla prima trasmissione il campione sarebbe troppo alto, dalla ultima forse troppo basso.
Algoritmo di Karn. (1) I campioni di RTT dei segmenti ritrasmessi non si usano per aggiornare e la deviazione. (2) Alla scadenza del timer, l' viene raddoppiato (exponential backoff) e il raddoppio resta in vigore finché non arriva un campione valido, preso da un segmento mai ritrasmesso; a quel punto si ricalcola .
Esempio. Si parta dopo le prime cinque misure con l'inizializzazione RFC 6298: ms, ms, ms (senza minimo di s per leggere i numeri).
| evento | azione | in uso (ms) |
|---|---|---|
| segmento 6 inviato e perso | timer di ms | 162,35 |
| 1ª scadenza: ritrasmissione, anche questa persa | 324,70 | |
| 2ª scadenza: seconda ritrasmissione | 649,40 | |
| arriva l'ACK, ms dopo l'ultima trasmissione | ambiguo: campione scartato, nessun aggiornamento | 649,40 |
| segmento 7 nuovo, ACK dopo ms | campione valido: , ; si toglie il raddoppio |
Che cosa sarebbe successo senza Karn: se il campione fosse misurato dalla prima trasmissione, sarebbe ms: , , ms, cioè un timeout quasi quattro volte troppo grande per una rete con RTT di circa ms. Se invece fosse misurato dall'ultima trasmissione ( ms) ma l'ACK fosse in realtà della prima (arrivata in ritardo), e ms: più basso del RTT reale, con rischio di scadenze premature e ritrasmissioni inutili.
Con il minimo di s i timeout successivi alla perdita sarebbero s, s, s (l'RFC fissa un massimo di almeno s).
(Tutti i numeri sono ricalcolati con Python.)
Confronto con la soluzione ufficiale
La tabella con valori nulli coincide con quella della slide (a parte i troncamenti di cui sopra). La slide dà la formula per il timeout nella forma (con il RTT medio al posto di ); qui si usa , equivalente. L'esempio con l'inizializzazione RFC e quello di Karn non sono nelle slide: sono ricavati dalle stesse regole.
Errori comuni
- Aggiornare la deviazione con già aggiornato invece di .
- Misurare il RTT di un segmento ritrasmesso: viola l'algoritmo di Karn.
- Dimenticare di togliere il raddoppio del timeout alla prima misura valida successiva.
- Dimenticare il minimo di s (e che con valori iniziali nulli le prime stime sono molto basse).
Versione ripasso
Dati. Misure ms; , ; valori iniziali nulli (Stima del timeout di ritrasmissione (RTO)TCP ritrasmette un segmento se il suo ACK non arriva entro il timeout di ritrasmissione (RTO), che deve seguire il tempo di andata e ritorno (RTT) della rete: troppo corto provoca ritrasmissioni inutili, troppo lungo rallenta il recupero. L'RTT si misura con un solo timer per connessione (granularità G del clock). Si mantengono una media mobile esponenziale SRTT_i = (1-α)SRTT_{i-1} + α·rtt_i con α = 1/8 e la deviazione media MAD_i = (1-ρ)MAD_{i-1} + ρ|rtt_i - SRTT_{i-1}| con ρ = 1/4 (in RFC 6298 RTTVAR, β = 1/4); RTO = SRTT + 4·MAD, con minimo di 1 s. L'algoritmo di Karn ignora le misure dei segmenti ritrasmessi (non si sa a quale trasmissione si riferisce l'ACK) e a ogni timeout consecutivo il valore raddoppia fino a 64 volte T0. Per un RTT gaussiano la deviazione media vale MAD = σ·sqrt(2/π) ≈ 0,797σ.Stima del timeout di ritrasmissione (RTO) →, 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 →).
Formule. ; (con la stima precedente); . Esempio: . Il TCP ha un solo timer di misura alla volta (al più un campione per finestra).
| rtt | SRTT | MAD | RTO | |
|---|---|---|---|---|
| 1 | 30 | 3,75 | 7,50 | 33,75 |
| 2 | 80 | 13,28 | 24,69 | 112,03 |
| 3 | 40 | 16,62 | 25,20 | 117,40 |
| 4 | 130 | 30,79 | 47,24 | 219,76 |
| 5 | 50 | 33,19 | 40,23 | 194,12 |
| 6 | 70 | 37,79 | 39,38 | 195,30 |
| 7 | 90 | 44,32 | 42,58 | 214,65 |
Lo zero iniziale pesa ancora : SRTT è lontano dalla media vera ( ms), MAD è gonfiata, ma il RTO resta sopra i RTT osservati. Serie vera: media , deviazione standard (popolazione) o , deviazione media assoluta ms.
RFC 6298. Primo campione , ; poi , quindi ; , minimo s.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
|---|---|---|---|---|---|---|---|
| SRTT | 30,00 | 36,25 | 36,72 | 48,38 | 48,58 | 51,26 | 56,10 |
| RTTVAR | 15,00 | 23,75 | 18,75 | 37,38 | 28,44 | 26,69 | 29,70 |
| RTO | 90,00 | 131,25 | 111,72 | 197,91 | 162,35 | 158,00 | 174,90 |
Con il minimo di s tutti diventerebbero s.
Karn. I campioni dei segmenti ritrasmessi non si usano; a ogni scadenza finché non arriva un campione valido. Da , , : dopo due scadenze ms; l'ACK ambiguo ( ms) è scartato; un nuovo segmento con rtt ms dà , , ms (raddoppio tolto). Senza Karn: ms (misura dalla prima trasmissione, ms) o ms (dall'ultima).
Errori: al posto di nella deviazione; misurare segmenti ritrasmessi; non togliere il raddoppio; dimenticare il minimo di s.