Salta al contenuto
Note per Studenti Esercizio - SRTT, deviazione media e RTO da sette misure di RTT

Esercizio - SRTT, deviazione media e RTO da sette misure di RTT

In questa pagina 7

Testo (esempio del corso). Sette misure successive di RTT, rtti=30, 80, 40, 130, 50, 70, 90\text{rtt}_i=30,\ 80,\ 40,\ 130,\ 50,\ 70,\ 90 ms. Si calcolano la stima levigata SRTTi\text{SRTT}_i e la deviazione media MADi\text{MAD}_i con le medie mobili esponenziali di Jacobson, α=1/8\alpha=1/8 e ρ=1/4\rho=1/4, partendo da valori iniziali nulli; poi il timeout di ritrasmissione RTO\text{RTO}. 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 ii-esima (rtti\text{rtt}_i = tempo tra la trasmissione di un segmento e il ricevimento del suo ACK): SRTTi=(1−α) SRTTi−1+α rtti,MADi=(1−ρ) MADi−1+ρ ∣rtti−SRTTi−1∣,\text{SRTT}_i=(1-\alpha)\,\text{SRTT}_{i-1}+\alpha\,\text{rtt}_i,\qquad \text{MAD}_i=(1-\rho)\,\text{MAD}_{i-1}+\rho\,\left|\text{rtt}_i-\text{SRTT}_{i-1}\right|, RTOi=SRTTi+4 MADi\text{RTO}_i=\text{SRTT}_i+4\,\text{MAD}_i (RTOi\text{RTO}_i è il timeout da usare per i segmenti trasmessi dopo la misura ii). Nota l'ordine: la deviazione si aggiorna con la stima levigata precedente SRTTi−1\text{SRTT}_{i-1}.

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 α=1/8\alpha=1/8, ρ=1/4\rho=1/4 sono potenze di due, quindi si fanno con scorrimenti di bit (dividere per 2k2^k è uno scorrimento a destra di kk 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 44 non è casuale: per RTT gaussiani MAD=0,797 σ\text{MAD}=0{,}797\,\sigma, quindi 4 MAD≃3,19 σ4\,\text{MAD}\simeq3{,}19\,\sigma e un campione supera SRTT+4 MAD\text{SRTT}+4\,\text{MAD} con probabilità 1−Φ(3,19)≈0,00071-\Phi(3{,}19)\approx0{,}0007 (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 RTO=2⋅RTT\text{RTO}=2\cdot\text{RTT} 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 GG del sistema operativo. Esempio delle slide: parte il segmento 11 e il timer si avvia; torna l'ACK 22 dopo 33 tick, misura rtt1=3G\text{rtt}_1=3G e il timer si ferma. Si manda il segmento 22, il timer riparte; i segmenti 33 e 44 non vengono misurati perché il timer è già attivo; torna l'ACK 55 dopo 22 tick, rtt2=2G\text{rtt}_2=2G. 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 (SRTT0=MAD0=0\text{SRTT}_0=\text{MAD}_0=0)

ii rtti\text{rtt}_i SRTTi\text{SRTT}_i MADi\text{MAD}_i RTOi=SRTTi+4MADi\text{RTO}_i=\text{SRTT}_i+4\text{MAD}_i
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: SRTT1=78⋅0+18⋅30=3,75\text{SRTT}_1=\tfrac78\cdot0+\tfrac18\cdot30=3{,}75; MAD1=34⋅0+14⋅∣30−0∣=7,5\text{MAD}_1=\tfrac34\cdot0+\tfrac14\cdot|30-0|=7{,}5. Seconda riga: MAD2=34⋅7,5+14⋅∣80−3,75∣=5,625+19,0625=24,69\text{MAD}_2=\tfrac34\cdot7{,}5+\tfrac14\cdot|80-3{,}75|=5{,}625+19{,}0625=24{,}69; SRTT2=78⋅3,75+18⋅80=3,28+10=13,28\text{SRTT}_2=\tfrac78\cdot3{,}75+\tfrac18\cdot80=3{,}28+10=13{,}28.

Che cosa mostra la tabella.

  • La stima levigata sale molto lentamente: dopo sette misure SRTT7=44,3\text{SRTT}_7=44{,}3 ms, ma la media vera dei sette RTT è 7070 ms. È l'effetto dell'inizializzazione a 00: la memoria dello zero iniziale pesa ancora (7/8)7≈39%(7/8)^7\approx39\%. Il perché: srotolando la formula, SRTT7=α∑k=06(1−α)k rtt7−k+(1−α)7SRTT0\text{SRTT}_7=\alpha\sum_{k=0}^{6}(1-\alpha)^k\,\text{rtt}_{7-k}+(1-\alpha)^7\text{SRTT}_0; i pesi dei sette campioni sommano a 1−(7/8)7=0,6071-(7/8)^7=0{,}607 (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, 0,3930{,}393, va al valore iniziale nullo. Per questo SRTT7=0,607⋅73,0=44,3\text{SRTT}_7=0{,}607\cdot73{,}0=44{,}3, dove 73,073{,}0 è la media dei sette campioni pesata con i pesi normalizzati (più peso ai recenti), invece dei 7070 ms della media semplice.
  • La deviazione MAD\text{MAD}, invece, è alta e sovrastimata (42,642{,}6 ms): la differenza ∣rtti−SRTTi−1∣|\text{rtt}_i-\text{SRTT}_{i-1}| misura la distanza da una stima ancora troppo bassa. Per questo, nei primi campioni, il timeout è comunque ragionevole (maggiore dei RTT osservati: 219,8219{,}8 ms contro 130130 ms al massimo) pur con SRTT\text{SRTT} errato.
  • Confronto con i valori "veri" dei sette campioni: media 7070 ms, deviazione standard 31,631{,}6 ms (popolazione) o 34,234{,}2 ms (campionaria), deviazione media assoluta 25,725{,}7 ms. La slide riporta "avg =70=70 ms, stdev =36,64=36{,}64 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: 24,6824{,}68, 25,1925{,}19, 39,3739{,}37 per 24,6924{,}69, 25,2025{,}20, 39,3839{,}38.)

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 è SRTT\text{SRTT} e quella in alto è RTO\text{RTO}; RTOi\text{RTO}_i vale per il campione i+1i+1 ed è più piccolo del campione che segue solo due volte (33,75<8033{,}75<80 e 117,4<130117{,}4<130).

Con l'inizializzazione dell'RFC 6298

La procedura standard, che evita il difetto dello zero iniziale:

  • prima misura RR: SRTT=R\text{SRTT}=R, RTTVAR=R/2\text{RTTVAR}=R/2;
  • misure successive: RTTVAR←34RTTVAR+14∣SRTT−R′∣\text{RTTVAR}\leftarrow\tfrac34\text{RTTVAR}+\tfrac14|\text{SRTT}-R'|, poi SRTT←78SRTT+18R′\text{SRTT}\leftarrow\tfrac78\text{SRTT}+\tfrac18R' (stessi pesi ρ=1/4\rho=1/4 e α=1/8\alpha=1/8, stesso ordine);
  • RTO=SRTT+max⁡{G, 4 RTTVAR}\text{RTO}=\text{SRTT}+\max\{G,\,4\,\text{RTTVAR}\}, e comunque non meno di 11 s.
ii rtti\text{rtt}_i SRTTi\text{SRTT}_i RTTVARi\text{RTTVAR}_i RTOi\text{RTO}_i (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 SRTT7=56,1\text{SRTT}_7=56{,}1 ms è più vicina alla media (7070 ms) di quella con zero iniziale (44,344{,}3 ms), e i timeout sono più bassi (174,9174{,}9 contro 214,7214{,}7 ms) perché non c'è la deviazione gonfiata. Con il minimo di 11 s previsto dall'RFC tutti i valori in tabella (sono tutti sotto 11 s) verrebbero portati a RTO=1\text{RTO}=1 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 nn-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 SRTT\text{SRTT} e la deviazione. (2) Alla scadenza del timer, l'RTO\text{RTO} 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 RTO=SRTT+4 RTTVAR\text{RTO}=\text{SRTT}+4\,\text{RTTVAR}.

Esempio. Si parta dopo le prime cinque misure con l'inizializzazione RFC 6298: SRTT=48,58\text{SRTT}=48{,}58 ms, RTTVAR=28,44\text{RTTVAR}=28{,}44 ms, RTO=162,35\text{RTO}=162{,}35 ms (senza minimo di 11 s per leggere i numeri).

evento azione RTO\text{RTO} in uso (ms)
segmento 6 inviato e perso timer di 162,35162{,}35 ms 162,35
1ª scadenza: ritrasmissione, anche questa persa RTO×2\text{RTO}\times2 324,70
2ª scadenza: seconda ritrasmissione RTO×2\text{RTO}\times2 649,40
arriva l'ACK, 5555 ms dopo l'ultima trasmissione ambiguo: campione scartato, nessun aggiornamento 649,40
segmento 7 nuovo, ACK dopo 9090 ms campione valido: RTTVAR=31,69\text{RTTVAR}=31{,}69, SRTT=53,76\text{SRTT}=53{,}76; si toglie il raddoppio 53,76+4⋅31,69=180,5053{,}76+4\cdot31{,}69=180{,}50

Che cosa sarebbe successo senza Karn: se il campione fosse misurato dalla prima trasmissione, sarebbe 162,35+324,7+55=542,05162{,}35+324{,}7+55=542{,}05 ms: SRTT=110,27\text{SRTT}=110{,}27, RTTVAR=144,70\text{RTTVAR}=144{,}70, RTO=689,1\text{RTO}=689{,}1 ms, cioè un timeout quasi quattro volte troppo grande per una rete con RTT di circa 5050 ms. Se invece fosse misurato dall'ultima trasmissione (5555 ms) ma l'ACK fosse in realtà della prima (arrivata in ritardo), SRTT=49,4\text{SRTT}=49{,}4 e RTO=141,1\text{RTO}=141{,}1 ms: più basso del RTT reale, con rischio di scadenze premature e ritrasmissioni inutili.

Con il minimo di 11 s i timeout successivi alla perdita sarebbero 11 s, 22 s, 44 s (l'RFC fissa un massimo di almeno 6060 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 RTOi=RTTi−1+4 MADi−1\text{RTO}_i=\text{RTT}_{i-1}+4\,\text{MAD}_{i-1} (con il RTT medio al posto di SRTT\text{SRTT}); qui si usa SRTTi+4 MADi\text{SRTT}_i+4\,\text{MAD}_i, 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 SRTTi\text{SRTT}_i già aggiornato invece di SRTTi−1\text{SRTT}_{i-1}.
  • 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 11 s (e che con valori iniziali nulli le prime stime sono molto basse).

Versione ripasso

Dati. Misure 30,80,40,130,50,70,9030,80,40,130,50,70,90 ms; α=1/8\alpha=1/8, ρ=1/4\rho=1/4; 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. SRTTi=78SRTTi−1+18rtti\text{SRTT}_i=\tfrac78\text{SRTT}_{i-1}+\tfrac18\text{rtt}_i; MADi=34MADi−1+14∣rtti−SRTTi−1∣\text{MAD}_i=\tfrac34\text{MAD}_{i-1}+\tfrac14|\text{rtt}_i-\text{SRTT}_{i-1}| (con la stima precedente); RTOi=SRTTi+4MADi\text{RTO}_i=\text{SRTT}_i+4\text{MAD}_i. Esempio: MAD2=34⋅7,5+14⋅∣80−3,75∣=24,69\text{MAD}_2=\tfrac34\cdot7{,}5+\tfrac14\cdot|80-3{,}75|=24{,}69. Il TCP ha un solo timer di misura alla volta (al più un campione per finestra).

ii 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 (7/8)7≈39%(7/8)^7\approx39\%: SRTT è lontano dalla media vera (7070 ms), MAD è gonfiata, ma il RTO resta sopra i RTT osservati. Serie vera: media 7070, deviazione standard 31,631{,}6 (popolazione) o 34,234{,}2, deviazione media assoluta 25,725{,}7 ms.

RFC 6298. Primo campione SRTT=R\text{SRTT}=R, RTTVAR=R/2\text{RTTVAR}=R/2; poi RTTVAR←34RTTVAR+14∣SRTT−R′∣\text{RTTVAR}\leftarrow\tfrac34\text{RTTVAR}+\tfrac14|\text{SRTT}-R'|, quindi SRTT\text{SRTT}; RTO=SRTT+max⁡{G,4RTTVAR}\text{RTO}=\text{SRTT}+\max\{G,4\text{RTTVAR}\}, minimo 11 s.

ii 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 11 s tutti diventerebbero 11 s.

Karn. I campioni dei segmenti ritrasmessi non si usano; a ogni scadenza RTO×2\text{RTO}\times2 finché non arriva un campione valido. Da SRTT=48,58\text{SRTT}=48{,}58, RTTVAR=28,44\text{RTTVAR}=28{,}44, RTO=162,35\text{RTO}=162{,}35: dopo due scadenze 324,70→649,40324{,}70\to649{,}40 ms; l'ACK ambiguo (5555 ms) è scartato; un nuovo segmento con rtt 9090 ms dà RTTVAR=31,69\text{RTTVAR}=31{,}69, SRTT=53,76\text{SRTT}=53{,}76, RTO=180,50\text{RTO}=180{,}50 ms (raddoppio tolto). Senza Karn: 689,1689{,}1 ms (misura dalla prima trasmissione, 542,05542{,}05 ms) o 141,1141{,}1 ms (dall'ultima).

Errori: SRTTi\text{SRTT}_i al posto di SRTTi−1\text{SRTT}_{i-1} nella deviazione; misurare segmenti ritrasmessi; non togliere il raddoppio; dimenticare il minimo di 11 s.

Lezioni in cui compare

Teoria collegata