Modello analitico del tasso di invio di TCP
In questa pagina 6
In questa pagina 6
Il modello analitico del corso risponde a una domanda: dato il tasso di perdita dei pacchetti e il tempo di andata e ritorno RTT, quanti segmenti al secondo invia in media, a regime, un flusso TCP? Il risultato è una formula chiusa, usata negli esercizi per calcolare il throughput di un percorso (Esercizio - throughput TCP di tre flussi con la formula del modello). Si basa sul comportamento di TCP Reno (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 →); i simboli sono quelli di 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 →. Per la fonte si fa riferimento al corso Internet, UniPD.
Ipotesi
- Tempo a round. Il tempo è organizzato in round (rounds) di durata RTT secondi ciascuno. In ogni round il mittente trasmette pacchetti (la finestra di congestione, che varia nel tempo). L'RTT è costante e indipendente da .
- Ritardo degli ACK. è il parametro degli ACK ritardati: un ACK ogni pacchetti, di solito . Se in un round sono trasmessi pacchetti, nel round successivo arrivano ACK; in CA ogni ACK fa crescere la finestra di , quindi la finestra cresce di ogni round (di per round).
- Solo congestion avoidance. TCP opera sempre in CA (lo slow start è trascurato: flusso lungo).
- Perdite. Ogni pacchetto è perso con probabilità . Gli errori in round diversi sono statisticamente indipendenti; nello stesso round sono correlati: se un pacchetto è perso, sono persi anche tutti quelli che lo seguono nel round.
- Pacchetti tutti della stessa dimensione: si contano pacchetti, non byte.
- Traffico pesante (heavy traffic): il mittente ha sempre dati da inviare. In un primo momento la finestra non è limitata dal ricevente ( infinito).
L'analisi si fa in due passi: (1) le perdite sono segnalate solo da dupACK (i timeout sono trascurati); (2) le perdite sono segnalate da tre dupACK e da timeout (importante quando cresce).
Definizione (tasso di invio). Se è il numero di pacchetti trasmessi nell'intervallo , il tasso di invio nell'intervallo è e il tasso di invio a lungo termine (a regime) è
Si noti che è il tasso di invio, non di arrivo: conta anche ciò che viene perso. Per avere il tasso di arrivo (goodput) si dovrebbe moltiplicare per la frazione di pacchetti non persi, , che per piccolo è quasi .
Passo 1: perdite segnalate solo da tre dupACK
I cicli TDP
Si guarda la finestra quando le perdite sono rilevate da tre dupACK: a ogni evento la finestra viene dimezzata. L'evoluzione è a dente di sega: si chiama TDP (triple duplicate period) il periodo tra due dimezzamenti consecutivi. Dopo il dimezzamento, la finestra riparte da e cresce di 1 ogni round fino a una nuova perdita.
Per il -esimo TDP si definiscono:
- : la durata del TDP, in secondi;
- : la finestra alla fine del TDP, in pacchetti;
- : il numero di pacchetti inviati nel TDP.
Poiché dipende da ( è una catena di Markov con "ricompense" ), la sequenza è un processo di rinnovo con ricompensa (renewal reward process). Per la teoria di questi processi il tasso medio è il rapporto tra ricompensa media e durata media del ciclo:
Formula (tasso a lungo termine).
Perché: dopo cicli sono stati inviati pacchetti in un tempo . Dividendo numeratore e denominatore per , , e per la legge dei grandi numeriSe X₁, X₂, ... sono i.i.d. con media μ, la media campionaria X̄ₙ = (X₁ + ... + Xₙ)/n converge a μ: in probabilità (legge debole, dimostrata con Chebyshev se la varianza è finita: P(|X̄ₙ − μ| > ε) ≤ σ²/(nε²)) e quasi certamente (legge forte). Metodo Monte Carlo: ∫ g = E[g(U)] si stima con la media di g(U₁), ..., g(Uₙ) per uniformi indipendenti.Legge dei grandi numeri e metodo Monte Carlo → le due medie campionarie tendono a e per , da cui il rapporto dei valori medi.
Basta quindi studiare le statistiche di un solo TDP: e .
La geometria di un TDP
Nel -esimo TDP:
- è la posizione del primo pacchetto perso (contando i pacchetti inviati da inizio TDP, partendo da 1);
- è il round in cui avviene la perdita, il round semi-ultimo; il round successivo, il -esimo, è l'ultimo, in cui si inviano pacchetti;
- dopo il pacchetto perso il mittente non lo sa ancora: invia altri pacchetti prima di accorgersi della perdita.
Relazione tra le finestre. La finestra cresce di 1 ogni round per round, partendo da ; poiché è la finestra del round semi-ultimo,
Esempio (dalla figura del corso). , , round: la finestra vale e ✓.
Pacchetti inviati. Il pacchetto perso è il numero ; dopo di esso partono altri pacchetti prima che la perdita sia rilevata. (Infatti se il pacchetto perso è il -esimo del round semi-ultimo, i precedenti sono riscontrati e permettono di inviare pacchetti nell'ultimo round; più i pacchetti del round semi-ultimo successivi a quello perso: in tutto .) Quindi
Primo calcolo di : la posizione del primo errore
Gli errori sono indipendenti con probabilità per pacchetto: la posizione del primo errore è geometrica, (è la distribuzione geometricaGeo(p) è il numero della prova in cui arriva il primo successo in prove indipendenti: P(X = n) = (1−p)^(n−1) p per n ≥ 1, P(X > n) = (1−p)^n (lunga attesa), media 1/p, varianza (1−p)/p², ed è senza memoria.Distribuzione geometrica →: pacchetti riusciti, ciascuno con probabilità , e il -esimo perso) e il suo valore medioIl 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 →, ponendo , Passaggi: si distribuisce ; nella seconda somma si pone , cioè ; sottraendo termine a termine ciò che resta è perché . L'ultima è la serie 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 → di ragione , che vale . Dalla (2), prendendo il valore atteso:
Formula (primo calcolo).
(In media passano pacchetti prima di un errore: con , pacchetti.)
Secondo calcolo di : la somma sulla finestra
Il numero di pacchetti si può anche contare dalla forma del TDP: durante i primi round la finestra assume i valori , ciascuno per round (la finestra cresce di ogni round), con , cioè valori distinti; poi nell'ultimo round se ne inviano : (Il primo termine è la somma di termini uguali a , cioè ; il secondo è per la somma dei primi numeri naturali (SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →), con , quindi .) Dalla (1), , quindi dove i termini in si sono raccolti: .
Esempio (stessa figura). , , : pacchetti, più ; direttamente: ✓.
Si assume che e siano indipendenti e stazionari (, ): allora, poiché , Il numero di pacchetti dell'ultimo round si assume uniforme su , da cui (l'appendice dell'articolo mostra che è una buona approssimazione).
Valore medio di . Dalla (1) con la stazionarietà: , cioè
L'equazione per
Si uguagliano i due risultati per , (3) e (5), con , la (6) e (si noti che ): dove si è sviluppato il prodotto, , e si è portato tutto a sinistra ( cambia il coefficiente di in ). Moltiplicando per : È un'equazione di secondo grado con positivo e termine noto negativo: ha una radice positiva e una negativa, e la finestra media è la positiva, . Dividendo per dentro e fuori dalla radice ():
Formula (finestra media).
Esempio. , : pacchetti (l'approssimazione dà una stima un po' alta, perché trascura il termine costante).
Con la (6) e per : (per , : da formula esatta, contro ).
La durata e la formula della radice quadrata
La durata del TDP è il numero di round per la durata di un round; round numerati da a , quindi
Formula (durata media).
Il tasso di invio, solo con TD, è dunque Per il numeratore è dominato da (anche è trascurabile): . Portando sotto la radice: . Si ottiene la formula della radice quadrata:
Formula (radice quadrata).
Per il coefficiente è , cioè ; per è : (si è usato ).
Esempio. , ms, : segmenti/s. Dimezzare l'RTT raddoppia ; ridurre di un fattore moltiplica per . Con la (7) dà seg/s, mentre la formula esatta senza arrotondare () dà : per grande la radice quadrata sovrastima.
Passo 2: anche i timeout
Non tutte le perdite sono rilevate da tre dupACK: se la finestra è piccola non ci sono abbastanza pacchetti dopo quello perso per generare tre dupACK, e scatta un timeout. Al timeout e si ritrasmette il primo pacchetto non riscontrato; se scade ancora un timeout subito dopo il precedente, il timer raddoppia (e continua a raddoppiare fino a ), dove è la durata del primo timeout.
Il ciclo di trasmissione (non più il singolo TDP) si divide in due parti: una sequenza di TDP (ciascuno già analizzato) e un sottociclo di timeout. Il ciclo è un processo di rinnovo con ricompensa:
- pacchetti inviati, con i pacchetti inviati nel sottociclo di timeout;
- secondi, con la durata del sottociclo di timeout.
Allora , con e . Chiamando e dividendo per :
Formula (tasso con timeout, forma generale).
è la probabilità che una indicazione di perdita alla fine di un TDP sia un timeout: in un ciclo ci sono eventi TD e un solo timeout, quindi è geometrica con parametro . Restano da calcolare , , ; e sono già noti.
La probabilità
Sia la finestra nel round semi-ultimo. TCP può inviare pacchetti; i primi arrivano, il -esimo è il primo perso (e tutti i seguenti nel round lo sono). I pacchetti riscontrati permettono di inviare pacchetti nell'ultimo round, e ogni pacchetto di questo che arriva produce un dupACK. Si ha TD se i dupACK sono almeno 3, timeout altrimenti. Due probabilità:
- : probabilità che i primi pacchetti del round semi-ultimo siano corretti (e il -esimo no), dato che il round contiene un errore (Probabilità condizionataLa probabilità di A sapendo che si è verificato B è P(A ∣ B) = P(A ∩ B) / P(B), con P(B) > 0; è una nuova misura di probabilità, e da essa seguono la regola del prodotto e la regola della catena.Probabilità condizionata →): il numeratore è la probabilità di « riusciti poi un perso»; il denominatore è la probabilità che ci sia almeno un errore in pacchetti (complementare di «tutti corretti»), cioè la somma di per , e fa sì che le sommino a ;
- : probabilità che i primi pacchetti dell'ultimo round siano corretti avendone inviati , cioè per e per .
Si ha timeout se (non possono arrivare 3 dupACK) oppure se ma meno di dei pacchetti dell'ultimo round arrivano, quindi Svolgendo le somme geometriche (con ) si ottiene la forma chiusa (verificata numericamente: per , entrambe danno ):
Formula (probabilità di timeout).
Il limite : per Mac-LaurinTabella degli sviluppi di Mac-Laurin da sapere a memoria (e^x, sin, cos, log(1+x), (1+x)^alpha, arctan, sinh, cosh, tan) e regole per combinarli: algebra degli o piccoli, prodotti, funzioni composte, quanti termini tenere.Sviluppi di Mac-Laurin notevoli → , quindi , e la parentesi quadra tende a : resta .
Esempio. , : (contro l'approssimazione ). Con è (con finestra di 3 pacchetti o meno un solo pacchetto perso non può produrre tre dupACK: sempre timeout). Poiché non è costante si usa .
Pacchetti e durata nel sottociclo di timeout
. In ogni timeout si ritrasmette un pacchetto; se è perso (probabilità ) segue un altro timeout. Il numero di pacchetti del sottociclo è quindi geometrico, , e
. La durata di timeout consecutivi è, con il raddoppio () fino a : (per è , somma di una progressione geometrica; dal settimo in poi ogni timeout in più dura ). I valori sono volte . Mediando su : Un modo più breve per ritrovarlo: il -esimo timeout del sottociclo avviene solo se i precedenti sono falliti, con probabilità , e dura . Quindi e la parentesi finale è la serie geometrica . Moltiplicando e dividendo per , il numeratore diventa ; svolgendo il prodotto ogni coefficiente intermedio si dimezza (, , ... ) e si ottiene proprio . (Controllo con : la somma numerica dà , come .)
Il modello completo
Sostituendo in (8), con :
Formula (modello completo, "full model").
Il modello approssimato
Per piccolo, con e , il numeratore è , il tempo del TDP è . Nel secondo membro del denominatore (i coefficienti sono le somme parziali di quelli di : ) si tiene il polinomio fino a . Moltiplicando numeratore e denominatore per il numeratore diventa , e resta come termine dei timeout; si ottiene:
Formula (modello approssimato).
Il fattore è quello usato nelle slide del corso e negli esercizi. Nel lavoro originale compare invece : le due forme approssimano lo stesso polinomio e per piccolo danno risultati quasi uguali (per l'esempio sotto contro seg/s). Se la finestra non può superare (limite del ricevitore o del buffer) il tasso non supera :
Formula (tetto della finestra).
Per avere il throughput in bit/s si moltiplica per la dimensione del payload in bit.
Quanto bene approssimano le formule
Confronto numerico per , ms, s (seg/s; calcolato con Python):
| radice quadrata (7) | solo TD (esatta) | completo (9) | approssimato (10) | |
|---|---|---|---|---|
Per le formule coincidono entro circa il (: contro ). Per la radice quadrata sovrastima di molto, perché ignora i timeout: con è contro del modello completo. L'approssimato (10) resta entro circa il dal completo per ( contro a ) e coincide quasi del tutto a .
Grafico interattivo
Sul grafico (scala logaritmica in , ms, s, ): la radice quadrata ha pendenza in scala log-log, e si stacca dalle altre per ; l'approssimato (tratteggio) e il completo restano vicini.
Per visualizzare la forma di un TDP, il grafico seguente mostra la finestra round per round dell'esempio della figura del corso (, , ): , cioè ; subito dopo la perdita la finestra viene dimezzata.
Grafico interattivo: Finestra W round per round in un TDP: parte da W/2 = 3, cresce di 1 ogni b = 2 round e arriva a W_i = 7 al round X_i = 10
Esempio completo
Percorso con ms, , s (nel corso : 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) →), segmenti, payload TCP di byte e probabilità di perdita complessiva del percorso (con la formula sui collegamenti attraversati, dove l'errore sul collegamento radio domina). Passi:
- Tetto. seg/s (al massimo segmenti per ogni RTT di ms): molto più alto di quello che segue, quindi non è il limite.
- Primo termine del denominatore. Con , , la cui radice è . s (RTT in secondi).
- Termine dei timeout. Qui , con radice e triplo : (è la stima di : circa il delle perdite finisce in timeout); ; il prodotto con è s.
- Tasso. seg/s, minore del tetto: è il valore valido.
- Throughput in bit/s. kbit/s (il payload va espresso in bit: byte bit per segmento).
Per confronto, con gli stessi dati: la radice quadrata (7) darebbe seg/s, una sovrastima enorme perché ignora i timeout; il modello completo (9) dà , , numeratore , denominatore , quindi seg/s ( in meno dell'approssimato). Con il fattore dell'articolo originale si avrebbe seg/s.
L'applicazione a più flussi che condividono un collegamento è in Esercizio - throughput TCP di tre flussi con la formula del modello.
Limiti del modello
- Vale per il comportamento stazionario di un flusso lungo in congestion avoidance: lo slow start (flussi brevi) non è modellato.
- L'RTT è supposto costante e indipendente dalla finestra: in realtà le code lo allungano.
- Le perdite sono supposte con probabilità fissa e indipendente tra round, con correlazione nel round (disciplina drop-tail): le perdite reali sono più irregolari.
- Alcune approssimazioni ( e indipendenti, uniforme, ) valgono per piccolo.
- Le varianti come SACK recuperano meglio da perdite multiple e hanno throughput maggiore di quello previsto per Reno.
Versione ripasso
Scopo. Dato e RTT, quanti segmenti al secondo invia in media, a regime, un flusso TCP Reno (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 →; simboli di 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 →). Tasso di invio (non di arrivo): [pacchetti/s].
Ipotesi
- Tempo a round di durata RTT (costante, indipendente da ); in ogni round si inviano pacchetti.
- = ACK ritardato (un ACK ogni pacchetti, di solito ): in CA la finestra cresce di ogni round.
- Solo congestion avoidance (niente slow start); pacchetti uguali; traffico pesante; infinito.
- Perdite con probabilità : indipendenti tra round, correlate nel round (perso uno, persi tutti i successivi del round).
- Due passi: (1) perdite segnalate solo da dupACK; (2) anche timeout.
Passo 1: solo tre dupACK
- TDP = periodo tra due dimezzamenti consecutivi (dente di sega). Per il TDP : durata, finestra finale, pacchetti inviati. Processo di rinnovo con ricompensa:
- = posizione del primo pacchetto perso; = round semi-ultimo (poi l'ultimo round con pacchetti).
- (1). Esempio: , , : finestre , .
- (2): dopo il pacchetto perso partono altri pacchetti.
- Primo calcolo. geometrica, , (con : pacchetti), quindi
- Secondo calcolo (somma sulla forma del TDP): (4); esempio pacchetti più . Con stazionarietà e uniforme ():
- Equazione per : , radice positiva Esempio , : (l'approssimazione dà , un po' alta); .
- Durata: . Con solo TD
- Formula della radice quadrata: Esempio , RTT ms, : seg/s. RTT dimezzato doppio; diviso per . Con : radice , formula esatta solo TD (la radice sovrastima).
Passo 2: anche i timeout
- Con finestra piccola mancano i dupACK: timeout, , si ritrasmette; timer raddoppiato a ogni timeout consecutivo fino a .
- Ciclo = TDP + sottociclo di timeout: pacchetti, secondi. Con : = probabilità che la perdita a fine TDP sia un timeout ( geometrica di parametro ).
- Probabilità di timeout (TD se almeno 3 dupACK nell'ultimo round): Esempio , : (contro ). Con : . Si usa .
- Pacchetti nel sottociclo: , .
- Durata di timeout: per (), per (). Quindi Controllo : .
- Modello completo:
- Modello approssimato (usato nel corso): Nell'originale compare : stessi risultati per piccolo ( contro seg/s nell'esempio sotto).
- Tetto: . Per i bit/s si moltiplica per il payload in bit.
Confronto (, RTT ms, s, seg/s)
| radice | solo TD | completo | approssimato | |
|---|---|---|---|---|
Per le formule coincidono entro circa il ; per la radice quadrata sovrastima perché ignora i timeout.
Esempio completo
- Tetto: seg/s, non è il limite.
- s.
- ; ; prodotto s.
- seg/s.
- kbit/s.
Confronti: radice quadrata seg/s (enorme sovrastima); completo (, ); con : . Più flussi su un collegamento: Esercizio - throughput TCP di tre flussi con la formula del modello.
Limiti
Flusso lungo in CA (niente slow start); RTT costante; fissa e indipendente tra round; approssimazioni (, indipendenti, uniforme, ) valide per piccolo; SACK fa meglio di Reno.
Errori tipici: usare la radice quadrata per alto; dimenticare di moltiplicare per il payload in bit; scordare il tetto ; mettere in ms con RTT in s; confondere (ACK ritardato) con dupACK.