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:
- RTO troppo piccolo rispetto all'RTT: scatta quando l'ACK sta ancora arrivando, e si ritrasmette senza motivo (timeout spurio), caricando la rete e, come si vede in 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 →, riducendo la finestra senza ragione;
- RTO troppo grande: dopo una perdita vera si resta fermi a lungo, con perdita di throughput.
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 secondi, la granularità del clock, che dipende dal sistema operativo; è 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 e si ferma quando arriva : tra i due eventi passano tick del clock, . Alla trasmissione del pacchetto il timer riparte; poiché è già attivo, i pacchetti e non vengono cronometrati; il timer si ferma con e la seconda misura è .
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 byte, in funzione del bitrate:
| bitrate | tempo di wraparound () |
|---|---|
| Mbit/s | ore |
| Mbit/s | minuti |
| Mbit/s | minuti |
| Mbit/s | minuti |
| Mbit/s | secondi |
| Gbit/s | secondi |
Esempio. A Mbit/s: i numeri di sequenza contano byte, quindi i numeri sono byte bit (il fattore converte in bit); divisi per il bitrate bit/s danno s, e min. Un segmento rimasto in rete più di quel tempo potrebbe essere confuso con uno nuovo con lo stesso numero. (: 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 la misura dell'-esimo campione e la stima dopo campioni, si usa una media mobile esponenziale pesata (EWMA):
Formula (SRTT).
Il campione nuovo pesa , la stima precedente : i campioni vecchi pesano sempre meno (di un fattore a ogni passo), il rumore di singoli campioni è smorzato. Il nome "esponenziale" viene dal fatto che il peso del campione di passi fa è .
Perché: si sostituisce la formula in se stessa. e così via, fino a I pesi dei 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, , è il peso del valore iniziale: con vale , e per questo partire da sottostima così tanto (vedi sotto). Il grafico mostra i pesi con .
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. ms, ms: ms.
Algoritmo di Karn: i segmenti ritrasmessi
Se un segmento è stato ritrasmesso, l'ACK che arriva riscontra la prima, la seconda, ..., o la -esima trasmissione? Non si può sapere, quindi non si può calcolare 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 .
Esempio. ms e ms, cioè ms (si trascura il minimo di 1 s per chiarezza). Il segmento inviato a non è riscontrato entro ms: si ritrasmette e RTO diventa ms. Un ACK arriva a ms: appartiene alla trasmissione originale (RTT ms) o alla ritrasmissione (RTT ms)? Non si sa.
- Se si prendesse : , , ms: un campione sbagliato: SRTT scende da a 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 ( ms) e si ricalcola solo con il primo campione "pulito": per esempio dà , , ms.
Se i timeout continuano, l'RTO vale , con massimo (con ms: 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 è 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).
Nella RFC 6298 la stessa quantità si chiama RTTVAR, con coefficiente ; la differenza è nel punto di partenza (vedi sotto).
Il calcolo di RTO
Una prima regola (RFC 739) imponeva , 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 ms (sotto), la regola dà timeout spurio sul campione () e sul campione (): 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).
Perché il fattore : 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 (ultima sezione), quindi . La probabilità che un RTT superi la media di più di è : il timeout scatta a vuoto in meno di una misura su mille. Con un fattore minore (es. ) i timeout spuri sarebbero circa il .
Il minimo di s (RFC 6298, nel corso ) rende l'RTO molto più lungo della stima per RTT di pochi millisecondi. Nelle slide la formula è scritta in termini di e ; negli esercizi si usa la media dell'RTT del percorso più volte la deviazione media.
Esempio numerico: sette misure
Misure (slide del corso): ms. Nel corso la stima parte da . Con e :
| RTO | ||||
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ||||
| 7 |
Passaggi del primo e del secondo campione: ; . ; (le slide riportano , per arrotondamento).
I valori veri dei sette campioni sono media ms, deviazione standard ms (con al denominatore: ms; le slide riportano ms per l'intera serie, di cui si vedono solo sette righe) e deviazione media assoluta ms. Si nota che partire da sottostima pesantemente: dopo sette campioni ms contro una media di ; la stima converge lentamente (il peso di si smorza solo di a passo: dopo sette passi). Il margine compensa in parte, ma l'RTO calcolato prima di un campione è inferiore al campione successivo due volte (dopo il primo, contro , e dopo il terzo, contro ): in questi casi il timeout scatterebbe a vuoto.
RFC 6298. Alla prima misura si pone e ; poi per ogni campione si aggiorna prima e poi , con . Con le stesse misure:
| SRTT | RTTVAR | RTO | ||
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ||||
| 7 |
Inizializzare con il primo campione evita il lungo "avvio" della stima: dopo sette campioni ms (invece di ), più vicino alla media vera.
Grafico interattivo
Nel grafico (partenza da zero): i punti uniti dalla linea tratteggiata sono gli misurati; la linea in basso è , ancora lontana dalla media di ms (linea tratteggiata orizzontale); la linea in alto è . Il valore vale per il campione , e solo due volte è più piccolo del campione che segue ( e ): 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 sono legate da una costante. Sia 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 e deviazione standard e (gaussiana di media ). 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 → del valore assoluto, cioè l'integrale di per la densità: perché la funzione integranda ( per la densità, entrambe pari) è pari e quindi l'integrale su è uguale a quello su ; su 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 → , per cui , cioè (gli estremi restano e e ): dove (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 .
Proprietà (MAD di una gaussiana). .
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 ms: ms, ms; ms. Con ms (la media): ms, e quindi 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 campioni gaussiani dà .
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: ).
Misura dell'RTT
- Clock con granularità ; una sola misura attiva alla volta (un timer per sessione). Esempio: pacchetto 1 : ; pacchetti 3 e 4 non cronometrati; pacchetto 2 : .
- 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 : Mbit/s min ( s); Mbit/s s.
Media levigata e variabilità (Jacobson)
Media mobile esponenziale (EWMA): il campione di passi fa pesa . MAD = deviazione media assoluta, più economica di .
RTO.
La regola RFC 739, , scade troppo presto con RTT molto variabile: sulla serie ms dà timeout spurio sul campione 2 () e sul 4 ().
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 (con ms: ms).
Esempio: ms; ritrasmissione, RTO ms; ACK a ms ambiguo. Se si prendesse : , , (campione sbagliato). Con Karn si scarta; poi dà , 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 ms, partenza .
| rtt | SRTT | MAD | RTO | |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 4 | ||||
| 7 |
Passaggi: , ; , . Media vera ms. Partire da sottostima: contro ; l'RTO è inferiore al campione successivo ().
RFC 6298. Primo campione : , ; si aggiorna prima RTTVAR (con ), poi SRTT; . Sulla stessa serie (invece di ): più vicino alla media. Esercizio: Esercizio - SRTT, deviazione media e RTO da sette misure di RTT.
MAD di una gaussiana
Con e (): Esempio (collegamenti indipendenti, medie e varianze si sommano): ms , , ms; con RTT ms, ms, quindi s.
Errori tipici: aggiornare SRTT con un segmento ritrasmesso; usare al posto della MAD nella formula dell'RTO; dimenticare il minimo di s.