Salta al contenuto
Note per Studenti Modello analitico del tasso di invio di TCP

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 pp 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 WW pacchetti (la finestra di congestione, che varia nel tempo). L'RTT è costante e indipendente da WW.
  • Ritardo degli ACK. bb è il parametro degli ACK ritardati: un ACK ogni bb pacchetti, di solito b=2b=2. Se in un round sono trasmessi WW pacchetti, nel round successivo arrivano W/bW/b ACK; in CA ogni ACK fa crescere la finestra di 1/W1/W, quindi la finestra cresce di 11 ogni bb round (di 1/b1/b per round).
  • Solo congestion avoidance. TCP opera sempre in CA (lo slow start è trascurato: flusso lungo).
  • Perdite. Ogni pacchetto è perso con probabilità pp. 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 (Wmax⁡W_{\max} infinito).

L'analisi si fa in due passi: (1) le perdite sono segnalate solo da K=3K=3 dupACK (i timeout sono trascurati); (2) le perdite sono segnalate da tre dupACK e da timeout (importante quando pp cresce).

Definizione (tasso di invio). Se NtN_t è il numero di pacchetti trasmessi nell'intervallo [0,t][0,t], il tasso di invio nell'intervallo è Nt/tN_t/t e il tasso di invio a lungo termine (a regime) è B=lim⁡t→∞Ntt[pacchetti/s].B=\lim_{t\to\infty}\frac{N_t}{t}\quad[\text{pacchetti/s}].

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, 1−p1-p, che per pp piccolo è quasi 11.

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 Wi−1/2W_{i-1}/2 e cresce di 1 ogni bb round fino a una nuova perdita.

Per il ii-esimo TDP si definiscono:

  • AiA_i: la durata del TDP, in secondi;
  • WiW_i: la finestra alla fine del TDP, in pacchetti;
  • YiY_i: il numero di pacchetti inviati nel TDP.

Poiché WiW_i dipende da Wi−1W_{i-1} (WiW_i è una catena di Markov con "ricompense" YiY_i), la sequenza (Yi,Ai)(Y_i,A_i) è 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). B=E[Y]E[A].B=\frac{E[Y]}{E[A]}.

Perché: dopo nn cicli sono stati inviati N=∑i=1nYiN=\sum_{i=1}^nY_i pacchetti in un tempo t=∑i=1nAit=\sum_{i=1}^nA_i. Dividendo numeratore e denominatore per nn, Nt=1n∑Yi1n∑Ai\frac Nt=\frac{\frac1n\sum Y_i}{\frac1n\sum A_i}, 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[Y]E[Y] e E[A]E[A] per n→∞n\to\infty, da cui il rapporto dei valori medi.

Basta quindi studiare le statistiche di un solo TDP: E[Y]E[Y] e E[A]E[A].

La geometria di un TDP

Nel ii-esimo TDP:

  • αi\alpha_i è la posizione del primo pacchetto perso (contando i pacchetti inviati da inizio TDP, partendo da 1);
  • XiX_i è il round in cui avviene la perdita, il round semi-ultimo; il round successivo, il Xi+1X_i+1-esimo, è l'ultimo, in cui si inviano βi\beta_i 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 bb round per XiX_i round, partendo da Wi−1/2W_{i-1}/2; poiché è la finestra del round semi-ultimo, Wi=Wi−12+Xib−1.(1)W_i=\frac{W_{i-1}}{2}+\frac{X_i}{b}-1.\tag{1}

Esempio (dalla figura del corso). Wi−1/2=3W_{i-1}/2=3, b=2b=2, Xi=10X_i=10 round: la finestra vale 3,3,4,4,5,5,6,6,7,73,3,4,4,5,5,6,6,7,7 e Wi=3+10/2−1=7W_i=3+10/2-1=7 ✓.

Pacchetti inviati. Il pacchetto perso è il numero αi\alpha_i; dopo di esso partono altri Wi−1W_i-1 pacchetti prima che la perdita sia rilevata. (Infatti se il pacchetto perso è il kk-esimo del round semi-ultimo, i k−1k-1 precedenti sono riscontrati e permettono di inviare βi=k−1\beta_i=k-1 pacchetti nell'ultimo round; più i Wi−kW_i-k pacchetti del round semi-ultimo successivi a quello perso: in tutto (Wi−k)+(k−1)=Wi−1(W_i-k)+(k-1)=W_i-1.) Quindi Yi=αi+Wi−1.(2)Y_i=\alpha_i+W_i-1.\tag{2}

Primo calcolo di E[Y]E[Y]: la posizione del primo errore

Gli errori sono indipendenti con probabilità pp per pacchetto: la posizione del primo errore è geometrica, P[α=k]=(1−p)k−1p,k=1,2,3,…P[\alpha=k]=(1-p)^{k-1}p,\qquad k=1,2,3,\dots (è 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 →: k−1k-1 pacchetti riusciti, ciascuno con probabilità 1−p1-p, e il kk-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 q=1−pq=1-p, E[α]=∑k=1∞qk−1(1−q) k=∑k=1∞k qk−1−∑k=1∞k qk=∑k=0∞qk=11−q=1p.E[\alpha]=\sum_{k=1}^{\infty}q^{k-1}(1-q)\,k=\sum_{k=1}^\infty k\,q^{k-1}-\sum_{k=1}^\infty k\,q^{k}=\sum_{k=0}^\infty q^{k}=\frac1{1-q}=\frac1p. Passaggi: si distribuisce (1−q)(1-q); nella seconda somma si pone j=k+1j=k+1, cioè ∑k≥1k qk=∑j≥2(j−1) qj−1\sum_{k\ge1}k\,q^k=\sum_{j\ge2}(j-1)\,q^{j-1}; sottraendo termine a termine ciò che resta è ∑j≥1qj−1=∑k≥0qk\sum_{j\ge1}q^{j-1}=\sum_{k\ge0}q^k perché k qk−1−(k−1)qk−1=qk−1k\,q^{k-1}-(k-1)q^{k-1}=q^{k-1}. 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 q<1q<1, che vale 11−q\frac1{1-q}. Dalla (2), prendendo il valore atteso:

Formula (primo calcolo). E[Y]=E[α]−1+E[W]=1−pp+E[W].(3)E[Y]=E[\alpha]-1+E[W]=\frac{1-p}{p}+E[W].\tag{3}

(In media passano 1/p1/p pacchetti prima di un errore: con p=0,01p=0{,}01, 100100 pacchetti.)

Secondo calcolo di E[Y]E[Y]: la somma sulla finestra

Il numero di pacchetti si può anche contare dalla forma del TDP: durante i primi XiX_i round la finestra assume i valori Wi−1/2+kW_{i-1}/2+k, ciascuno per bb round (la finestra cresce di 11 ogni bb round), con k=0,…,Xi/b−1k=0,\dots,X_i/b-1, cioè Xi/bX_i/b valori distinti; poi nell'ultimo round se ne inviano βi\beta_i: Yi=∑k=0Xi/b−1(Wi−12+k)b+βi=Wi−12 Xi+Xi2(Xib−1)+βi.Y_i=\sum_{k=0}^{X_i/b-1}\left(\frac{W_{i-1}}{2}+k\right)b+\beta_i=\frac{W_{i-1}}{2}\,X_i+\frac{X_i}{2}\left(\frac{X_i}{b}-1\right)+\beta_i. (Il primo termine è la somma di Xi/bX_i/b termini uguali a b Wi−1/2b\,W_{i-1}/2, cioè Xib⋅b⋅Wi−12=Wi−12Xi\frac{X_i}{b}\cdot b\cdot\frac{W_{i-1}}2=\frac{W_{i-1}}2X_i; il secondo è bb per la somma dei primi numeri naturali 0+1+⋯+N0+1+\dots+N (SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →), N(N+1)2\tfrac{N(N+1)}2 con N=Xi/b−1N=X_i/b-1, quindi b⋅12(Xib−1)Xib=Xi2(Xib−1)b\cdot\frac12\bigl(\frac{X_i}b-1\bigr)\frac{X_i}b=\frac{X_i}{2}\bigl(\frac{X_i}b-1\bigr).) Dalla (1), Xi/b−1=Wi−Wi−1/2X_i/b-1=W_i-W_{i-1}/2, quindi Yi=Wi−12Xi+Xi2(Wi−Wi−12)+βi=Xi2(Wi−12+Wi)+βi,(4)Y_i=\frac{W_{i-1}}2X_i+\frac{X_i}2\Bigl(W_i-\frac{W_{i-1}}2\Bigr)+\beta_i=\frac{X_i}{2}\left(\frac{W_{i-1}}{2}+W_i\right)+\beta_i,\tag{4} dove i termini in Wi−1W_{i-1} si sono raccolti: Wi−12Xi−Xi2Wi−12=Xi2⋅Wi−12\frac{W_{i-1}}2X_i-\frac{X_i}2\frac{W_{i-1}}2=\frac{X_i}2\cdot\frac{W_{i-1}}2.

Esempio (stessa figura). Wi−1/2=3W_{i-1}/2=3, Wi=7W_i=7, Xi=10X_i=10: 102(3+7)=50\tfrac{10}{2}(3+7)=50 pacchetti, più βi\beta_i; direttamente: 2⋅(3+4+5+6+7)=502\cdot(3+4+5+6+7)=50 ✓.

Si assume che XiX_i e WiW_i siano indipendenti e stazionari (E[Xi]=E[X]E[X_i]=E[X], E[Wi]=E[W]E[W_i]=E[W]): allora, poiché E[Wi−1]/2+E[Wi]=12E[W]+E[W]=32E[W]E[W_{i-1}]/2+E[W_i]=\frac12E[W]+E[W]=\frac32E[W], E[Y]=E[X]2⋅32E[W]+E[β].(5)E[Y]=\frac{E[X]}{2}\cdot\frac32E[W]+E[\beta].\tag{5} Il numero di pacchetti dell'ultimo round βi\beta_i si assume uniforme su {0,…,Wi−1}\{0,\dots,W_i-1\}, da cui E[β]=E[W]/2E[\beta]=E[W]/2 (l'appendice dell'articolo mostra che è una buona approssimazione).

Valore medio di XX. Dalla (1) con la stazionarietà: E[W]=E[W]/2+E[X]/b−1E[W]=E[W]/2+E[X]/b-1, cioè E[X]=b2E[W]+b.(6)E[X]=\frac b2E[W]+b.\tag{6}

L'equazione per E[W]E[W]

Si uguagliano i due risultati per E[Y]E[Y], (3) e (5), con x=E[W]x=E[W], la (6) e E[β]=x/2E[\beta]=x/2 (si noti che E[X]2⋅32x=(b2x+b)3x4\frac{E[X]}2\cdot\frac32x=\bigl(\frac b2x+b\bigr)\frac{3x}4): 1−pp+x=(b2x+b)3x4+x2 ⟹ 3b8x2+(3b4−12)x−1−pp=0,\frac{1-p}{p}+x=\left(\frac b2x+b\right)\frac{3x}{4}+\frac x2 \ \Longrightarrow\ \frac{3b}{8}x^2+\left(\frac{3b}{4}-\frac12\right)x-\frac{1-p}{p}=0, dove si è sviluppato il prodotto, (b2x+b)3x4=3b8x2+3b4x\bigl(\frac b2x+b\bigr)\frac{3x}4=\frac{3b}8x^2+\frac{3b}4x, e si è portato tutto a sinistra (x−x2=x2x-\frac x2=\frac x2 cambia il coefficiente di xx in 3b4+12−1=3b4−12\frac{3b}4+\frac12-1=\frac{3b}4-\frac12). Moltiplicando per 88: 3b x2+2(3b−2) x−8(1−p)p=0.3b\,x^2+2(3b-2)\,x-\frac{8(1-p)}{p}=0. È un'equazione di secondo grado con a=3ba=3b positivo e termine noto negativo: ha una radice positiva e una negativa, e la finestra media è la positiva, x=−(3b−2)+(3b−2)2+24b(1−p)/p3bx=\frac{-(3b-2)+\sqrt{(3b-2)^2+24b(1-p)/p}}{3b}. Dividendo per 3b3b dentro e fuori dalla radice (24b/(3b)2=8/(3b)24b/(3b)^2=8/(3b)):

Formula (finestra media). E[W]=2−3b3b+(3b−23b)2+8(1−p)3bp → p→0  83bp.E[W]=\frac{2-3b}{3b}+\sqrt{\left(\frac{3b-2}{3b}\right)^2+\frac{8(1-p)}{3bp}}\ \xrightarrow{\,p\to0\,}\ \sqrt{\frac{8}{3bp}}.

Esempio. b=2b=2, p=0,01p=0{,}01: E[W]=−23+49+4⋅0,993⋅0,01=−0,667+0,444+132=10,84E[W]=-\tfrac23+\sqrt{\tfrac49+\tfrac{4\cdot0{,}99}{3\cdot0{,}01}}=-0{,}667+\sqrt{0{,}444+132}=10{,}84 pacchetti (l'approssimazione 8/(3⋅2⋅0,01)=11,55\sqrt{8/(3\cdot2\cdot0{,}01)}=11{,}55 dà una stima un po' alta, perché trascura il termine costante).

Con la (6) e per p→0p\to0: E[X]≃b283bp=b24⋅83bp=2b3pE[X]\simeq\tfrac b2\sqrt{\tfrac8{3bp}}=\sqrt{\tfrac{b^2}4\cdot\tfrac8{3bp}}=\sqrt{\tfrac{2b}{3p}} (per b=2b=2, p=0,01p=0{,}01: E[X]=12,84E[X]=12{,}84 da formula esatta, contro 4/0,03=11,55\sqrt{4/0{,}03}=11{,}55).

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 11 a Xi+1X_i+1, quindi

Formula (durata media). E[A]=(E[X]+1) RTT≃RTT2b3p.E[A]=(E[X]+1)\,\text{RTT}\simeq\text{RTT}\sqrt{\frac{2b}{3p}}.

Il tasso di invio, solo con TD, è dunque B=E[Y]E[A]=1−pp+E[W]RTT(b2E[W]+b+1).B=\frac{E[Y]}{E[A]}=\frac{\frac{1-p}{p}+E[W]}{\text{RTT}\left(\frac b2E[W]+b+1\right)}. Per p→0p\to0 il numeratore è dominato da 1/p1/p (anche E[W]∼1/pE[W]\sim1/\sqrt p è trascurabile): B≃1/pRTT2b/(3p)B\simeq\dfrac{1/p}{\text{RTT}\sqrt{2b/(3p)}}. Portando 1/p=1/p21/p=\sqrt{1/p^2} sotto la radice: 1RTT1/p22b/(3p)=1RTT3p2b p2=1RTT32bp\dfrac{1}{\text{RTT}}\sqrt{\dfrac{1/p^2}{2b/(3p)}}=\dfrac1{\text{RTT}}\sqrt{\dfrac{3p}{2b\,p^2}}=\dfrac1{\text{RTT}}\sqrt{\dfrac3{2bp}}. Si ottiene la formula della radice quadrata:

Formula (radice quadrata). B(p,b,RTT)=1RTT32bp+o ⁣(1p).(7)B(p,b,\text{RTT})=\frac1{\text{RTT}}\sqrt{\frac{3}{2bp}}+o\!\left(\frac1{\sqrt p}\right).\tag{7}

Per b=1b=1 il coefficiente è 3/2=1,22\sqrt{3/2}=1{,}22, cioè B≈1,22/(RTTp)B\approx1{,}22/(\text{RTT}\sqrt p); per b=2b=2 è 3/4=0,87\sqrt{3/4}=0{,}87: B≈0,87/(RTTp)B\approx0{,}87/(\text{RTT}\sqrt p) (si è usato 3/(2bp)=3/(2b)⋅1p\sqrt{3/(2bp)}=\sqrt{3/(2b)}\cdot\frac1{\sqrt p}).

Esempio. b=2b=2, RTT=100\text{RTT}=100 ms, p=10−4p=10^{-4}: B=10,134⋅10−4=10⋅86,6=866B=\frac1{0{,}1}\sqrt{\frac3{4\cdot10^{-4}}}=10\cdot86{,}6=866 segmenti/s. Dimezzare l'RTT raddoppia BB; ridurre pp di un fattore 100100 moltiplica BB per 1010. Con p=10−2p=10^{-2} la (7) dà 86,686{,}6 seg/s, mentre la formula esatta senza arrotondare (E[Y]/E[A]E[Y]/E[A]) dà 79,479{,}4: per pp 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 W=1W=1 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 64 T064\,T_0), dove T0T_0 è la durata del primo timeout.

Il ciclo di trasmissione ii (non più il singolo TDP) si divide in due parti: una sequenza di mim_i TDP (ciascuno già analizzato) e un sottociclo di timeout. Il ciclo è un processo di rinnovo con ricompensa:

  • Mi=∑j=1miYij+RiM_i=\sum_{j=1}^{m_i}Y_{ij}+R_i pacchetti inviati, con RiR_i i pacchetti inviati nel sottociclo di timeout;
  • Si=∑j=1miAij+ZiTOS_i=\sum_{j=1}^{m_i}A_{ij}+Z_i^{TO} secondi, con ZiTOZ_i^{TO} la durata del sottociclo di timeout.

Allora B=E[M]/E[S]B=E[M]/E[S], con E[M]=E[m]E[Y]+E[R]E[M]=E[m]E[Y]+E[R] e E[S]=E[m]E[A]+E[ZTO]E[S]=E[m]E[A]+E[Z^{TO}]. Chiamando Q=1/E[m]Q=1/E[m] e dividendo per E[m]E[m]:

Formula (tasso con timeout, forma generale). B=E[Y]+Q E[R]E[A]+Q E[ZTO].(8)B=\frac{E[Y]+Q\,E[R]}{E[A]+Q\,E[Z^{TO}]}.\tag{8}

Q=1/E[m]Q=1/E[m] è la probabilità che una indicazione di perdita alla fine di un TDP sia un timeout: in un ciclo ci sono mi−1m_i-1 eventi TD e un solo timeout, quindi mm è geometrica con parametro QQ. Restano da calcolare QQ, E[R]E[R], E[ZTO]E[Z^{TO}]; E[Y]E[Y] e E[A]E[A] sono già noti.

La probabilità QQ

Sia ww la finestra nel round semi-ultimo. TCP può inviare ww pacchetti; i primi kk arrivano, il (k+1)(k+1)-esimo è il primo perso (e tutti i seguenti nel round lo sono). I kk pacchetti riscontrati permettono di inviare kk 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à:

Si ha timeout se k≤2k\le2 (non possono arrivare 3 dupACK) oppure se k≥3k\ge3 ma meno di 33 dei kk pacchetti dell'ultimo round arrivano, quindi Q^(w)=∑k=02A(w,k)+∑k=3w−1A(w,k)∑m=02C(k,m).\hat Q(w)=\sum_{k=0}^{2}A(w,k)+\sum_{k=3}^{w-1}A(w,k)\sum_{m=0}^{2}C(k,m). Svolgendo le somme geometriche (con ∑k=0n−1xk=1−xn1−x\sum_{k=0}^{n-1}x^k=\frac{1-x^n}{1-x}) si ottiene la forma chiusa (verificata numericamente: per w=10w=10, p=0,01p=0{,}01 entrambe danno 0,33110{,}3311):

Formula (probabilità di timeout). Q^(w)=min⁡{1, 1−(1−p)31−(1−p)w[1+(1−p)3(1−(1−p)w−3)]} → p→0  min⁡{1,3w}.\hat Q(w)=\min\left\{1,\ \frac{1-(1-p)^3}{1-(1-p)^w}\Big[1+(1-p)^3\big(1-(1-p)^{w-3}\big)\Big]\right\}\ \xrightarrow{\,p\to0\,}\ \min\left\{1,\frac3w\right\}.

Il limite p→0p\to0: 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 → (1−p)n≃1−np(1-p)^n\simeq1-np, quindi 1−(1−p)3≃3p1-(1-p)^3\simeq3p, 1−(1−p)w≃wp1-(1-p)^w\simeq wp e la parentesi quadra tende a 1+1⋅(1−1)=11+1\cdot(1-1)=1: resta 3pwp=3w\frac{3p}{wp}=\frac3w.

Esempio. w=10w=10, p=0,01p=0{,}01: Q^=0,331\hat Q=0{,}331 (contro l'approssimazione 3/w=0,303/w=0{,}30). Con w≤3w\le3 è Q^=1\hat Q=1 (con finestra di 3 pacchetti o meno un solo pacchetto perso non può produrre tre dupACK: sempre timeout). Poiché ww non è costante si usa Q≃Q^(E[W])Q\simeq\hat Q(E[W]).

Pacchetti e durata nel sottociclo di timeout

E[R]E[R]. In ogni timeout si ritrasmette un pacchetto; se è perso (probabilità pp) segue un altro timeout. Il numero RR di pacchetti del sottociclo è quindi geometrico, P[R=i]=pi−1(1−p)P[R=i]=p^{i-1}(1-p), e E[R]=11−p.E[R]=\frac1{1-p}.

E[ZTO]E[Z^{TO}]. La durata di ii timeout consecutivi è, con il raddoppio (T0,2T0,4T0,…T_0,2T_0,4T_0,\dots) fino a 64T064T_0: Li={(2i−1) T0i=1,…,6(63+64(i−6)) T0i≥7.L_i=\begin{cases}(2^i-1)\,T_0 & i=1,\dots,6\\ \big(63+64(i-6)\big)\,T_0 & i\ge7.\end{cases} (per i≤6i\le6 è T0(1+2+⋯+2i−1)=(2i−1)T0T_0(1+2+\dots+2^{i-1})=(2^i-1)T_0, somma di una progressione geometrica; dal settimo in poi ogni timeout in più dura 64T064T_0). I valori sono 1,3,7,15,31,63,127,191,…1,3,7,15,31,63,127,191,\dots volte T0T_0. Mediando su RR: E[ZTO]=∑i≥1Li P[R=i]=T0 f(p)1−p,f(p)=1+p+2p2+4p3+8p4+16p5+32p6.E[Z^{TO}]=\sum_{i\ge1}L_i\,P[R=i]=T_0\,\frac{f(p)}{1-p},\qquad f(p)=1+p+2p^2+4p^3+8p^4+16p^5+32p^6. Un modo più breve per ritrovarlo: il jj-esimo timeout del sottociclo avviene solo se i j−1j-1 precedenti sono falliti, con probabilità pj−1p^{j-1}, e dura min⁡{2j−1,64} T0\min\{2^{j-1},64\}\,T_0. Quindi E[ZTO]=T0[1+2p+4p2+8p3+16p4+32p5+64p6(1+p+p2+… )],E[Z^{TO}]=T_0\Bigl[1+2p+4p^2+8p^3+16p^4+32p^5+64p^6\bigl(1+p+p^2+\dots\bigr)\Bigr], e la parentesi finale è la serie geometrica 11−p\frac1{1-p}. Moltiplicando e dividendo per 1−p1-p, il numeratore diventa (1+2p+4p2+8p3+16p4+32p5)(1−p)+64p6(1+2p+4p^2+8p^3+16p^4+32p^5)(1-p)+64p^6; svolgendo il prodotto ogni coefficiente intermedio si dimezza (2p−p=p2p-p=p, 4p2−2p2=2p24p^2-2p^2=2p^2, ... −32p6+64p6=32p6-32p^6+64p^6=32p^6) e si ottiene proprio f(p)f(p). (Controllo con p=0,1p=0{,}1: la somma numerica dà 1,2499911{,}249991, come f(0,1)/0,9=1,249991f(0{,}1)/0{,}9=1{,}249991.)

Il modello completo

Sostituendo in (8), con E[A]=RTT(E[X]+1)=RTT(b2E[W]+b+1)E[A]=\text{RTT}(E[X]+1)=\text{RTT}\left(\tfrac b2E[W]+b+1\right):

Formula (modello completo, "full model"). B(p,b,RTT,T0)=1−pp+E[W]+Q^(E[W])11−pRTT(b2E[W]+b+1)+Q^(E[W]) T0 f(p)1−p.(9)B(p,b,\text{RTT},T_0)=\frac{\dfrac{1-p}{p}+E[W]+\hat Q(E[W])\dfrac1{1-p}}{\text{RTT}\left(\dfrac b2E[W]+b+1\right)+\hat Q(E[W])\,\dfrac{T_0\,f(p)}{1-p}}.\tag{9}

Il modello approssimato

Per pp piccolo, con E[W]≃8/(3bp)E[W]\simeq\sqrt{8/(3bp)} e Q^≃min⁡{1,3/E[W]}=min⁡{1,33bp/8}\hat Q\simeq\min\{1,3/E[W]\}=\min\{1,3\sqrt{3bp/8}\}, il numeratore è ≃1/p\simeq1/p, il tempo del TDP è ≃RTT2b/(3p)\simeq\text{RTT}\sqrt{2b/(3p)}. Nel secondo membro del denominatore f(p)1−p=1+2p+4p2+8p3+…\frac{f(p)}{1-p}=1+2p+4p^2+8p^3+\dots (i coefficienti sono le somme parziali di quelli di ff: 1,2,4,8,…1,2,4,8,\dots) si tiene il polinomio fino a 4p24p^2. Moltiplicando numeratore e denominatore per pp il numeratore diventa 11, RTT p2b/(3p)=RTT2bp/3\text{RTT}\,p\sqrt{2b/(3p)}=\text{RTT}\sqrt{2bp/3} e Q^ T0 p f(p)1−p\hat Q\,T_0\,p\,\frac{f(p)}{1-p} resta come termine dei timeout; si ottiene:

Formula (modello approssimato). B≃1RTT2bp3+T0min⁡{1, 33bp8}p (1+2p+4p2)[seg/s].(10)B\simeq\frac1{\text{RTT}\sqrt{\dfrac{2bp}3}+T_0\min\left\{1,\,3\sqrt{\dfrac{3bp}8}\right\}p\,(1+2p+4p^2)}\quad[\text{seg/s}].\tag{10}

Il fattore p (1+2p+4p2)p\,(1+2p+4p^2) è quello usato nelle slide del corso e negli esercizi. Nel lavoro originale compare invece p (1+32p2)p\,(1+32p^2): le due forme approssimano lo stesso polinomio f(p)f(p) e per pp piccolo danno risultati quasi uguali (per l'esempio sotto 20,2420{,}24 contro 20,5620{,}56 seg/s). Se la finestra non può superare Wmax⁡W_{\max} (limite del ricevitore o del buffer) il tasso non supera Wmax⁡/RTTW_{\max}/\text{RTT}:

Formula (tetto della finestra). BWmax⁡=min⁡{Wmax⁡RTT, B(p,b,RTT,T0)}[pacchetti/s].(11)B^{W_{\max}}=\min\left\{\frac{W_{\max}}{\text{RTT}},\ B(p,b,\text{RTT},T_0)\right\}\quad[\text{pacchetti/s}].\tag{11}

Per avere il throughput in bit/s si moltiplica per la dimensione del payload in bit.

Quanto bene approssimano le formule

Confronto numerico per b=2b=2, RTT=100\text{RTT}=100 ms, T0=1T_0=1 s (seg/s; calcolato con Python):

pp radice quadrata (7) solo TD (esatta) completo (9) approssimato (10)
10−410^{-4} 866,0866{,}0 858,6858{,}6 856,6856{,}6 864,1864{,}1
10−310^{-3} 273,9273{,}9 266,5266{,}5 260,6260{,}6 267,8267{,}8
10−210^{-2} 86,686{,}6 79,479{,}4 64,864{,}8 70,470{,}4
3⋅10−23\cdot10^{-2} 50,050{,}0 42,842{,}8 25,925{,}9 29,129{,}1
10−110^{-1} 27,427{,}4 20,220{,}2 7,17{,}1 7,27{,}2

Per p≲10−3p\lesssim10^{-3} le formule coincidono entro circa il 5%5\% (10−410^{-4}: 866866 contro 857857). Per p≳10−2p\gtrsim10^{-2} la radice quadrata sovrastima di molto, perché ignora i timeout: con p=0,1p=0{,}1 è 27,427{,}4 contro 7,17{,}1 del modello completo. L'approssimato (10) resta entro circa il 12%12\% dal completo per p≤3⋅10−2p\le3\cdot10^{-2} (29,129{,}1 contro 25,925{,}9 a p=3⋅10−2p=3\cdot10^{-2}) e coincide quasi del tutto a p=0,1p=0{,}1.

Grafico interattivo

Sul grafico (scala logaritmica in pp, RTT=100\text{RTT}=100 ms, T0=1T_0=1 s, b=2b=2): la radice quadrata B∝p−1/2B\propto p^{-1/2} ha pendenza −1/2-1/2 in scala log-log, e si stacca dalle altre per p>10−3p>10^{-3}; 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 (Wi−1/2=3W_{i-1}/2=3, b=2b=2, Xi=10X_i=10): 3,3,4,4,5,5,6,6,7,73,3,4,4,5,5,6,6,7,7, cioè W(r)=3+⌊(r−1)/b⌋W(r)=3+\lfloor (r-1)/b\rfloor; 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 RTT=27\text{RTT}=27 ms, b=2b=2, T0=1T_0=1 s (nel corso T0=max⁡{RTO,1 s}T_0=\max\{\text{RTO},1\text{ s}\}: 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) →), Wmax⁡=200W_{\max}=200 segmenti, payload TCP di 14401440 byte e probabilità di perdita complessiva del percorso p=0,058740p=0{,}058740 (con la formula p=1−∏(1−pn)p=1-\prod(1-p_n) sui collegamenti attraversati, dove l'errore sul collegamento radio domina). Passi:

  1. Tetto. Wmax⁡/RTT=200/0,027=7407W_{\max}/\text{RTT}=200/0{,}027=7407 seg/s (al massimo Wmax⁡W_{\max} segmenti per ogni RTT di 2727 ms): molto più alto di quello che segue, quindi non è il limite.
  2. Primo termine del denominatore. Con b=2b=2, 2bp/3=4⋅0,05874/3=0,078322bp/3=4\cdot0{,}05874/3=0{,}07832, la cui radice è 0,279860{,}27986. RTT2bp/3=0,027⋅0,27986=0,007556\text{RTT}\sqrt{2bp/3}=0{,}027\cdot0{,}27986=0{,}007556 s (RTT in secondi).
  3. Termine dei timeout. Qui 3bp/8=6⋅0,05874/8=0,0440553bp/8=6\cdot0{,}05874/8=0{,}044055, con radice 0,209890{,}20989 e triplo 0,62970{,}6297: min⁡{1, 33bp/8}=min⁡{1, 0,6297}=0,6297\min\{1,\,3\sqrt{3bp/8}\}=\min\{1,\,0{,}6297\}=0{,}6297 (è la stima di Q^\hat Q: circa il 63%63\% delle perdite finisce in timeout); p (1+2p+4p2)=0,05874⋅1,13128=0,066451p\,(1+2p+4p^2)=0{,}05874\cdot1{,}13128=0{,}066451; il prodotto con T0=1T_0=1 è 0,6297⋅0,066451=0,0418430{,}6297\cdot0{,}066451=0{,}041843 s.
  4. Tasso. B=10,007556+0,041843=10,049399=20,2435B=\dfrac1{0{,}007556+0{,}041843}=\dfrac1{0{,}049399}=20{,}2435 seg/s, minore del tetto: è il valore valido.
  5. Throughput in bit/s. 20,2435⋅1440⋅8=233,220{,}2435\cdot1440\cdot8=233{,}2 kbit/s (il payload va espresso in bit: 14401440 byte ×8=11 520\times8=11\,520 bit per segmento).

Per confronto, con gli stessi dati: la radice quadrata (7) darebbe 1/(0,027⋅0,27986)=132,31/(0{,}027\cdot0{,}27986)=132{,}3 seg/s, una sovrastima enorme perché ignora i timeout; il modello completo (9) dà E[W]=4,003E[W]=4{,}003, Q^=0,8096\hat Q=0{,}8096, numeratore 16,024+4,003+0,860=20,88816{,}024+4{,}003+0{,}860=20{,}888, denominatore 0,189+0,917=1,1060{,}189+0{,}917=1{,}106, quindi B=18,88B=18{,}88 seg/s (≃7%\simeq7\% in meno dell'approssimato). Con il fattore p (1+32p2)p\,(1+32p^2) dell'articolo originale si avrebbe 20,5620{,}56 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à pp fissa e indipendente tra round, con correlazione nel round (disciplina drop-tail): le perdite reali sono più irregolari.
  • Alcune approssimazioni (XiX_i e WiW_i indipendenti, βi\beta_i uniforme, E[W]→8/(3bp)E[W]\to\sqrt{8/(3bp)}) valgono per pp piccolo.
  • Le varianti come SACK recuperano meglio da perdite multiple e hanno throughput maggiore di quello previsto per Reno.

Versione ripasso

Scopo. Dato pp 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): B=lim⁡t→∞Nt/tB=\lim_{t\to\infty}N_t/t [pacchetti/s].

Ipotesi

  • Tempo a round di durata RTT (costante, indipendente da WW); in ogni round si inviano WW pacchetti.
  • bb = ACK ritardato (un ACK ogni bb pacchetti, di solito b=2b=2): in CA la finestra cresce di 11 ogni bb round.
  • Solo congestion avoidance (niente slow start); pacchetti uguali; traffico pesante; Wmax⁡W_{\max} infinito.
  • Perdite con probabilità pp: indipendenti tra round, correlate nel round (perso uno, persi tutti i successivi del round).
  • Due passi: (1) perdite segnalate solo da K=3K=3 dupACK; (2) anche timeout.

Passo 1: solo tre dupACK

  • TDP = periodo tra due dimezzamenti consecutivi (dente di sega). Per il TDP ii: AiA_i durata, WiW_i finestra finale, YiY_i pacchetti inviati. Processo di rinnovo con ricompensa: B=E[Y]E[A].B=\frac{E[Y]}{E[A]}.
  • αi\alpha_i = posizione del primo pacchetto perso; XiX_i = round semi-ultimo (poi l'ultimo round con βi\beta_i pacchetti).
  • Wi=Wi−12+Xib−1W_i=\dfrac{W_{i-1}}2+\dfrac{X_i}b-1 (1). Esempio: Wi−1/2=3W_{i-1}/2=3, b=2b=2, Xi=10X_i=10: finestre 3,3,4,4,5,5,6,6,7,73,3,4,4,5,5,6,6,7,7, Wi=7W_i=7.
  • Yi=αi+Wi−1Y_i=\alpha_i+W_i-1 (2): dopo il pacchetto perso partono altri Wi−1W_i-1 pacchetti.
  • Primo calcolo. α\alpha geometrica, P[α=k]=(1−p)k−1pP[\alpha=k]=(1-p)^{k-1}p, E[α]=1/pE[\alpha]=1/p (con p=0,01p=0{,}01: 100100 pacchetti), quindi E[Y]=1−pp+E[W].(3)E[Y]=\frac{1-p}p+E[W].\tag{3}
  • Secondo calcolo (somma sulla forma del TDP): Yi=Xi2(Wi−12+Wi)+βiY_i=\dfrac{X_i}2\Big(\dfrac{W_{i-1}}2+W_i\Big)+\beta_i (4); esempio 102(3+7)=50\tfrac{10}2(3+7)=50 pacchetti più βi\beta_i. Con stazionarietà e β\beta uniforme (E[β]=E[W]/2E[\beta]=E[W]/2): E[Y]=E[X]2⋅32E[W]+E[β],E[X]=b2E[W]+b.E[Y]=\frac{E[X]}2\cdot\frac32E[W]+E[\beta],\qquad E[X]=\frac b2E[W]+b.
  • Equazione per x=E[W]x=E[W]: 3b x2+2(3b−2)x−8(1−p)p=03b\,x^2+2(3b-2)x-\dfrac{8(1-p)}p=0, radice positiva E[W]=2−3b3b+(3b−23b)2+8(1−p)3bp →p→0 83bp.E[W]=\frac{2-3b}{3b}+\sqrt{\Big(\frac{3b-2}{3b}\Big)^2+\frac{8(1-p)}{3bp}}\ \xrightarrow{p\to0}\ \sqrt{\frac8{3bp}}. Esempio b=2b=2, p=0,01p=0{,}01: E[W]=−0,667+0,444+132=10,84E[W]=-0{,}667+\sqrt{0{,}444+132}=10{,}84 (l'approssimazione dà 11,5511{,}55, un po' alta); E[X]=12,84E[X]=12{,}84.
  • Durata: E[A]=(E[X]+1) RTT≃RTT2b/(3p)E[A]=(E[X]+1)\,\text{RTT}\simeq\text{RTT}\sqrt{2b/(3p)}. Con solo TD B=1−pp+E[W]RTT(b2E[W]+b+1).B=\frac{\frac{1-p}p+E[W]}{\text{RTT}\big(\frac b2E[W]+b+1\big)}.
  • Formula della radice quadrata: B=1RTT32bp(1,22/(RTTp) per b=1; 0,87/(RTTp) per b=2).B=\frac1{\text{RTT}}\sqrt{\frac3{2bp}}\qquad(1{,}22/(\text{RTT}\sqrt p)\ \text{per }b=1;\ 0{,}87/(\text{RTT}\sqrt p)\ \text{per }b=2). Esempio b=2b=2, RTT =100=100 ms, p=10−4p=10^{-4}: 10⋅86,6=86610\cdot86{,}6=866 seg/s. RTT dimezzato ⇒B\Rightarrow B doppio; pp diviso 100100 ⇒B\Rightarrow B per 1010. Con p=10−2p=10^{-2}: radice 86,686{,}6, formula esatta solo TD 79,479{,}4 (la radice sovrastima).

Passo 2: anche i timeout

  • Con finestra piccola mancano i dupACK: timeout, W=1W=1, si ritrasmette; timer raddoppiato a ogni timeout consecutivo fino a 64 T064\,T_0.
  • Ciclo = mim_i TDP + sottociclo di timeout: Mi=∑jYij+RiM_i=\sum_jY_{ij}+R_i pacchetti, Si=∑jAij+ZiTOS_i=\sum_jA_{ij}+Z_i^{TO} secondi. Con Q=1/E[m]Q=1/E[m]: B=E[Y]+Q E[R]E[A]+Q E[ZTO].(8)B=\frac{E[Y]+Q\,E[R]}{E[A]+Q\,E[Z^{TO}]}.\tag{8} QQ = probabilità che la perdita a fine TDP sia un timeout (mm geometrica di parametro QQ).
  • Probabilità di timeout (TD se almeno 3 dupACK nell'ultimo round): Q^(w)=min⁡{1,1−(1−p)31−(1−p)w[1+(1−p)3(1−(1−p)w−3)]}→p→0min⁡{1,3w}.\hat Q(w)=\min\Big\{1,\frac{1-(1-p)^3}{1-(1-p)^w}\big[1+(1-p)^3(1-(1-p)^{w-3})\big]\Big\}\xrightarrow{p\to0}\min\Big\{1,\frac3w\Big\}. Esempio w=10w=10, p=0,01p=0{,}01: Q^=0,331\hat Q=0{,}331 (contro 3/w=0,303/w=0{,}30). Con w≤3w\le3: Q^=1\hat Q=1. Si usa Q≃Q^(E[W])Q\simeq\hat Q(E[W]).
  • Pacchetti nel sottociclo: P[R=i]=pi−1(1−p)P[R=i]=p^{i-1}(1-p), E[R]=11−pE[R]=\dfrac1{1-p}.
  • Durata di ii timeout: Li=(2i−1)T0L_i=(2^i-1)T_0 per i≤6i\le6 (1,3,7,15,31,631,3,7,15,31,63), Li=(63+64(i−6))T0L_i=(63+64(i-6))T_0 per i≥7i\ge7 (127,191,…127,191,\dots). Quindi E[ZTO]=T0f(p)1−p,f(p)=1+p+2p2+4p3+8p4+16p5+32p6.E[Z^{TO}]=T_0\frac{f(p)}{1-p},\qquad f(p)=1+p+2p^2+4p^3+8p^4+16p^5+32p^6. Controllo p=0,1p=0{,}1: f/0,9=1,249991f/0{,}9=1{,}249991.
  • Modello completo: B=1−pp+E[W]+Q^11−pRTT(b2E[W]+b+1)+Q^T0f(p)1−p.(9)B=\frac{\frac{1-p}p+E[W]+\hat Q\frac1{1-p}}{\text{RTT}\big(\frac b2E[W]+b+1\big)+\hat Q\frac{T_0f(p)}{1-p}}.\tag{9}
  • Modello approssimato (usato nel corso): B≃1RTT2bp3+T0min⁡{1,33bp8} p(1+2p+4p2).(10)B\simeq\frac1{\text{RTT}\sqrt{\frac{2bp}3}+T_0\min\{1,3\sqrt{\frac{3bp}8}\}\,p(1+2p+4p^2)}.\tag{10} Nell'originale compare p(1+32p2)p(1+32p^2): stessi risultati per pp piccolo (20,2420{,}24 contro 20,5620{,}56 seg/s nell'esempio sotto).
  • Tetto: BWmax⁡=min⁡{Wmax⁡/RTT, B}B^{W_{\max}}=\min\{W_{\max}/\text{RTT},\,B\}. Per i bit/s si moltiplica per il payload in bit.

Confronto (b=2b=2, RTT =100=100 ms, T0=1T_0=1 s, seg/s)

pp radice solo TD completo approssimato
10−410^{-4} 866,0866{,}0 858,6858{,}6 856,6856{,}6 864,1864{,}1
10−310^{-3} 273,9273{,}9 266,5266{,}5 260,6260{,}6 267,8267{,}8
10−210^{-2} 86,686{,}6 79,479{,}4 64,864{,}8 70,470{,}4
10−110^{-1} 27,427{,}4 20,220{,}2 7,17{,}1 7,27{,}2

Per p≲10−3p\lesssim10^{-3} le formule coincidono entro circa il 5%5\%; per p≳10−2p\gtrsim10^{-2} la radice quadrata sovrastima perché ignora i timeout.

Esempio completo

RTT =27=27 ms, b=2b=2, T0=1T_0=1 s (T0=max⁡{RTO,1 s}T_0=\max\{\text{RTO},1\text{ s}\}: 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) →), Wmax⁡=200W_{\max}=200, payload 14401440 byte, p=0,058740p=0{,}058740.

  1. Tetto: 200/0,027=7407200/0{,}027=7407 seg/s, non è il limite.
  2. RTT2bp/3=0,027⋅0,27986=0,007556\text{RTT}\sqrt{2bp/3}=0{,}027\cdot0{,}27986=0{,}007556 s.
  3. min⁡{1,33bp/8}=0,6297\min\{1,3\sqrt{3bp/8}\}=0{,}6297; p(1+2p+4p2)=0,066451p(1+2p+4p^2)=0{,}066451; prodotto 0,0418430{,}041843 s.
  4. B=1/(0,007556+0,041843)=20,2435B=1/(0{,}007556+0{,}041843)=20{,}2435 seg/s.
  5. 20,2435⋅1440⋅8=233,220{,}2435\cdot1440\cdot8=233{,}2 kbit/s.

Confronti: radice quadrata 132,3132{,}3 seg/s (enorme sovrastima); completo 18,8818{,}88 (E[W]=4,003E[W]=4{,}003, Q^=0,8096\hat Q=0{,}8096); con 1+32p21+32p^2: 20,5620{,}56. 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; pp fissa e indipendente tra round; approssimazioni (XX, WW indipendenti, β\beta uniforme, E[W]→8/(3bp)E[W]\to\sqrt{8/(3bp)}) valide per pp piccolo; SACK fa meglio di Reno.

Errori tipici: usare la radice quadrata per pp alto; dimenticare di moltiplicare per il payload in bit; scordare il tetto Wmax⁡/RTTW_{\max}/\text{RTT}; mettere T0T_0 in ms con RTT in s; confondere bb (ACK ritardato) con K=3K=3 dupACK.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata