Salta al contenuto
Note per Studenti Stima del timeout di ritrasmissione (RTO)

Stima del timeout di ritrasmissione (RTO)

In questa pagina 6
In questa pagina 5

Perché serve una stima

TCP usa un timer di ritrasmissione, il retransmission timeout (RTO), per garantire la consegna dei dati quando manca il feedback del ricevente (gli ACK): se l'ACK di un segmento non arriva entro RTO, il segmento è considerato perso e viene ritrasmesso (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 →). Il valore giusto dipende dalla rete e cambia nel tempo, quindi non si può fissare una volta per tutte:

Per questo l'RTO si stima in linea (online) dalle misure di tempo di andata e ritorno (RTT) dei segmenti. Si definiscono due variabili (come in RFC 6298):

  • SRTT (smoothed RTT): la stima "levigata" dell'RTT;
  • RTTVAR (variazione dell'RTT): una stima della sua variabilità, nelle slide del corso chiamata MAD (mean absolute deviation, deviazione media assoluta).

Come si misura l'RTT

Un orologio di sistema parte all'avvio del sistema e scatta ogni GG secondi, la granularità del clock, che dipende dal sistema operativo; GG è il tempo di risoluzione con cui TCP stima l'RTO. C'è una sola misura di RTT attiva alla volta (un timer per sessione, non per pacchetto), e il timer di misura si accende e si spegne secondo l'andamento delle trasmissioni.

Esempio (dalle slide). Il timer parte alla trasmissione del pacchetto 11 e si ferma quando arriva ACK 2\text{ACK}\,2: tra i due eventi passano 33 tick del clock, RTT1=3G\text{RTT}_1=3G. Alla trasmissione del pacchetto 22 il timer riparte; poiché è già attivo, i pacchetti 33 e 44 non vengono cronometrati; il timer si ferma con ACK 5\text{ACK}\,5 e la seconda misura è RTT2=2G\text{RTT}_2=2G.

Per misure più accurate si usa l'opzione timestamp di TCP: il mittente scrive in ogni segmento l'istante corrente nell'intestazione, e il ricevente lo riporta (echo) negli ACK; così ogni ACK porta con sé il proprio istante di partenza. Il timestamp serve anche a distinguere pacchetti con lo stesso numero di sequenza quando i 32 bit del numero di sequenza si esauriscono e ricominciano (wraparound): tempo di giro dei 2322^{32} byte, in funzione del bitrate:

bitrate tempo di wraparound (232⋅8/C2^{32}\cdot8/C)
1,51{,}5 Mbit/s 6,46{,}4 ore
1010 Mbit/s 5757 minuti
4545 Mbit/s 1313 minuti
100100 Mbit/s 66 minuti
622622 Mbit/s 5555 secondi
1,21{,}2 Gbit/s ≃28\simeq28 secondi

Esempio. A 1010 Mbit/s: i numeri di sequenza contano byte, quindi i 2322^{32} numeri sono 2322^{32} byte =232⋅8=2^{32}\cdot8 bit (il fattore 88 converte in bit); divisi per il bitrate C=107C=10^7 bit/s danno 232⋅8/107=34362^{32}\cdot8/10^7=3436 s, e 3436/60=57,33436/60=57{,}3 min. Un segmento rimasto in rete più di quel tempo potrebbe essere confuso con uno nuovo con lo stesso numero. (232=4 294 967 2962^{32}=4\,294\,967\,296: Sistemi di numerazione posizionaliNotazione posizionale in base b; conversioni tra base 10, 2, 8 e 16 per interi (divisioni successive) e per parti frazionarie (moltiplicazioni successive); numeri periodici in binario.Sistemi di numerazione posizionali →.)

La media levigata (algoritmo di Jacobson)

L'algoritmo originale è di Jacobson (1988), poi sostituito dalle RFC 2988 e 6298. Con rtti\text{rtt}_i la misura dell'ii-esimo campione e SRTTi\text{SRTT}_i la stima dopo ii campioni, si usa una media mobile esponenziale pesata (EWMA):

Formula (SRTT). SRTTi=(1−α) SRTTi−1+α⋅rtti,α=18.\text{SRTT}_i=(1-\alpha)\,\text{SRTT}_{i-1}+\alpha\cdot\text{rtt}_i,\qquad\alpha=\frac18.

Il campione nuovo pesa 1/81/8, la stima precedente 7/87/8: i campioni vecchi pesano sempre meno (di un fattore 7/87/8 a ogni passo), il rumore di singoli campioni è smorzato. Il nome "esponenziale" viene dal fatto che il peso del campione di kk passi fa è α(1−α)k\alpha(1-\alpha)^k.

Perché: si sostituisce la formula in se stessa. SRTTi=α rtti+(1−α)[α rtti−1+(1−α)SRTTi−2]=α rtti+α(1−α) rtti−1+(1−α)2SRTTi−2\text{SRTT}_i=\alpha\,\text{rtt}_i+(1-\alpha)\bigl[\alpha\,\text{rtt}_{i-1}+(1-\alpha)\text{SRTT}_{i-2}\bigr]=\alpha\,\text{rtt}_i+\alpha(1-\alpha)\,\text{rtt}_{i-1}+(1-\alpha)^2\text{SRTT}_{i-2} e così via, fino a SRTTi=α∑k=0i−1(1−α)k rtti−k+(1−α)i SRTT0.\text{SRTT}_i=\alpha\sum_{k=0}^{i-1}(1-\alpha)^k\,\text{rtt}_{i-k}+(1-\alpha)^i\,\text{SRTT}_0. I pesi dei campioni sommano a α 1−(1−α)i1−(1−α)=1−(1−α)i\alpha\,\frac{1-(1-\alpha)^i}{1-(1-\alpha)}=1-(1-\alpha)^i (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, (1−α)i(1-\alpha)^i, è il peso del valore iniziale: con i=7i=7 vale (7/8)7=0,393(7/8)^7=0{,}393, e per questo partire da SRTT0=0\text{SRTT}_0=0 sottostima così tanto (vedi sotto). Il grafico mostra i pesi α(1−α)k\alpha(1-\alpha)^k con α=1/8\alpha=1/8.

Grafico interattivo: Peso del campione di k passi fa nella media esponenziale SRTT: α(1−α)^k con α = 1/8 (0,125; 0,109; 0,096; ...)

Esempio. SRTTi−1=80\text{SRTT}_{i-1}=80 ms, rtti=120\text{rtt}_i=120 ms: SRTTi=78⋅80+18⋅120=70+15=85\text{SRTT}_i=\tfrac78\cdot80+\tfrac18\cdot120=70+15=85 ms.

Algoritmo di Karn: i segmenti ritrasmessi

Se un segmento è stato ritrasmesso, l'ACK che arriva riscontra la prima, la seconda, ..., o la nn-esima trasmissione? Non si può sapere, quindi non si può calcolare rtti\text{rtt}_i in modo corretto.

Regola (algoritmo di Karn). Si ignora la misura di RTT di un segmento che è stato ritrasmesso (non si aggiorna SRTT). Per il pacchetto successivo si usa l'ultimo RTO calcolato, e si riprende la stima solo dopo una trasmissione riuscita senza ritrasmissione. Inoltre a ogni timeout consecutivo l'RTO raddoppia (backoff esponenziale) fino a un massimo di 64 T064\,T_0.

Esempio. SRTT=80\text{SRTT}=80 ms e MAD=10\text{MAD}=10 ms, cioè RTO=80+4⋅10=120\text{RTO}=80+4\cdot10=120 ms (si trascura il minimo di 1 s per chiarezza). Il segmento inviato a t=0t=0 non è riscontrato entro 120120 ms: si ritrasmette e RTO diventa 240240 ms. Un ACK arriva a t=130t=130 ms: appartiene alla trasmissione originale (RTT 130130 ms) o alla ritrasmissione (RTT 1010 ms)? Non si sa.

  • Se si prendesse rtt=10\text{rtt}=10: SRTT=78⋅80+18⋅10=71,25\text{SRTT}=\tfrac78\cdot80+\tfrac18\cdot10=71{,}25, MAD=0,75⋅10+0,25⋅∣10−80∣=25\text{MAD}=0{,}75\cdot10+0{,}25\cdot|10-80|=25, RTO=71,25+100=171,25\text{RTO}=71{,}25+100=171{,}25 ms: un campione sbagliato: SRTT scende da 8080 a 7171 ms proprio quando la rete si è rivelata più lenta, e MAD cresce in modo spurio.
  • Con Karn si scarta il campione, l'RTO resta quello raddoppiato (240240 ms) e si ricalcola solo con il primo campione "pulito": per esempio rtt=90\text{rtt}=90 dà SRTT=81,25\text{SRTT}=81{,}25, MAD=0,75⋅10+0,25⋅10=10\text{MAD}=0{,}75\cdot10+0{,}25\cdot10=10, RTO=121,25\text{RTO}=121{,}25 ms.

Se i timeout continuano, l'RTO vale T0,2T0,4T0,…T_0,2T_0,4T_0,\dots, con massimo 64 T064\,T_0 (con T0=120T_0=120 ms: 120,240,480,960,1920,3840,7680120,240,480,960,1920,3840,7680 ms); la durata complessiva dei timeout consecutivi entra nel modello del tasso di invio (Modello analitico del tasso di invio di TCPIl modello analitico del corso calcola il tasso di invio a regime B (segmenti al secondo) di un flusso TCP Reno in funzione della probabilità di perdita p, dell'RTT, del parametro di ACK ritardato b e del timeout T0. Il tempo è diviso in round di durata RTT; il ciclo della finestra tra due perdite segnalate da tre dupACK (TDP) ha media E[W] = (2-3b)/(3b) + sqrt(((3b-2)/(3b))^2 + 8(1-p)/(3bp)) e il tasso è B = E[Y]/E[A] (pacchetti inviati diviso durata di un TDP). Per p piccolo si ottiene la formula della radice quadrata B = (1/RTT) sqrt(3/(2bp)) (circa 1,22/(RTT sqrt p) per b = 1 e 0,87/(RTT sqrt p) per b = 2). Con i timeout si aggiungono la probabilità Q che una perdita finisca in timeout, E[R] = 1/(1-p) pacchetti e E[Z^TO] = T0 f(p)/(1-p) secondi di attesa: B = (E[Y] + Q E[R])/(E[A] + Q E[Z^TO]). Con la finestra massima Wmax il tasso non supera Wmax/RTT.Modello analitico del tasso di invio di TCP →).

La variabilità: deviazione media

Per decidere quanto margine lasciare sopra la media serve una misura della dispersione. La vera deviazione standard σ=1N∑n(RTTn−RTTˉ)2\sigma=\sqrt{\tfrac1N\sum_n(\text{RTT}_n-\bar{\text{RTT}})^2} è costosa da calcolare in linea (radici, somme di quadrati). Si usa invece la deviazione media assoluta (mean absolute difference, MAD), economica da calcolare, ancora con una media mobile:

Formula (MAD). MADi=(1−ρ) MADi−1+ρ ∣rtti−SRTTi−1∣,ρ=14.\text{MAD}_i=(1-\rho)\,\text{MAD}_{i-1}+\rho\,\big|\text{rtt}_i-\text{SRTT}_{i-1}\big|,\qquad\rho=\frac14.

Nella RFC 6298 la stessa quantità si chiama RTTVAR, con coefficiente β=1/4\beta=1/4; la differenza è nel punto di partenza (vedi sotto).

Il calcolo di RTO

Una prima regola (RFC 739) imponeva RTOi=2⋅RTTi−1\text{RTO}_i=2\cdot\text{RTT}_{i-1}, cioè concedeva due tempi di andata e ritorno prima di scadere. Se l'RTT ha una varianza alta (rete carica), questo metodo scade troppo presto.

Esempio. Con la serie di RTT 30,80,40,130,50,70,9030,80,40,130,50,70,90 ms (sotto), la regola 2⋅RTTi−12\cdot\text{RTT}_{i-1} dà timeout spurio sul campione 22 (80>2⋅30=6080>2\cdot30=60) e sul campione 44 (130>2⋅40=80130>2\cdot40=80): in entrambi i casi il nuovo RTT supera il doppio del precedente, quindi l'ACK arriva dopo la scadenza del timer.

La soluzione di Jacobson è usare la media più un multiplo della deviazione media:

Formula (RTO). RTOi=SRTTi+4⋅MADi,T0=max⁡{RTO, 1 s}.\text{RTO}_i=\text{SRTT}_i+4\cdot\text{MAD}_i,\qquad T_0=\max\{\text{RTO},\,1\text{ s}\}.

Perché il fattore 44: se gli RTT sono gaussiani (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) →) vale MAD≃0,797 σ\text{MAD}\simeq0{,}797\,\sigma (ultima sezione), quindi SRTT+4 MAD≃SRTT+3,19 σ\text{SRTT}+4\,\text{MAD}\simeq\text{SRTT}+3{,}19\,\sigma. La probabilità che un RTT superi la media di più di 3,19σ3{,}19\sigma è 1−Φ(3,19)≈0,00071-\Phi(3{,}19)\approx0{,}0007: il timeout scatta a vuoto in meno di una misura su mille. Con un fattore minore (es. 2 MAD≃1,6σ2\,\text{MAD}\simeq1{,}6\sigma) i timeout spuri sarebbero circa il 5,5%5{,}5\%.

Il minimo di 11 s (RFC 6298, nel corso T0=max⁡{RTO,1 s}T_0=\max\{\text{RTO},1\text{ s}\}) rende l'RTO molto più lungo della stima per RTT di pochi millisecondi. Nelle slide la formula è scritta in termini di RTTi−1\text{RTT}_{i-1} e MADi−1\text{MAD}_{i-1}; negli esercizi si usa la media dell'RTT del percorso più 44 volte la deviazione media.

Esempio numerico: sette misure

Misure (slide del corso): 30,80,40,130,50,70,9030,80,40,130,50,70,90 ms. Nel corso la stima parte da SRTT0=MAD0=0\text{SRTT}_0=\text{MAD}_0=0. Con α=1/8\alpha=1/8 e ρ=1/4\rho=1/4:

ii rtti\text{rtt}_i SRTTi\text{SRTT}_i MADi\text{MAD}_i RTO =SRTT+4 MAD=\text{SRTT}+4\,\text{MAD}
1 3030 3,753{,}75 7,57{,}5 33,7533{,}75
2 8080 13,2813{,}28 24,6924{,}69 112,03112{,}03
3 4040 16,6216{,}62 25,2025{,}20 117,40117{,}40
4 130130 30,7930{,}79 47,2447{,}24 219,76219{,}76
5 5050 33,1933{,}19 40,2340{,}23 194,12194{,}12
6 7070 37,7937{,}79 39,3839{,}38 195,30195{,}30
7 9090 44,3244{,}32 42,5842{,}58 214,65214{,}65

Passaggi del primo e del secondo campione: SRTT1=78⋅0+18⋅30=3,75\text{SRTT}_1=\tfrac78\cdot0+\tfrac18\cdot30=3{,}75; MAD1=0,75⋅0+0,25⋅∣30−0∣=7,5\text{MAD}_1=0{,}75\cdot0+0{,}25\cdot|30-0|=7{,}5. SRTT2=78⋅3,75+18⋅80=3,28+10=13,28\text{SRTT}_2=\tfrac78\cdot3{,}75+\tfrac18\cdot80=3{,}28+10=13{,}28; MAD2=0,75⋅7,5+0,25⋅∣80−3,75∣=5,625+19,06=24,69\text{MAD}_2=0{,}75\cdot7{,}5+0{,}25\cdot|80-3{,}75|=5{,}625+19{,}06=24{,}69 (le slide riportano 24,6824{,}68, per arrotondamento).

I valori veri dei sette campioni sono media =70=70 ms, deviazione standard σ=7000/7=31,6\sigma=\sqrt{7000/7}=31{,}6 ms (con N−1N-1 al denominatore: 34,234{,}2 ms; le slide riportano 36,6436{,}64 ms per l'intera serie, di cui si vedono solo sette righe) e deviazione media assoluta 1N∑n∣rttn−70∣=25,7\frac1N\sum_n|\text{rtt}_n-70|=25{,}7 ms. Si nota che partire da 00 sottostima pesantemente: dopo sette campioni SRTT=44,3\text{SRTT}=44{,}3 ms contro una media di 7070; la stima converge lentamente (il peso di SRTT0=0\text{SRTT}_0=0 si smorza solo di 7/87/8 a passo: (7/8)7=39%(7/8)^7=39\% dopo sette passi). Il margine 4 MAD4\,\text{MAD} compensa in parte, ma l'RTO calcolato prima di un campione è inferiore al campione successivo due volte (dopo il primo, 33,7533{,}75 contro 8080, e dopo il terzo, 117,4117{,}4 contro 130130): in questi casi il timeout scatterebbe a vuoto.

RFC 6298. Alla prima misura RR si pone SRTT=R\text{SRTT}=R e RTTVAR=R/2\text{RTTVAR}=R/2; poi per ogni campione si aggiorna prima RTTVAR=(1−β)RTTVAR+β∣SRTT−R∣\text{RTTVAR}=(1-\beta)\text{RTTVAR}+\beta|\text{SRTT}-R| e poi SRTT=(1−α)SRTT+αR\text{SRTT}=(1-\alpha)\text{SRTT}+\alpha R, con RTO=SRTT+max⁡{G, 4 RTTVAR}\text{RTO}=\text{SRTT}+\max\{G,\,4\,\text{RTTVAR}\}. Con le stesse misure:

ii rtti\text{rtt}_i SRTT RTTVAR RTO
1 3030 30,0030{,}00 15,0015{,}00 90,0090{,}00
2 8080 36,2536{,}25 23,7523{,}75 131,25131{,}25
3 4040 36,7236{,}72 18,7518{,}75 111,72111{,}72
4 130130 48,3848{,}38 37,3837{,}38 197,91197{,}91
5 5050 48,5848{,}58 28,4428{,}44 162,35162{,}35
6 7070 51,2651{,}26 26,6926{,}69 158,00158{,}00
7 9090 56,1056{,}10 29,7029{,}70 174,90174{,}90

Inizializzare con il primo campione evita il lungo "avvio" della stima: dopo sette campioni SRTT=56,1\text{SRTT}=56{,}1 ms (invece di 44,344{,}3), più vicino alla media vera.

Grafico interattivo

Nel grafico (partenza da zero): i punti uniti dalla linea tratteggiata sono gli rtt\text{rtt} misurati; la linea in basso è SRTT\text{SRTT}, ancora lontana dalla media di 7070 ms (linea tratteggiata orizzontale); la linea in alto è RTO=SRTT+4 MAD\text{RTO}=\text{SRTT}+4\,\text{MAD}. Il valore RTOi\text{RTO}_i vale per il campione i+1i+1, e solo due volte è più piccolo del campione che segue (33,75<8033{,}75<80 e 117,4<130117{,}4<130): sono i due casi di timeout a vuoto.

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

Deviazione media e deviazione standard per variabili gaussiane

Se gli RTT sono gaussiani (ipotesi usata negli esercizi), MAD e deviazione standard σ\sigma sono legate da una costante. Sia XX una gaussianaN(μ, σ²) 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) → con media μ\mu e deviazione standard σ\sigma e Y=X−μY=X-\mu (gaussiana di media 00). La MAD è il valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso → E∣Y∣E|Y| del valore assoluto, cioè l'integrale di ∣y∣|y| per la densità: MAD=∫−∞+∞∣y∣ 1σ2πe−y2/(2σ2)dy=2∫0+∞y 1σ2πe−y2/(2σ2)dy,\text{MAD}=\int_{-\infty}^{+\infty}|y|\,\frac1{\sigma\sqrt{2\pi}}e^{-y^2/(2\sigma^2)}dy=2\int_0^{+\infty}y\,\frac1{\sigma\sqrt{2\pi}}e^{-y^2/(2\sigma^2)}dy, perché la funzione integranda (∣y∣|y| per la densità, entrambe pari) è pari e quindi l'integrale su (−∞,0)(-\infty,0) è uguale a quello su (0,∞)(0,\infty); su y>0y>0 si toglie il modulo. Con la sostituzioneSe nell'integranda c'è g(f(x))·f'(x), la sostituzione y = f(x), dy = f'(x)dx trasforma l'integrale in ∫g(y)dy = G(y) + k, poi si torna a x: G(f(x)) + k. Negli integrali definiti cambiano anche gli estremi (da c, d a f(c), f(d)). Si può usare anche al contrario, con x = f⁻¹(y). È il primo metodo a cui pensare; dà la tabella degli integrali "immediati per sostituzione".Integrazione per sostituzione → u=y2/(2σ2)u=y^2/(2\sigma^2), per cui du=2y2σ2dy=y dy/σ2du=\frac{2y}{2\sigma^2}dy=y\,dy/\sigma^2, cioè y dy=σ2duy\,dy=\sigma^2du (gli estremi restano 0→00\to0 e +∞→+∞+\infty\to+\infty e e−y2/(2σ2)=e−ue^{-y^2/(2\sigma^2)}=e^{-u}): MAD=2σ2σ2π∫0+∞e−udu=2σ2π⋅1=σ2π,\text{MAD}=\frac{2\sigma^2}{\sigma\sqrt{2\pi}}\int_0^{+\infty}e^{-u}du=\frac{2\sigma}{\sqrt{2\pi}}\cdot1=\sigma\sqrt{\frac2\pi}, dove ∫0+∞e−udu=[−e−u]0+∞=0−(−1)=1\int_0^{+\infty}e^{-u}du=[-e^{-u}]_0^{+\infty}=0-(-1)=1 (Integrali immediatiTabella degli integrali immediati, ottenuti leggendo al contrario le derivate delle funzioni elementari: potenze, 1/x, esponenziali, seno e coseno, tangente, arcoseno, arcotangente, funzioni iperboliche e loro inverse. Per gli integrali non ci sono regole come per le derivate, solo metodi: linearità, sostituzione, per parti.Integrali immediati →) e 22π=42π=2π\frac{2}{\sqrt{2\pi}}=\sqrt{\frac4{2\pi}}=\sqrt{\frac2\pi}.

Proprietà (MAD di una gaussiana). MAD=σ2/π≈0,797 σ\text{MAD}=\sigma\sqrt{2/\pi}\approx0{,}797\,\sigma.

Esempio. Un percorso formato da collegamenti con RTT indipendenti: il RTT medio totale è la somma dei medi e la varianza è la somma delle varianze (Somma di variabili aleatorie indipendentiSe X e Y sono indipendenti, la legge di Z = X + Y è la convoluzione: p_Z(n) = Σ_k p_X(k) p_Y(n − k) nel discreto, f_Z(z) = ∫ f_X(z − y) f_Y(y) dy nel continuo. Casi notevoli: Bin(n,p) + Bin(m,p) = Bin(n+m,p), Poi(λ) + Poi(μ) = Poi(λ+μ), Geo + Geo con densità (n−1)p²(1−p)^(n−2), Exp(λ) + Exp(λ) = Γ(2,λ), gaussiane indipendenti sommano medie e varianze.Somma di variabili aleatorie indipendenti →: la somma di gaussiane indipendenti è ancora gaussiana). Con σn=0,1; 2; 1; 0,5\sigma_n=0{,}1;\,2;\,1;\,0{,}5 ms: σtot2=0,01+4+1+0,25=5,26\sigma^2_{\text{tot}}=0{,}01+4+1+0{,}25=5{,}26 ms2^2, σ=2,293\sigma=2{,}293 ms; MAD=0,7979⋅2,293=1,829\text{MAD}=0{,}7979\cdot2{,}293=1{,}829 ms. Con RTT=27\text{RTT}=27 ms (la media): RTO=SRTT+4 MAD=27+4⋅1,829=34,3\text{RTO}=\text{SRTT}+4\,\text{MAD}=27+4\cdot1{,}829=34{,}3 ms, e quindi T0=max⁡{34,3 ms,1 s}=1T_0=\max\{34{,}3\text{ ms},1\text{ s}\}=1 s: è il valore che si usa nel modello del tasso di invio (Modello analitico del tasso di invio di TCPIl modello analitico del corso calcola il tasso di invio a regime B (segmenti al secondo) di un flusso TCP Reno in funzione della probabilità di perdita p, dell'RTT, del parametro di ACK ritardato b e del timeout T0. Il tempo è diviso in round di durata RTT; il ciclo della finestra tra due perdite segnalate da tre dupACK (TDP) ha media E[W] = (2-3b)/(3b) + sqrt(((3b-2)/(3b))^2 + 8(1-p)/(3bp)) e il tasso è B = E[Y]/E[A] (pacchetti inviati diviso durata di un TDP). Per p piccolo si ottiene la formula della radice quadrata B = (1/RTT) sqrt(3/(2bp)) (circa 1,22/(RTT sqrt p) per b = 1 e 0,87/(RTT sqrt p) per b = 2). Con i timeout si aggiungono la probabilità Q che una perdita finisca in timeout, E[R] = 1/(1-p) pacchetti e E[Z^TO] = T0 f(p)/(1-p) secondi di attesa: B = (E[Y] + Q E[R])/(E[A] + Q E[Z^TO]). Con la finestra massima Wmax il tasso non supera Wmax/RTT.Modello analitico del tasso di invio di TCP →). La verifica numerica con 400 000400\,000 campioni gaussiani dà E∣Y∣=0,7985 σE|Y|=0{,}7985\,\sigma.

Versione ripasso

Scopo. Se l'ACK non arriva entro RTO il segmento è considerato perso e ritrasmesso (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 →). RTO troppo piccolo: timeout spurio, ritrasmissioni inutili e finestra ridotta senza motivo (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 →); troppo grande: dopo una perdita vera si resta fermi. Si stima online con due variabili: SRTT (RTT levigato) e RTTVAR/MAD (variabilità; RFC 6298: β=1/4\beta=1/4).

Misura dell'RTT

  • Clock con granularità GG; una sola misura attiva alla volta (un timer per sessione). Esempio: pacchetto 1 →ACK 2\to\text{ACK}\,2: RTT1=3G\text{RTT}_1=3G; pacchetti 3 e 4 non cronometrati; pacchetto 2 →ACK 5\to\text{ACK}\,5: RTT2=2G\text{RTT}_2=2G.
  • Timestamp nell'intestazione, riportato negli ACK (echo): misure più accurate e distinzione dei pacchetti dopo il wraparound dei 32 bit del numero di sequenza. Tempo 232⋅8/C2^{32}\cdot8/C: 1010 Mbit/s 5757 min (34363436 s); 622622 Mbit/s 5555 s.

Media levigata e variabilità (Jacobson)

SRTTi=(1−α)SRTTi−1+α rtti,α=18.\text{SRTT}_i=(1-\alpha)\text{SRTT}_{i-1}+\alpha\,\text{rtt}_i,\quad\alpha=\tfrac18. MADi=(1−ρ)MADi−1+ρ ∣rtti−SRTTi−1∣,ρ=14.\text{MAD}_i=(1-\rho)\text{MAD}_{i-1}+\rho\,|\text{rtt}_i-\text{SRTT}_{i-1}|,\quad\rho=\tfrac14.

Media mobile esponenziale (EWMA): il campione di kk passi fa pesa α(1−α)k\alpha(1-\alpha)^k. MAD = deviazione media assoluta, più economica di σ\sigma.

RTO. RTOi=SRTTi+4⋅MADi,T0=max⁡{RTO,1 s}.\text{RTO}_i=\text{SRTT}_i+4\cdot\text{MAD}_i,\qquad T_0=\max\{\text{RTO},1\text{ s}\}.

La regola RFC 739, RTOi=2 RTTi−1\text{RTO}_i=2\,\text{RTT}_{i-1}, scade troppo presto con RTT molto variabile: sulla serie 30,80,40,130,…30,80,40,130,\dots ms dà timeout spurio sul campione 2 (80>6080>60) e sul 4 (130>80130>80).

Algoritmo di Karn

Dopo una ritrasmissione l'ACK non dice a quale trasmissione si riferisce: la misura è ambigua.

Regola. Si ignora l'RTT dei segmenti ritrasmessi (SRTT non aggiornato); per il successivo si usa l'ultimo RTO; a ogni timeout consecutivo l'RTO raddoppia fino a 64 T064\,T_0 (con T0=120T_0=120 ms: 120,240,…,7680120,240,\dots,7680 ms).

Esempio: RTO=80+4⋅10=120\text{RTO}=80+4\cdot10=120 ms; ritrasmissione, RTO =240=240 ms; ACK a 130130 ms ambiguo. Se si prendesse rtt=10\text{rtt}=10: SRTT=71,25\text{SRTT}=71{,}25, MAD=25\text{MAD}=25, RTO=171,25\text{RTO}=171{,}25 (campione sbagliato). Con Karn si scarta; poi rtt=90\text{rtt}=90 dà SRTT=81,25\text{SRTT}=81{,}25, RTO=121,25\text{RTO}=121{,}25 ms. I timeout consecutivi entrano nel Modello analitico del tasso di invio di TCPIl modello analitico del corso calcola il tasso di invio a regime B (segmenti al secondo) di un flusso TCP Reno in funzione della probabilità di perdita p, dell'RTT, del parametro di ACK ritardato b e del timeout T0. Il tempo è diviso in round di durata RTT; il ciclo della finestra tra due perdite segnalate da tre dupACK (TDP) ha media E[W] = (2-3b)/(3b) + sqrt(((3b-2)/(3b))^2 + 8(1-p)/(3bp)) e il tasso è B = E[Y]/E[A] (pacchetti inviati diviso durata di un TDP). Per p piccolo si ottiene la formula della radice quadrata B = (1/RTT) sqrt(3/(2bp)) (circa 1,22/(RTT sqrt p) per b = 1 e 0,87/(RTT sqrt p) per b = 2). Con i timeout si aggiungono la probabilità Q che una perdita finisca in timeout, E[R] = 1/(1-p) pacchetti e E[Z^TO] = T0 f(p)/(1-p) secondi di attesa: B = (E[Y] + Q E[R])/(E[A] + Q E[Z^TO]). Con la finestra massima Wmax il tasso non supera Wmax/RTT.Modello analitico del tasso di invio di TCP →.

Esempio a sette misure

rtt =30,80,40,130,50,70,90=30,80,40,130,50,70,90 ms, partenza SRTT0=MAD0=0\text{SRTT}_0=\text{MAD}_0=0.

ii rtt SRTT MAD RTO
1 3030 3,753{,}75 7,57{,}5 33,7533{,}75
2 8080 13,2813{,}28 24,6924{,}69 112,03112{,}03
4 130130 30,7930{,}79 47,2447{,}24 219,76219{,}76
7 9090 44,3244{,}32 42,5842{,}58 214,65214{,}65

Passaggi: SRTT1=3,75\text{SRTT}_1=3{,}75, MAD1=7,5\text{MAD}_1=7{,}5; SRTT2=78⋅3,75+18⋅80=13,28\text{SRTT}_2=\tfrac78\cdot3{,}75+\tfrac18\cdot80=13{,}28, MAD2=0,75⋅7,5+0,25⋅76,25=24,69\text{MAD}_2=0{,}75\cdot7{,}5+0{,}25\cdot76{,}25=24{,}69. Media vera 7070 ms. Partire da 00 sottostima: SRTT7=44,3\text{SRTT}_7=44{,}3 contro 7070; l'RTO è inferiore al campione successivo (33,75<8033{,}75<80).

RFC 6298. Primo campione RR: SRTT=R\text{SRTT}=R, RTTVAR=R/2\text{RTTVAR}=R/2; si aggiorna prima RTTVAR (con β\beta), poi SRTT; RTO=SRTT+max⁡{G,4 RTTVAR}\text{RTO}=\text{SRTT}+\max\{G,4\,\text{RTTVAR}\}. Sulla stessa serie SRTT7=56,1\text{SRTT}_7=56{,}1 (invece di 44,344{,}3): più vicino alla media. Esercizio: Esercizio - SRTT, deviazione media e RTO da sette misure di RTT.

MAD di una gaussiana

Con Y=X−μY=X-\mu e u=y2/(2σ2)u=y^2/(2\sigma^2) (y dy=σ2duy\,dy=\sigma^2du): MAD=E∣Y∣=2∫0∞ye−y2/(2σ2)σ2πdy=2σ2π∫0∞e−udu=σ2π≈0,797 σ.\text{MAD}=E|Y|=2\int_0^{\infty}y\frac{e^{-y^2/(2\sigma^2)}}{\sigma\sqrt{2\pi}}dy=\frac{2\sigma}{\sqrt{2\pi}}\int_0^\infty e^{-u}du=\sigma\sqrt{\frac2\pi}\approx0{,}797\,\sigma. Esempio (collegamenti indipendenti, medie e varianze si sommano): σn=0,1;2;1;0,5\sigma_n=0{,}1;2;1;0{,}5 ms ⇒σ2=5,26\Rightarrow\sigma^2=5{,}26, σ=2,293\sigma=2{,}293, MAD=1,829\text{MAD}=1{,}829 ms; con RTT =27=27 ms, RTO=27+4⋅1,829=34,3\text{RTO}=27+4\cdot1{,}829=34{,}3 ms, quindi T0=max⁡{34,3 ms,1 s}=1T_0=\max\{34{,}3\text{ ms},1\text{ s}\}=1 s.

Errori tipici: aggiornare SRTT con un segmento ritrasmesso; usare σ\sigma al posto della MAD nella formula dell'RTO; dimenticare il minimo di 11 s.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata