Parte III — Trasporto affidabile e TCP · Capitolo 12

TCP: controllo di congestione

~50 min di lettura5 widget interattivi

In questo capitolo

  1. Dal controllo di flusso al controllo di congestione
  2. Finestra di trasmissione e throughput
  3. Perché due fasi: Slow Start e Congestion Avoidance
  4. Slow Start
  5. Congestion Avoidance
  6. Risposta alla congestione: RTO scaduto
  7. Fast Retransmit e Fast Recovery
  8. Perdite multiple: Tahoe, Reno e New Reno
  9. Il modello approssimato: AIMD
  10. AIMD: condivisione della banda
  11. Limiti del TCP e varianti moderne
  12. Verifica le tue conoscenze

1. Dal controllo di flusso al controllo di congestione

Il capitolo 11 ha regolato la sorgente rispetto alla capacità della destinazione. Ora il punto stretto si sposta dentro la rete. Il controllo di flusso impedisce che il trasmettitore saturi il ricevitore; il controllo di congestione impedisce che il traffico immesso saturi le code dei router lungo il percorso. Sono due problemi distinti anche quando producono lo stesso effetto finale: rallentare la sorgente.

Nel primo caso la destinazione notifica esplicitamente la propria advertised window, AW. Nel secondo il TCP opera end-to-end, con un controllo implicito e closed loop: interpreta ACK duplicati e scadenze del time-out come segnali dello stato della rete. In entrambi i casi è la cadenza degli ACK a regolare concretamente la trasmissione. Se gli ACK arrivano, liberano spazio nella finestra; se rallentano o non arrivano, anche la sorgente rallenta.

Lo stesso percorso, due possibili punti stretti sorgente TCP rete di router destinazione collo: destinazione controllo di flusso → AW collo: capacità minima della rete controllo di congestione → CW la cadenza degli ACK regola la sorgente Il ricevitore dichiara AW; la rete non dichiara CW: la sorgente la adatta osservando il ritorno degli ACK.
Tavola 12.1 — I due colli di bottiglia. Il controllo di flusso protegge una destinazione nota; il controllo di congestione stima indirettamente la capacità minima, variabile, del percorso.

Per rappresentare il secondo limite, ogni connessione mantiene una Congestion Window, CW. La finestra si chiude quando il livello di congestione aumenta e si apre quando la congestione si risolve. Il vincolo effettivo resta il più severo tra quello imposto dal ricevitore e quello stimato per la rete:

W = min{AW, CW}

AW  limite imposto dalla destinazione
CW  limite imposto dal controllo di congestione
W   dati che la sorgente può mantenere in volo

W, AW e CW sono normalmente espresse in byte. Negli esempi è più comodo misurarle in segmenti di dimensione MSS; dire W = 4 significa allora quattro MSS. La notazione non cambia il meccanismo: in ogni istante W non può superare nessuno dei due limiti.

Per l'esame

Non confondere i soggetti protetti: AW protegge la destinazione, CW protegge la rete. La formula da cui partire è sempre W = min{AW, CW}. Negli sviluppi del capitolo si assumerà spesso AW >> CW, e dunque W = CW, ma questa è un'ipotesi di lavoro, non la definizione generale.

2. Finestra di trasmissione e throughput

Per trasmettere senza interruzioni occorre mantenere in volo una quantità di dati sufficiente a riempire il percorso mentre si attende il ritorno degli ACK. Se B è la capacità minima lungo il percorso in bit/s e RTT il round-trip time, il prodotto banda per ritardo espresso in byte fornisce la finestra ideale:

W = RTT·B/8

Se la finestra è inferiore a questo valore, la sorgente esaurisce i dati inviabili prima che arrivi un ACK e lascia capacità inutilizzata. Il throughput normalizzato, indicato nelle slide con S, vale:

W < RTT·B/8   →   S = 8W/(RTT·B)

W > RTT·B/8   →   S = 1, ma i pacchetti si accodano nei router
Idea chiave

Una W troppo piccola sottoutilizza la capacità; una W oltre il prodotto banda×ritardo non aumenta il throughput, che è già saturo, ma accumula pacchetti nelle code e rende più probabile la congestione. Il controllo cerca quindi il bordo fra tubo pieno e code in crescita, senza conoscere in anticipo dove si trovi.

Esempio di dimensionamento

Con B = 100 Mbit/s e RTT = 20 ms, la finestra ideale è 0,020 · 100·106 / 8 = 250 000 byte. Se la sorgente usa soltanto 125 000 byte, S vale 0,5: metà della capacità rimane inutilizzata. Con 375 000 byte, invece, S resta 1 e i 125 000 byte eccedenti devono attendere in coda.

3. Perché due fasi: Slow Start e Congestion Avoidance

All'apertura della connessione la capacità disponibile B è incognita: non esiste un valore evidente con cui inizializzare CW. Inoltre B può cambiare durante la connessione, perché altre sorgenti entrano o escono dal percorso e modificano il carico sul collo di bottiglia. Una finestra fissa sarebbe quindi sbagliata sia all'inizio sia a regime.

Il TCP separa il problema in due dinamiche. Lo Slow Start parte con una finestra minima ma la fa crescere rapidamente, per avvicinarsi in pochi RTT alla capacità disponibile. Il Congestion Avoidance prosegue con cautela: permette di sfruttare nuova capacità, ma evita di aumentare la finestra alla stessa velocità esplosiva.

FaseScopoDinamica approssimataUscita
Slow Start (SS)raggiungere rapidamente una regione utileraddoppio di W per RTTW raggiunge SSThr oppure scade RTO
Congestion Avoidance (CA)sondare con prudenza la capacità residuacirca +1 MSS per RTTperdita rilevata da RTO o ACK duplicati

Ipotesi di lavoro

Per isolare la congestione, le slide assumono trasmettitore e ricevitore correttamente configurati, buffer abbastanza grandi e applicazioni sempre pronte a produrre o consumare dati. Non vi sono quindi stagnazioni applicative né silly window syndrome. Soprattutto si assume AW >> CW, da cui segue W = CW: l'evoluzione della finestra è determinata interamente dal controllo di congestione.

4. Slow Start

All'inizio dello Slow Start si pone W ≤ 2·MSS; l'esempio elementare usa W = MSS. La sorgente trasmette la finestra iniziale e si ferma in attesa dell'ACK. Se l'ACK arriva entro RTO, la finestra aumenta di un MSS. La stessa regola viene applicata a ogni ACK successivo:

SS: W = W + MSS per ACK

La crescita è per ACK, non per RTT. Tuttavia, se in un RTT vengono confermati tutti i segmenti della finestra corrente, ciascuno produce un incremento di un MSS: una finestra di 1 MSS diventa 2, quella da 2 diventa 4, poi 8. Per questo l'andamento temporale è esponenziale, nonostante il nome «partenza lenta».

L'approssimazione assume RTT circa costante, osserva W a tempi multipli del RTT e, in genere, non usa ACK ritardati in questa fase (quickack mode). La durata fino alla soglia è:

Tss = RTT·log2(SSThr)

La formula è una stima nella convenzione normalizzata delle slide: la soglia è espressa in MSS e la crescita parte dall'unità. Lo Slow Start termina quando W raggiunge la Slow Start Threshold, SSThr, oppure quando scade RTO.

Evoluzione ideale della congestion window W [MSS] tempo [RTT] 1 2 4 SSThr = 4 MSS SS: 1 → 2 → 4 CA: circa +1 MSS per RTT passaggio SS → CA
Tavola 12.2 — Le due pendenze della finestra. Prima della soglia, ogni RTT raddoppia i segmenti in volo; dopo la soglia, il sondaggio della capacità diventa lineare.
Per l'esame

Le tre frasi da tenere unite sono: W = W + MSS per ogni ACK; ciò produce un raddoppio per RTT; quindi Tss = RTT·log2(SSThr). Dire soltanto «la finestra aumenta di uno» è ambiguo e confonde lo Slow Start con la Congestion Avoidance.

5. Congestion Avoidance

Raggiunta SSThr, la crescita esponenziale sarebbe troppo aggressiva. In Congestion Avoidance il TCP applica a ogni nuovo ACK un incremento inversamente proporzionale alla finestra corrente:

CA: W = W + MSS²/W per ACK

Durante un RTT arrivano approssimativamente W/MSS ACK, ciascuno dei quali aggiunge MSS²/W. La somma degli incrementi è quindi circa un MSS per RTT. Se si usa il delayed ACK e arriva un ACK ogni due segmenti, l'aumento complessivo è circa mezzo MSS per RTT.

Modalità degli ACKIncremento per ACKIncremento approssimato per RTT
un ACK per segmentoMSS²/W+1·MSS
un ACK ogni due segmentiMSS²/W+½·MSS

La crescita reale è leggermente sub-lineare

Con MSS = 1 e W = 4, si inviano quattro segmenti. Dopo il primo ACK la finestra diventa 4 + 1/4 = 4,25; il denominatore del passo seguente è già cambiato. L'evoluzione esatta è:

ACK relativoCalcoloW [MSS]
0valore iniziale4,00
14 + 1/44,25
24,25 + 1/4,254,49
34,49 + 1/4,494,71
44,71 + 1/4,714,92

Non si raggiunge esattamente 5, perché ogni ACK riduce leggermente l'incremento successivo. La curva è dunque sub-lineare. Per l'analisi si trascura questo scarto e si assume una crescita strettamente lineare nel tempo: è l'approssimazione che consentirà di descrivere il TCP come AIMD.

6. Risposta alla congestione: RTO scaduto

Se un segmento non viene riscontrato e scade RTO, il TCP assume che la rete sia congestionata. Con una buona stima del RTT, la scadenza è quasi sempre dovuta a una perdita; su una tecnologia affidabile, la perdita è a sua volta quasi sempre dovuta alla saturazione delle code nei router.

La reazione è severa indipendentemente dalla fase corrente. Se il TCP era in Slow Start, riparte da capo; se era in Congestion Avoidance, termina CA e torna a SS. In entrambi i casi riduce la finestra iniziale e aggiorna la soglia:

W ≤ 2·MSS
SSThr = max(FS/2, 2·MSS)

Il flight size, FS, è la quantità di byte già trasmessi ma non ancora confermati. In generale FS ≤ W: la finestra è il permesso massimo, il flight size è ciò che si trova davvero in volo. Per questo la soglia si calcola su FS e non automaticamente su W.

EventoInterpretazioneNuova sogliaNuova fase
scadenza di RTOcongestione critica o assenza di evidenza che la rete continui a consegnareSSThr = max(FS/2, 2·MSS)Slow Start con W ≤ 2·MSS
Per l'esame

La soglia non può scendere sotto 2·MSS. Scrivere soltanto SSThr = W/2 perde due dettagli: si usa il flight size, che può essere minore di W, e si applica il massimo SSThr = max(FS/2, 2·MSS).

7. Fast Retransmit e Fast Recovery

Tre ACK duplicati raccontano una storia diversa da un time-out. Il segmento mancante è probabilmente perso, ma i segmenti successivi stanno raggiungendo il ricevitore: sono proprio loro a generare i duplicati. La rete è congestionata, ma non tanto da essersi fermata. Il Fast Retransmit ritrasmette subito il segmento mancante; il Fast Recovery evita l'inefficienza di ripartire da Slow Start.

SSThr = max(FS/2, 2·MSS)
W = SSThr + 3·MSS                  window inflation

per ogni ulteriore ACK duplicato:  W = W + MSS
all'ACK completo:                  W = SSThr, poi CA

I tre MSS aggiunti nella window inflation rappresentano i tre segmenti successivi al mancante che risultano già ricevuti: ciascuno ha prodotto un ACK duplicato e ha quindi lasciato la rete. Ogni duplicato ulteriore certifica la consegna di un altro segmento e consente di aumentare W di un MSS. Quando arriva l'ACK del segmento perduto, la finestra viene «sgonfiata» a SSThr e la connessione prosegue in CA.

Esempio numerico: FS = W = 4

PassoEventoSSThrW
1tre ACK duplicati, Fast Retransmitmax(4/2, 2) = 22 + 3 = 5
2ritrasmissione del segmento mancante25, Fast Recovery
3ACK completo del segmento mancante2W = 2, ingresso in CA

Esempio numerico: FS = W = 6

PassoEventoSSThrW
1tre ACK duplicatimax(6/2, 2) = 33 + 3 = 6
2un ulteriore ACK duplicato3W = 7
3un altro ACK duplicato3W = 8
4ACK completo3W = 3, CA

Esempio svolto: perdita del segmento 20

Le esercitazioni fissano AW = 32, SSThr = 8, CW = 2 all'apertura, segmenti da un MSS e 34 segmenti complessivi. L'avvio procede per finestre 2 → 4 → 8; raggiunta la soglia, CA porta CW a 9 e la finestra 15,…,23 contiene il segmento 20, che si perde. I segmenti successivi producono duplicati con AckN = 20.

VarianteRilevazioneRiduzioneSegmenti inviati nel recuperoRipresa
solo SS + CAattende RTOW = 1, SSThr = 4 da FS = 9 nella convenzione dell'esempioritrasmette 20SS: 1 → 2 → 4
TahoeFast Retransmit al terzo duplicatoW = 1, SSThr = 2 con FS = 420SS, poi CA
RenoFast Retransmit + Fast RecoverySSThr = 2, W = 2 + 3 = 520 e, se consentito, 24CA con W = 2

Il confronto mostra perché il segnale conta: la scadenza di RTO non dà prova di attività residua e impone una ripartenza prudente; tre duplicati dimostrano invece che almeno tre segmenti hanno attraversato la rete, e Reno conserva questa informazione gonfiando temporaneamente la finestra.

8. Perdite multiple: Tahoe, Reno e New Reno

Una sola perdita nella finestra mette in luce la velocità del Fast Retransmit. Due perdite nella stessa finestra mettono in luce i limiti delle varianti classiche. Si consideri l'esempio delle slide: i primi dodici segmenti sono confermati, W = 5, e nella finestra successiva si perdono i segmenti 13 e 16.

Solo SS + CA

La perdita del 13 viene scoperta da RTO. La sua ritrasmissione fa avanzare l'ACK fino al 16, ma la seconda perdita richiede un altro RTO. Il costo dominante sono dunque due time-out, non le due ritrasmissioni.

Tahoe

Tahoe riconosce il 13 con tre ACK duplicati e lo ritrasmette subito, ma porta immediatamente W a 1 e riparte in SS. Poiché 16 e 17 sono ancora non confermati, la finestra collassata non consente di trasmettere abbastanza nuovi segmenti da generare tre duplicati per il 16. Si finisce ancora ad attendere RTO: il vantaggio del primo Fast Retransmit resta piccolo.

Reno

Reno entra in Fast Recovery con SSThr = 2 e W = SSThr + 3 = 5. Quando la ritrasmissione del 13 produce AckN = 16, interpreta l'ACK come completamento del recupero, esce da FR e torna a W = 2. Ma quell'ACK è soltanto parziale: conferma una parte della finestra presente all'ingresso in FR. L'uscita è prematura e anche il 16 finisce per richiedere RTO.

New Reno e gli ACK parziali

New Reno memorizza SeqN(T0), il massimo numero di sequenza trasmesso quando arriva il terzo ACK duplicato. Nell'esempio vale 17. Un ACK successivo inferiore a quello necessario per confermare SeqN(T0) è parziale: indica un'altra perdita, reinizializza RTO e mantiene il recupero attivo. Nella traccia delle slide l'ACK parziale porta temporaneamente a W = W + 1 − 3, compensando il nuovo segmento confermato e i duplicati già contabilizzati.

New Reno esce da Fast Recovery soltanto quando riceve l'ACK che copre SeqN(T0). Così può ritrasmettere prima il 13 e poi il 16 senza aspettare il secondo time-out. Lo stesso principio distingue l'esempio con perdite 21 e 28: Reno chiude FR dopo il recupero del 21 e attende RTO per il 28; New Reno riconosce l'ACK parziale e recupera entrambi dentro la stessa fase.

FunzionalitàRFC 1122TahoeRenoNew Reno
stima della varianza RTT
RTO con backoff esponenziale
algoritmo di Karn
Slow Start
Congestion Avoidance
Fast Retransmit
Fast Recovery
reset RTO anche con ACK parziali

Tahoe aggiunge Fast Retransmit a SS e CA, ma dopo la perdita porta W al minimo e torna in Slow Start. Con perdite multiple la finestra collassata può impedire la produzione di altri ACK duplicati: il recupero successivo attende RTO.

Reno aggiunge Fast Recovery. Conserva il flusso durante il primo recupero, ma considera il primo nuovo ACK come conclusivo. Se quell'ACK è parziale, esce troppo presto e la perdita successiva può ancora richiedere RTO.

New Reno conserva SeqN(T0) e distingue gli ACK parziali. Resta in Fast Recovery finché non è confermata tutta la finestra presente a T0, reinizializzando RTO e ritrasmettendo il nuovo segmento indicato dall'ACK parziale.

9. Il modello approssimato: AIMD

In una rete abbastanza stabile la durata dello Slow Start è molto inferiore a quella della Congestion Avoidance: Tss << Tca. In prima approssimazione la vita lunga di una connessione è quindi una successione di fasi CA. Durante ciascuna fase la finestra cresce a tasso costante; a ogni perdita viene dimezzata. Ne risulta il caratteristico profilo a dente di sega.

AIMD: una successione di fasi di Congestion Avoidance W(t) t × × × incremento additivo W = W/2 ogni perdita apre un nuovo dente
Tavola 12.3 — Il modello approssimato della finestra. La salita lineare cerca capacità; il salto verticale restituisce rapidamente banda quando compare una perdita.

Questa legge prende il nome di Additive Increase, Multiplicative Decrease, AIMD. Indicando con r(t) il bit rate della connessione:

incremento additivo:       r(t) = r(0) + ct      con c > 0
decremento moltiplicativo: r(t) = a·r(0)         con a < 1

Nel TCP classico l'incremento deriva da circa un MSS per RTT e il decremento tipico dimezza la finestra. «Additivo» significa che connessioni con uguali MSS e RTT aggiungono la stessa quantità; «moltiplicativo» significa che ciascuna conserva la stessa frazione del proprio rate prima della perdita.

Il controllo è greedy: continua ad aprire la finestra finché trova capacità, così tende a occupare tutta la banda disponibile. Allo stesso tempo AIMD consente un'equa distribuzione tra connessioni comparabili. Se però una rete è molto inaffidabile, per esempio wireless, non ogni perdita segnala congestione: attribuirle tutte alle code porta a riduzioni non necessarie e richiede algoritmi speciali.

10. AIMD: condivisione della banda

Due connessioni con gli stessi MSS e RTT condividono un collo di bottiglia di capacità R. Nel piano con assi r1 e r2, la retta r1 + r2 = R rappresenta il pieno utilizzo; la retta r1 = r2 rappresenta l'equa allocazione. Il punto desiderato è la loro intersezione, (R/2, R/2).

Convergenza AIMD nel piano dei rate r2 r1 r1 = r2 equa allocazione r1 + r2 = R pieno utilizzo equilibrio (R/2, R/2) additive increase: spostamento parallelo a r1 = r2 multiplicative decrease: spostamento verso l'origine la traiettoria alterna le due mosse e si avvicina all'intersezione
Tavola 12.4 — Perché AIMD tende all'equità. L'aumento additivo muove parallelamente alla retta equa; la riduzione moltiplicativa punta verso l'origine. L'alternanza converge all'intersezione con il pieno utilizzo.

Durante l'incremento additivo entrambi i rate crescono dello stesso valore e la traiettoria si muove parallelamente a r1 = r2. Quando la somma raggiunge il limite, il decremento moltiplicativo scala entrambi i rate verso l'origine. Ripetendo le due mosse, la differenza assoluta si riduce e il sistema tende al punto di equa allocazione.

Quando i RTT sono diversi

L'equità precedente dipende dall'ipotesi di RTT uguali. L'incremento di CW avviene approssimativamente una volta per RTT: una connessione con RTT breve compie più incrementi nello stesso secondo. Due connessioni che attraversano lo stesso collo di bottiglia ma sperimentano RTT diversi aumentano quindi le finestre a velocità diverse, e il TCP tende a favorire quella con RTT più breve.

11. Limiti del TCP e varianti moderne

Prodotto banda per ritardo e TCP CUBIC

Dopo un evento di congestione, AIMD dimezza CW. Se le condizioni della rete restano stabili, la finestra ideale è ancora vicina al precedente massimo, ma tornarvi con una crescita lineare può richiedere molto tempo. Il limite è particolarmente evidente quando il prodotto banda×ritardo è grande: molte unità di MSS separano WMAX/2 da WMAX.

TCP CUBIC, descritto nella RFC 8312 e adottato dalle versioni recenti di Linux considerate nelle slide, sostituisce in CA la crescita lineare di Reno con una curva cubica rispetto al tempo trascorso dall'ultima riduzione:

W(t) = C(t−K)³ + WMAX

C è una costante, t il tempo dall'ultima riduzione, K l'istante in cui, in assenza di perdite, si raggiungerà nuovamente WMAX. La forma consente una crescita più rapida lontano dal massimo precedente e più prudente nelle sue vicinanze.

Connessioni web, TLS e head-of-line blocking

I costi del TCP emergono anche sopra il trasporto. HTTP/1.0 non persistente apre una connessione TCP per ogni oggetto della pagina. HTTP/1.1 riusa una connessione, ma pagine complesse ricorrono spesso a connessioni multiple per aumentare il parallelismo. Ciascuna connessione deve raggiungere separatamente il massimo throughput e, con HTTPS, aggiungere al 3-Way Handshake TCP la negoziazione TLS.

Il pipelining di HTTP/1.1 consente di inviare più richieste senza attendere le risposte precedenti, ma le risposte restano ordinate: una risposta lenta trattiene quelle successive, producendo head-of-line blocking. HTTP/2 multipla richieste e risposte nella stessa connessione TCP, alternando i dati di flussi differenti. Tuttavia una perdita TCP blocca la ricostruzione ordinata del flusso di byte e rallenta tutte le richieste multiplexate, anche quelle i cui dati non sono stati persi.

QUIC e HTTP/3

QUIC, RFC 9000, cambia il punto in cui vengono realizzate queste funzioni. Usa UDP come base, ma gestisce autonomamente connessioni affidabili e sicure con controllo di congestione. All'interno della stessa connessione distingue flussi diversi, così una perdita su un flusso non impone l'head-of-line blocking agli altri. QUIC è parte integrante di HTTP/3, RFC 9114, e consente inoltre un'apertura più veloce evitando di sovrapporre in sequenza tutti i passaggi delle architetture precedenti.

SoluzioneParallelismoCosto evidenziato
HTTP/1.0una connessione non persistente per oggettoripetizione dell'apertura e della salita a regime
HTTP/1.1persistenza, pipelining e spesso connessioni multiplenegoziazioni multiple e HoL nell'ordine delle risposte
HTTP/2 su TCPflussi HTTP multiplexati su una connessioneuna perdita TCP rallenta tutti i flussi
HTTP/3 su QUICflussi distinti nella connessione QUICla perdita di un flusso non blocca gli altri flussi
Nota del redattore

Qui si chiude la descrizione algoritmica e si apre il problema quantitativo. Il capitolo 13 userà il dente di sega, la durata delle fasi e la probabilità di perdita per costruire modelli di prestazione: non cambierà il meccanismo, ma ne calcolerà throughput e tempi di completamento.

Verifica le tue conoscenze

Qual è la differenza fra controllo di flusso e controllo di congestione?

Il controllo di flusso protegge la destinazione, che notifica esplicitamente AW. Il controllo di congestione protegge la rete e adatta implicitamente CW osservando ACK e perdite. Entrambi regolano la sorgente attraverso la cadenza degli ACK, ma rispondono a colli di bottiglia diversi.

Come convivono AW e CW nella finestra effettiva?

Con la relazione W = min{AW, CW}. La sorgente non può avere in volo più byte di quanti ne accetti la destinazione né più di quanti il controllo ritenga sostenibili per la rete. L'ipotesi AW >> CW semplifica in W = CW, ma non vale necessariamente sempre.

Qual è la finestra ideale e che cosa accade sopra o sotto di essa?

La finestra ideale è W = RTT·B/8 byte. Se W < RTT·B/8, il throughput normalizzato è S = 8W/(RTT·B) e la capacità è sottoutilizzata. Se W supera il valore ideale, S = 1 ma i pacchetti eccedenti si accodano nei router, aumentando il rischio di congestione.

Perché servono Slow Start e Congestion Avoidance?

All'apertura la capacità B è incognita e durante la connessione può cambiare. SS parte da una finestra minima e cresce rapidamente per raggiungere una regione utile; CA continua a sondare la capacità disponibile con una crescita prudente, evitando che la finestra esploda a regime.

Come cresce la finestra in Slow Start e quanto dura la fase?

Per ogni ACK ricevuto entro RTO si applica W = W + MSS. Poiché in un RTT arrivano ACK per tutta la finestra, W raddoppia approssimativamente ogni RTT: crescita esponenziale. Nella convenzione normalizzata delle slide, Tss = RTT·log2(SSThr). SS termina a SSThr o alla scadenza di RTO.

Come cresce la finestra in Congestion Avoidance?

A ogni nuovo ACK si applica W = W + MSS²/W. Su tutti gli ACK di una finestra l'aumento totale è circa un MSS per RTT, quindi lineare; con delayed ACK, un ACK ogni due segmenti, è circa mezzo MSS per RTT. La crescita esatta è leggermente sub-lineare.

Che cosa fa il TCP quando scade RTO?

Assume congestione critica, imposta SSThr = max(FS/2, 2·MSS), riduce W ≤ 2·MSS e riparte in Slow Start. FS è il flight size, cioè i byte trasmessi ma non ancora confermati, e può essere minore della finestra.

Che cos'è la window inflation del Fast Recovery?

Dopo tre ACK duplicati si riduce la soglia e si pone W = SSThr + 3·MSS. I tre MSS contabilizzano i tre segmenti successivi al mancante già usciti dalla rete e ricevuti. Ogni duplicato ulteriore aggiunge un MSS; con l'ACK completo si torna a W = SSThr e si prosegue in CA.

Perché Tahoe e Reno soffrono con perdite multiple, e che cosa cambia New Reno?

Tahoe collassa W e può non generare abbastanza duplicati per scoprire la seconda perdita. Reno mantiene FR, ma ne esce al primo nuovo ACK anche se è parziale. New Reno memorizza SeqN(T0), resta in FR davanti agli ACK parziali e ne esce solo quando è confermata tutta la finestra presente a T0.

Che cosa significa AIMD e perché converge verso l'equa allocazione?

L'incremento additivo segue r(t) = r(0) + ct, il decremento moltiplicativo r(t) = a·r(0). Due connessioni comparabili aggiungono la stessa quantità, poi conservano la stessa frazione del rate. Nel piano r1/r2 l'alternanza avvicina la traiettoria all'intersezione fra r1 = r2 e r1 + r2 = R.

Perché RTT diversi rompono l'equità ideale?

La finestra aumenta di circa un MSS ogni RTT. Una connessione con RTT breve esegue più incrementi nello stesso intervallo di tempo rispetto a una con RTT lungo; condividendo lo stesso collo di bottiglia, tende quindi a ottenere una quota maggiore di capacità.

Quale limite di AIMD affronta TCP CUBIC?

Dopo il dimezzamento, la crescita lineare può impiegare molto tempo per tornare alla finestra ideale quando il prodotto banda×ritardo è grande. CUBIC usa W(t) = C(t−K)³ + WMAX: cresce più rapidamente lontano dal massimo precedente e rallenta nelle sue vicinanze.

Che cos'è l'head-of-line blocking e come interviene QUIC?

Su TCP i byte devono essere consegnati in ordine: in HTTP/2 la perdita di un segmento può rallentare tutti i flussi multiplexati. QUIC, RFC 9000, usa UDP come base ma realizza connessioni affidabili, sicure e congestion-controlled con flussi distinti; la perdita su un flusso non blocca gli altri. È il trasporto di HTTP/3, RFC 9114.