SlideShare a Scribd company logo
1 of 12
Download to read offline
TCP - Congestion avoidance and control
Le reti di computer sono cresciute esponenzialmente e questa crescita è accompagnata da
importanti problemi di congestione. In media, infatti, un gateway perde circa il 10%
dei pacchetti in entrata a causa dell’overflow dei buffer di ricezione.
Il TCP ha due importanti obiettivi:
• controllare il flusso di invio dei pacchetti affinchè il buffer del destinatario
non vada in overflow
• controllare la congestione della rete quando il router riceve molti più
pacchetti di quanti ne possa trasmettere su un certo link (provocando,
inevitabilmente, la perdita di pacchetti in eccesso)
1. ADVERTISED WINDOW
Il primo problema viene risolto utilizzando una variabile detta Advertised Window,
dove il destinatario comunica al mittente quanto spazio è ancora rimanente nel
proprio buffer.
Il buffer viene rappresentato da un integratore: dato che da esso vengono tolti e aggiunti
pacchetti, c’è un ingresso positivo (pacchetti inviati dal mittente) e un ingresso
negativo (pacchetti letti dal destinatario). Inoltre, il tempo necessario ai dati per
raggiungere il destinatario (𝑻𝑻𝒇𝒇𝒇𝒇 – Tempo feed-forward) e a questi per far ricevere
l’ACK (𝑻𝑻𝒇𝒇𝒃𝒃 – Tempo feed-back) è chiamato round-trip time o RTT.
Il sistema può essere rappresentato nel seguente modo:
1. 𝐺𝐺𝑐𝑐(𝑠𝑠) =
𝐾𝐾
1+
𝐾𝐾
𝑠𝑠
[1−𝑒𝑒−𝑠𝑠𝑇𝑇]
𝑐𝑐𝑐𝑐𝑐𝑐 𝑇𝑇 = 𝑅𝑅𝑅𝑅𝑅𝑅
2. 𝐺𝐺𝑐𝑐(𝑠𝑠)∆𝑊𝑊 =
𝐾𝐾∆𝑊𝑊
1+
𝐾𝐾
𝑠𝑠
[1−𝑒𝑒−𝑠𝑠𝑇𝑇]
= 𝑢𝑢(𝑡𝑡)
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
3. → 𝐾𝐾∆𝑊𝑊 = 𝑈𝑈(𝑠𝑠) �1 +
𝐾𝐾
𝑠𝑠
[1 − 𝑒𝑒−𝑠𝑠𝑇𝑇]�
4. → 𝐾𝐾∆𝑊𝑊 = 𝑢𝑢(𝑡𝑡) + 𝐾𝐾 ∫ 𝑢𝑢(𝜏𝜏) − 𝑢𝑢(𝜏𝜏 − 𝑇𝑇)𝑑𝑑𝜏𝜏
𝑡𝑡
−∞
5. → 𝑢𝑢(𝑡𝑡) = 𝐾𝐾 �∆𝑊𝑊 − ∫ 𝑢𝑢(𝜏𝜏) − 𝑢𝑢(𝜏𝜏 − 𝑇𝑇)𝑑𝑑𝜏𝜏
𝑡𝑡
−∞
�
L’integrale può essere scritto come: �∫ 𝑢𝑢(𝜏𝜏)𝑑𝑑𝜏𝜏
𝑡𝑡−𝑇𝑇
−∞
+ ∫ 𝑢𝑢(𝜏𝜏)𝑑𝑑𝜏𝜏
𝑡𝑡
𝑡𝑡−𝑇𝑇
− ∫ 𝑢𝑢(𝜏𝜏)𝑑𝑑𝜏𝜏
𝑡𝑡−𝑇𝑇
−∞
� dove il
primo e l’ultimo integrale si semplificano in quanto sono opposti
Quindi, si ha che:
𝑢𝑢(𝑡𝑡) = 𝐾𝐾 �∆𝑊𝑊 − � 𝑢𝑢(𝜏𝜏)𝑑𝑑𝑑𝑑
𝑡𝑡
𝑡𝑡−𝑇𝑇
�
L’integrale prende il nome di in-flight packets, cioè un insieme di pacchetti, il cui primo
questo insieme è stato inviato nell’istante 𝑡𝑡 − 𝑇𝑇, e che non sono ancora stati riscontrati.
Sono anche detti outstanding packets.
Dunque, la grandezza della finestra di trasmissione è data dall’Advertised Window meno
gli outstanding packets che stanno per andare a occupare altro spazio nel buffer.
𝑊𝑊 =
𝑢𝑢(𝑡𝑡)
𝐾𝐾
= 𝐴𝐴𝐷𝐷𝐷𝐷 − 𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑛𝑛
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
2. EQUILIBRIO INIZIALE: SLOW START
L’algoritmo introdotto da Van Jacobson permette di controllare il traffico della rete in modo
più equilibrato.
L’errore, nella connessione, viene causato da una connessione riavviata dopo la perdita di un
pacchetto. Dato che il destinatario non può generare ACK più velocemente di quanto i
pacchetti fluiscano nella rete, il protocollo si definisce “self-clocking”. I sistemi di questo
genere modificano automaticamente la banda e i ritardi e hanno un ampio dynamic
range (velocità di trasmissione dei pacchetti).
Figura 1. Meccanismo di self-clocking
Rappresentazione di mittente e destinatario con reti di accesso ad alta banda, connesse
da una rete lenta. Il mittente ha appena iniziato e ha trasmesso una finestra di
pacchetti, mentre l’ACK del primo di questi pacchetti sta per arrivargli.
La dimensione verticale è la banda, quella orizzontale è il tempo: dunque, l’area di
un pacchetto (banda per tempo) equivale alla dimensione del pacchetto
stesso, cioè al numero dei suoi bit. Dato che il numero di bit/pacchetto non cambia,
con una banda minore sarà necessario più tempo per trasmettere quei bit,
quindi il pacchetto viene “spalmato” sull’asse orizzontale.
𝑃𝑃𝑏𝑏 rappresenta il tempo di trasmissione del pacchetto sul link più lento (il
bottleneck); se il tempo di elaborazione 𝑃𝑃𝑟𝑟 del destinatario è lo stesso per tutti i
pacchetti, l’intervallo tra due ACK consecutivi è di 𝐴𝐴𝑟𝑟 = 𝑃𝑃𝑟𝑟 = 𝑃𝑃𝑏𝑏.
Se lo slot temporale 𝑃𝑃𝑏𝑏 è grande abbastanza per il pacchetto, lo è anche per l’ACK
che ha dimensione minore, dunque l’intervallo tra due ACK viene preservato
durante il cammino di ritorno. Quindi, se effettivamente dopo il primo avvio, i
pacchetti vengono inviati in risposta a un ACK, l’intervallo tra i pacchetti inviati
dal mittente sarà equivalente al tempo di trasmissione di un pacchetto sul
link più lento del percorso.
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
Tuttavia, la stessa cosa che rende un sistema self-clocked stabile quando è attivo, lo rende
anche difficile da avviare: per avere un flusso di dati ci deve essere un ACK che dia il
“segnale” in modo che tale flusso venga inviato, ma per avere ACK ci deve essere un flusso
di dati a sua volta.
Per far partire questo “segnale”, viene proposto l’algoritmo di slow-start, che aumenta
gradualmente la quantità di dati trasmessi. In realtà, lo slow-start non è così lento: impiega
un tempo 𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅2 𝑊𝑊 , dove 𝑹𝑹 è il round-trip time mentre 𝑾𝑾 è la dimensione della
finestra di trasmissione. Significa che la finestra si apre abbastanza rapidamente da non
avere effetti tangibili sulle prestazioni. L’algoritmo garantisce che una connessione
trasmetterà dati ad un rate al massimo doppio del massimo possibile sul
percorso.
Figura 2. Meccanismo slow-start
La direzione orizzontale è il tempo, che è stato suddiviso in intervalli grandi 1
RTT, messi verticalmente uno sopra l’altro. I box grigi sono i pacchetti, quelli bianchi
sono gli ACK corrispondenti.
All’arrivo di ogni ACK corrispondono due pacchetti: uno per l’ACK (l’ACK dice
che un pacchetto ha “lasciato” il sistema, quindi un altro può prendere il suo posto) e
un altro perché nello slow-start l’ACK aumenta la finestra di un pacchetto.
Se la rete di accesso è molto più veloce di quella che collega i due utenti, i due ACK
arrivano al bottleneck praticamente nello stesso momento (motivo per cui questi due
pacchetti sono mostrati uno sopra l’altro).
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
Figura 3. Confronto tra i comportamenti di avvio senza e con slow-start
La dimensione della finestra è di 16KB e il buffer del gateway del bottleneck può
contenere 30 pacchetti. Il percorso si compone di sei nodi. Ciascun punto indica un
pacchetto di 512B. L’asse orizzontale è contiene gli instanti in cui i pacchetti vengono
inviati, l’asse verticale indica i sequence number. Due punti con stessa y ma x
diversa indicano una ritrasmissione.
Il comportamento ideale è che il grafico vada come una diagonale che parte
dall’origine. In questo caso, senza slow-start, solo il 35% della banda viene
utilizzato e quasi tutti i pacchetti vengono ritrasmessi almeno una volta,
eccetto i dati da 54 a 58KB, che vengono ritrasmessi cinque volte.
Nelle stesse condizioni ma con l’uso dello slow-start, non c’è spreco di banda
per le ritrasmissioni.
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
3. CONSERVAZIONE DELL’EQUILIBRIO: ROUND-TRIP
TIMING
Ottenere una buona stima del round-trip time è il fulcro di qualsiasi implementazione del
protocollo TCP.
Un errore che viene commesso è che non viene stimata la variazione 𝝈𝝈𝑹𝑹 del round-trip
time R. Dalla teoria delle code, si sa che R e la sua variazione 𝜎𝜎𝑅𝑅 si incrementano
rapidamente col carico. Se il carico è 𝝆𝝆 (il rapporto tra il tasso di arrivi e il tasso di
invii) allora R e 𝜎𝜎𝑅𝑅 scalano di un fattore (1 − 𝜌𝜌)−1
.
Per esempio, se la rete lavora al 75% della sua capacità, ci si aspetta una variazione del round-
trip time di un fattore 16 (da −2𝜎𝜎 a 2𝜎𝜎). Infatti:
𝜌𝜌 = 75% = 0,75
(1 − 𝜌𝜌)−1
= 4
[−2𝜎𝜎; 2𝜎𝜎] = [−8; 8] 𝑐𝑐𝑐𝑐𝑐𝑐è 𝑢𝑢𝑢𝑢 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑑𝑑𝑑𝑑 16
Il protocollo TCP suggerisce di stimare un round-trip time medio attraverso un filtro passa
basso:
𝑅𝑅 = 𝛼𝛼𝛼𝛼 + (1 − 𝛼𝛼)𝑀𝑀
dove R è la stima del RTT medio, M è la misura del RTT più recente, 𝜶𝜶 è il
guadagno del filtro (con un valore suggerito di 0.9). Una volta che il valore di R viene
aggiornato, il retransmit rimetout (RTO) per il prossimo pacchetto viene settato a 𝛽𝛽𝛽𝛽.
Il parametro 𝛽𝛽 considera le variazioni di RTT: con un 𝛽𝛽 = 2, la rete può adattarsi a un
carico di, al massimo, il 30%; superata questa soglia, una connessione risponderà agli
aumenti di carico con la ritrasmissione di pacchetti che, in realtà, stanno solo
venendo ritardati nella trasmissione ma che non sono andati persi. Questo forza la
rete a svolgere del lavoro aggiuntivo inutile, consumando banda per pacchetti duplicati che
verranno comunque consegnati. È l’equivalente di gettare benzina sul fuoco. Un vantaggio
di utilizzare un 𝛽𝛽 stimato piuttosto che uno fisso è che migliorano le prestazioni quando la
rete è a basso o ad alto carico, soprattutto su quei percorsi molto lenti (come le connessioni
satellitari).
Uno dei più semplici stimatore del RTT è il Recursive Prediction Error. Data una nuova
misura m del RTT, si aggiorna la stima del RTT nel seguente modo:
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
𝑎𝑎 = (1 − 𝑔𝑔)𝑎𝑎 + 𝑔𝑔𝑔𝑔
dove 𝑔𝑔 è il guadagno (0 < 𝑔𝑔 < 1), legato al rapporto segnale-rumore di 𝒎𝒎. La formula
assume più senso se viene modificata nel seguente modo:
𝑎𝑎 = 𝑎𝑎 + 𝑔𝑔(𝑚𝑚 − 𝑎𝑎)
Bisogna pensare ad ‘𝑎𝑎’ come una predizione della prossima misurazione. Il valore ‘𝑚𝑚 − 𝑎𝑎’ è
l’errore su tale predizione e l’espressione sopra dice che la nuova predizione si
basa su quella vecchia più un certo errore. L’errore di predizione si compone di due
parti: l’errore dovuto al rumore sulla misura (𝒈𝒈𝒈𝒈) e l’errore dovuto allo
scostamento di ‘𝒂𝒂’ dal valore vero (𝒈𝒈𝒈𝒈). Il primo viene denominato 𝐸𝐸𝑟𝑟, il secondo 𝐸𝐸𝑒𝑒.
𝑎𝑎 = 𝑎𝑎 + 𝑔𝑔𝐸𝐸𝑟𝑟 + 𝑔𝑔𝐸𝐸𝑒𝑒
In senso figurato, si può dire che 𝑔𝑔𝐸𝐸𝑒𝑒 spinge 𝑎𝑎 nella direzione giusta, mentre 𝑔𝑔𝐸𝐸𝑟𝑟 lo porta in
una direzione casuale. Su una moltitudine di campioni, i contributi di 𝒈𝒈𝑬𝑬𝒓𝒓 tendono a
cancellarsi reciprocamente (troveremo un valore di errore positivo che verrà
compensato da un valore di errore negativo), quindi l’algoritmo tende verso il
valore corretto.
Tuttavia ‘𝑔𝑔’ rappresenta un compromesso: si vuole un 𝑔𝑔 grande per incrementare gli effetti
di 𝐸𝐸𝑒𝑒 ma uno piccolo per minimizzare la deviazione introdotta da 𝐸𝐸𝑟𝑟; in realtà, dato che 𝐸𝐸𝑒𝑒
porta 𝑎𝑎 verso il valore vero, non importa che valore si dia a 𝒈𝒈, è sempre meglio usare
un piccolo guadagno. Inoltre, un 𝒈𝒈 più piccolo produce un 𝒂𝒂 più stabile, a scapito
di richiedere più tempo per raggiungere il valore vero. Tipici valori sono 0.1/0.2
Un altro errore sta nel backoff dopo la ritrasmissione: se un pacchetto deve essere
ritrasmesso più di una volta, come dovrebbero distribuirsi nel tempo queste
ritrasmissioni? Per un endpoint che si trova in una rete di sconosciuta topologia con una
sconosciuta e non conoscibile popolazione, c’è solo una soluzione e cioè quella di usare un
backoff esponenziale. Sebbene tale trattazione non rientri nell’articolo, una prova di
quanto detto sta nel seguente assunto.
Una rete, con buona approssimazione, è un sistema lineare cioè composto da integratori,
guadagni e ritardi. La teoria dei sistemi lineari dice che se è un sistema è stabile, allora la
sua stabilità è esponenziale: ciò suggerisce che un sistema instabile può essere
stabilizzato aggiungendo degli smorzamenti esponenziali (quindi dei backoff
esponenziali) alle sollecitazioni iniziali (le sorgenti di traffico).
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
4. ADATTAMENTO AL PERCORSO: CONGESTION
AVOIDANCE
Se i timer sono configurati correttamente, è possibile affermare con una certa confidenza che
un timeout indica un pacchetto perso e non un timer non funzionante. I pacchetti
vengono persi per due ragioni: vengono danneggiati durante il transito oppure la rete è
congestionata e da qualche parte, lungo il percorso, il buffer è insufficiente. Sulla maggior
parte dei link, la corruzione del pacchetto è un evento raro (<1% dei casi), quindi è
molto più probabile che la perdita di pacchetto sia dovuta alla congestione della rete.
Una strategia di “congestion avoidance” deve necessariamente avere due componenti:
• la rete deve essere capace di segnalare agli endpoint che una congestione è
avvenuta o sta per verificarsi
• gli endpoint devono avere una politica che riduce la trasmissione alla ricezione
di questo segnale o la aumenta se non viene ricevuto nulla
Dato che la perdita di pacchetto è (empiricamente) dovuta a congestione e dato che il
timeout è (empiricamente) dovuto alla congestione, allora il segnale candidato è proprio
il timeout.
Se 𝑳𝑳𝒊𝒊 è il carico sull’i-esimo link, una rete non congestionata può essere modellata dicendo
che 𝐿𝐿𝑖𝑖 cambia molto lentamente rispetto al tempo di campionamento. Quindi:
𝐿𝐿𝑖𝑖 = 𝑁𝑁
con N costante. Se, invece, la rete è soggetta a congestioni, questo sistema di ordine zero
non funziona. La lunghezza media della coda diventa la somma di due termini: il precedente
valore N, che si riferisce al tasso medio di arrivi e al ritardo intrinseco, e a un
secondo valore che si riferisce a una porzione di traffico lasciata indietro durante il
precedente intervallo di tempo. Quindi:
𝐿𝐿𝑖𝑖 = 𝑁𝑁 + 𝛾𝛾𝐿𝐿𝑖𝑖−1
Si può notare un pattern del tutto simile a un’espansione di Taylor; c’è ragione di credere
che potrebbe essere necessario un terzo termine, per avere un sistema del secondo ordine,
ma non finché la rete non sarà cresciuta abbastanza.
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
Quando la rete è congestionata, 𝛾𝛾 sarà grande e la lunghezza delle code inizierà a crescere
esponenzialmente (quindi il termine N perde importanza). Il sistema si stabilizzerà solo
se le sorgenti di traffico ridurranno la trasmissione almeno alla stessa velocità di
crescita delle code. Dato che l’unico controllo sul carico che può avere una sorgente di
traffico è sulla propria finestra di trasmissione, è proprio su questa che bisogna agire.
Quindi:
𝑊𝑊𝑖𝑖 = 𝑑𝑑𝑊𝑊𝑖𝑖−1 (𝑑𝑑 < 1)
ottenendo una riduzione moltiplicativa (che diventa esponenziale se la congestione
persiste). Se non c’è congestione, 𝛾𝛾 deve essere ovviamente prossimo allo zero. Dato, inoltre,
che non viene segnalato in alcun modo se si sta utilizzando al meglio la capacità della rete,
una connessione incrementerà il suo uso di banda fino a trovarne il limite.
Si pone ora il seguente problema: se due connessioni condividono lo stesso percorso e si
converge sull’assegnare il 50% della banda ad entrambe, quando una di queste due
connessioni verrà chiusa, il 50% della banda resterà sprecato. Che politica adottare per
incrementare la banda della connessione rimanente?
Si potrebbe pensare di usare, simmetricamente al decremento, un incremento moltiplicativo.
Ciò sarebbe un errore perché il risultato oscillerà fortemente e si otterrà un throughput
povero. La ragione analitica di questo fenomeno risiede nel fatto che un incremento
moltiplicativo porta la rete a saturarsi molto velocemente e a impiegare molto
tempo per riassettarsi. È per questo che si usa un incremento piccolo e costante:
𝑊𝑊𝑖𝑖 = 𝑊𝑊𝑖𝑖−1 + 𝑢𝑢 (𝑢𝑢 ≪ 𝑊𝑊𝑚𝑚𝑚𝑚𝑚𝑚)
dove 𝑊𝑊𝑚𝑚𝑚𝑚𝑚𝑚 è detta pipesize. Questo è l’incremento additivo. Il meccanismo riduzione
moltiplicativa/incremento additivo viene già implementato nel TCP: la differenza con la
versione di Van Jacobson sta nella scelta dei coefficienti.
Una ragione per usare 0.5 come termine di decremento, sta nel fatto che, quando un
pacchetto viene perso significa che si sta iniziando (o riiniziando) una connessione oppure ci
si trova in un invio stazionario. Nel primo caso, si è a conoscenza del fatto che metà
della attuale finestra di trasmissione ha funzionato bene: in tal modo, dopo la
congestione, si imposta la finestra sulla più grande dimensione conosciuta che funzioni e la si
incrementa lentamente. Nel secondo caso, quando un pacchetto viene perso probabilmente è
perché è stata creata una nuova connessione che ha “rubato” un po’ della banda di quella
precedente. Dunque, si dovrebbe ridurre la finestra del 50% perché la banda stessa
è stata “fatta a metà” tra le due connessioni.
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
Invece, 1 come termine di incremento ha meno giustificazioni. Tuttavia, dato che non
sono state effettuate modifiche per la gestione dei gateway, la finestra di trasmissione a
cui si converge corrisponde al massimo che può accettare il gateway senza perdere
pacchetti.
Figura 4. Confronto tra i comportamenti di avvio senza e con congestion-
avoidance
Connessioni TCP simultanee senza l’uso del congestion-avoidance. Su 11.000 pacchetti
inviati, 4.000 sono ritrasmissioni. Il link è di 25kbps, ciascuna connessione avrebbe
dovuto ricevere 6kbps; invece, una ne ha avuti 8, due ne hanno avuti 5, una 0.5 e 6kbps sono
andati sprecati. Stesse condizioni precedenti ma con l’utilizzo del congestion-avoidance. Su
8281 trasmissioni, solo 89 pacchetti sono stati ritrasmessi. Due connessioni hanno
ricevuto 8kbps, le altre due 4.5.
Figura 5. Banda usata dal TCP senza e con il congestion-avoidance
Il grafico mostra quattro mittenti che non usano congestion-avoidance, su un link di 25kbps.
Notare che, i mittenti inviano, mediamente, il 25% in più di ciò che dovrebbe essere per
“riempire” il collegamento. La linea spessa, invece, indica lo stesso ambiente ma con l’uso del
congestion-avoidance. I primi 5 secondi sono di slow-start, poi ci sono 20 secondi di
oscillazione necessari al TCP a trovare la dimensione corretta della finestra di
trasmissione.
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
5. COMBINAZIONE DEGLI ALGORITMI SLOW-START E
CONGESTION-AVOIDANCE
Il mittente tiene traccia di due variabili: una per la finestra di trasmissione, cwnd, una per
la soglia, ssthresh, che viene utilizzata per spostarsi da un algoritmo all’altro.
Nel momento in cui si verifica un timeout, in ssthresh è memorizzata la metà della
dimensione della finestra di trasmissione attuale (il decremento moltiplicativo del
congestion-avoidance), quindi la cwnd viene settata a 1 (per avviare lo slow-start).
Quando viene ricevuto un nuovo ACK, il seguente algoritmo viene utilizzato:
if (cwnd < ssthresh)
/*se siamo ancora in slow-start, aumenta la finestra
esponenzialmente*/
cwnd +=1
else
/*altrimenti fai congestion-avoidance e incrementa di 1*/
cwnd += 1/cwnd
Se la finestra, su quel link, può contenere un massimo di 𝑊𝑊 pacchetti, cwnd deve avere
un range [𝟎𝟎, 𝑾𝑾], con una risoluzione di almeno
1
𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐
. Inoltre, dato che inviare pacchetti più
piccoli della MTU del percorso diminuisce l’efficienza, è necessario controllare che le
dimensioni frazionate di cwnd non comportino l’invio di pacchetti più piccoli
della MTU stessa.
Congestion Avoidance and Control | Van Jacobson Tandoi Antonio
6. IL CONTROLLO DI CONGESTIONE DEL GATEWAY
Gli algoritmi utilizzati sugli endpoint assicurano che la capacità della rete non venga superata
ma non danno nessuna garanzia su un equo utilizzo di tale capacità. Solo sui gateway c’è
abbastanza informazione da permettere un’allocazione equilibrata della banda tra le
diverse connessioni.
L’obiettivo di questo algoritmo è inviare un segnale ai nodi finali il più presto possibile, ma
non così presto da lasciare i gateway senza traffico. Se si vuole continuare a usare la perdita
di pacchetti come segnale di congestione, allora gli host vedranno persi molti dei loro
pacchetti non appena i gateway comunicheranno loro che stanno usando più
banda di quella che dovrebbero.
L’algoritmo sul gateway, inoltre, dovrebbe ridurre la congestione anche se nessun nodo entra
in congestion avoidance.

More Related Content

Similar to Tcp - Congestion avoidance and control

3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasportoacapone
 
5 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte35 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte3Majong DevJfu
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network ComandiMauro Ferrigno
 
Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...
Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...
Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...Tullio Emilio Di Simone
 
Sistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazioneSistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazioneDavide Ciambelli
 
SAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LAN
SAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LANSAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LAN
SAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LANCarloPodbersig
 
Clink
ClinkClink
Clinkh4f
 
Lumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
Lumit.Basic.Knowledge.Training.Introduzione.Tcp IpLumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
Lumit.Basic.Knowledge.Training.Introduzione.Tcp IpLuca Astori
 
Accesso iniziale nei sistemi a onde millimetriche
Accesso iniziale nei sistemi a onde millimetricheAccesso iniziale nei sistemi a onde millimetriche
Accesso iniziale nei sistemi a onde millimetricheNicolLaMura
 
8 Routing
8 Routing8 Routing
8 Routingacapone
 

Similar to Tcp - Congestion avoidance and control (17)

Kasiski
KasiskiKasiski
Kasiski
 
3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasporto
 
Elaborato
ElaboratoElaborato
Elaborato
 
5 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte35 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte3
 
Livello Data Link
Livello Data LinkLivello Data Link
Livello Data Link
 
Test 03b 26.05.2015
Test 03b   26.05.2015Test 03b   26.05.2015
Test 03b 26.05.2015
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network Comandi
 
Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...
Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...
Simulazione mediante matlab di un sistema di comunicazione con modulazioni mu...
 
Pathneck
PathneckPathneck
Pathneck
 
Sistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazioneSistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazione
 
SAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LAN
SAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LANSAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LAN
SAM: Abilitazione Pratica dell’Accesso Spaziale Multiplo nelle Wireless LAN
 
DataLink LAN
DataLink LANDataLink LAN
DataLink LAN
 
Clink
ClinkClink
Clink
 
Lumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
Lumit.Basic.Knowledge.Training.Introduzione.Tcp IpLumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
Lumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
 
Accesso iniziale nei sistemi a onde millimetriche
Accesso iniziale nei sistemi a onde millimetricheAccesso iniziale nei sistemi a onde millimetriche
Accesso iniziale nei sistemi a onde millimetriche
 
8 Routing
8 Routing8 Routing
8 Routing
 
Prot-09 pchar
Prot-09 pcharProt-09 pchar
Prot-09 pchar
 

More from Antonio Tandoi

Cibi omonimi a personaggi storici
Cibi omonimi a personaggi storiciCibi omonimi a personaggi storici
Cibi omonimi a personaggi storiciAntonio Tandoi
 
La Rosa Bianca, i ragazzi che si opposero a Hitler
La Rosa Bianca, i ragazzi che si opposero a HitlerLa Rosa Bianca, i ragazzi che si opposero a Hitler
La Rosa Bianca, i ragazzi che si opposero a HitlerAntonio Tandoi
 
Dante in veste di medico - La medicina nella Divina Commedia
Dante in veste di medico - La medicina nella Divina CommediaDante in veste di medico - La medicina nella Divina Commedia
Dante in veste di medico - La medicina nella Divina CommediaAntonio Tandoi
 
La seconda guerra punica - Storia completa
La seconda guerra punica - Storia completaLa seconda guerra punica - Storia completa
La seconda guerra punica - Storia completaAntonio Tandoi
 
Grecia contro Cartagine: la battaglia di Hymera
Grecia contro Cartagine: la battaglia di HymeraGrecia contro Cartagine: la battaglia di Hymera
Grecia contro Cartagine: la battaglia di HymeraAntonio Tandoi
 
Storia dei simboli matematici
Storia dei simboli matematiciStoria dei simboli matematici
Storia dei simboli matematiciAntonio Tandoi
 
Situazione politica del Venezuela
Situazione politica del VenezuelaSituazione politica del Venezuela
Situazione politica del VenezuelaAntonio Tandoi
 
Dispensa di Cyber Security
Dispensa di Cyber SecurityDispensa di Cyber Security
Dispensa di Cyber SecurityAntonio Tandoi
 
Il sistema visivo umano
Il sistema visivo umanoIl sistema visivo umano
Il sistema visivo umanoAntonio Tandoi
 
Il modello standard della materia
Il modello standard della materiaIl modello standard della materia
Il modello standard della materiaAntonio Tandoi
 
Funzionamento della Scala Richter
Funzionamento della Scala RichterFunzionamento della Scala Richter
Funzionamento della Scala RichterAntonio Tandoi
 
Un sistema di video streaming per contenuti streaming immersivi e riduzione d...
Un sistema di video streaming per contenuti streaming immersivi e riduzione d...Un sistema di video streaming per contenuti streaming immersivi e riduzione d...
Un sistema di video streaming per contenuti streaming immersivi e riduzione d...Antonio Tandoi
 
Page ranking - Portare ordine sul web
Page ranking - Portare ordine sul webPage ranking - Portare ordine sul web
Page ranking - Portare ordine sul webAntonio Tandoi
 
Ingegneria della conoscenza
Ingegneria della conoscenzaIngegneria della conoscenza
Ingegneria della conoscenzaAntonio Tandoi
 
Funzionamento del Narrow-Band IoT
Funzionamento del Narrow-Band IoTFunzionamento del Narrow-Band IoT
Funzionamento del Narrow-Band IoTAntonio Tandoi
 

More from Antonio Tandoi (20)

Cibi omonimi a personaggi storici
Cibi omonimi a personaggi storiciCibi omonimi a personaggi storici
Cibi omonimi a personaggi storici
 
La Rosa Bianca, i ragazzi che si opposero a Hitler
La Rosa Bianca, i ragazzi che si opposero a HitlerLa Rosa Bianca, i ragazzi che si opposero a Hitler
La Rosa Bianca, i ragazzi che si opposero a Hitler
 
Dante in veste di medico - La medicina nella Divina Commedia
Dante in veste di medico - La medicina nella Divina CommediaDante in veste di medico - La medicina nella Divina Commedia
Dante in veste di medico - La medicina nella Divina Commedia
 
La corsa al Polo Sud
La corsa al Polo SudLa corsa al Polo Sud
La corsa al Polo Sud
 
La seconda guerra punica - Storia completa
La seconda guerra punica - Storia completaLa seconda guerra punica - Storia completa
La seconda guerra punica - Storia completa
 
Grecia contro Cartagine: la battaglia di Hymera
Grecia contro Cartagine: la battaglia di HymeraGrecia contro Cartagine: la battaglia di Hymera
Grecia contro Cartagine: la battaglia di Hymera
 
Storia dei simboli matematici
Storia dei simboli matematiciStoria dei simboli matematici
Storia dei simboli matematici
 
Situazione politica del Venezuela
Situazione politica del VenezuelaSituazione politica del Venezuela
Situazione politica del Venezuela
 
Dispensa di Cyber Security
Dispensa di Cyber SecurityDispensa di Cyber Security
Dispensa di Cyber Security
 
Dispensa di PL-SQL
Dispensa di PL-SQLDispensa di PL-SQL
Dispensa di PL-SQL
 
Il sistema visivo umano
Il sistema visivo umanoIl sistema visivo umano
Il sistema visivo umano
 
Il modello standard della materia
Il modello standard della materiaIl modello standard della materia
Il modello standard della materia
 
Funzionamento della Scala Richter
Funzionamento della Scala RichterFunzionamento della Scala Richter
Funzionamento della Scala Richter
 
Un sistema di video streaming per contenuti streaming immersivi e riduzione d...
Un sistema di video streaming per contenuti streaming immersivi e riduzione d...Un sistema di video streaming per contenuti streaming immersivi e riduzione d...
Un sistema di video streaming per contenuti streaming immersivi e riduzione d...
 
QR Code Security
QR Code SecurityQR Code Security
QR Code Security
 
Page ranking - Portare ordine sul web
Page ranking - Portare ordine sul webPage ranking - Portare ordine sul web
Page ranking - Portare ordine sul web
 
Descrizione di NO-SQL
Descrizione di NO-SQLDescrizione di NO-SQL
Descrizione di NO-SQL
 
Ingegneria della conoscenza
Ingegneria della conoscenzaIngegneria della conoscenza
Ingegneria della conoscenza
 
Funzionamento di LTE
Funzionamento di LTEFunzionamento di LTE
Funzionamento di LTE
 
Funzionamento del Narrow-Band IoT
Funzionamento del Narrow-Band IoTFunzionamento del Narrow-Band IoT
Funzionamento del Narrow-Band IoT
 

Tcp - Congestion avoidance and control

  • 1. TCP - Congestion avoidance and control Le reti di computer sono cresciute esponenzialmente e questa crescita è accompagnata da importanti problemi di congestione. In media, infatti, un gateway perde circa il 10% dei pacchetti in entrata a causa dell’overflow dei buffer di ricezione. Il TCP ha due importanti obiettivi: • controllare il flusso di invio dei pacchetti affinchè il buffer del destinatario non vada in overflow • controllare la congestione della rete quando il router riceve molti più pacchetti di quanti ne possa trasmettere su un certo link (provocando, inevitabilmente, la perdita di pacchetti in eccesso) 1. ADVERTISED WINDOW Il primo problema viene risolto utilizzando una variabile detta Advertised Window, dove il destinatario comunica al mittente quanto spazio è ancora rimanente nel proprio buffer. Il buffer viene rappresentato da un integratore: dato che da esso vengono tolti e aggiunti pacchetti, c’è un ingresso positivo (pacchetti inviati dal mittente) e un ingresso negativo (pacchetti letti dal destinatario). Inoltre, il tempo necessario ai dati per raggiungere il destinatario (𝑻𝑻𝒇𝒇𝒇𝒇 – Tempo feed-forward) e a questi per far ricevere l’ACK (𝑻𝑻𝒇𝒇𝒃𝒃 – Tempo feed-back) è chiamato round-trip time o RTT. Il sistema può essere rappresentato nel seguente modo: 1. 𝐺𝐺𝑐𝑐(𝑠𝑠) = 𝐾𝐾 1+ 𝐾𝐾 𝑠𝑠 [1−𝑒𝑒−𝑠𝑠𝑇𝑇] 𝑐𝑐𝑐𝑐𝑐𝑐 𝑇𝑇 = 𝑅𝑅𝑅𝑅𝑅𝑅 2. 𝐺𝐺𝑐𝑐(𝑠𝑠)∆𝑊𝑊 = 𝐾𝐾∆𝑊𝑊 1+ 𝐾𝐾 𝑠𝑠 [1−𝑒𝑒−𝑠𝑠𝑇𝑇] = 𝑢𝑢(𝑡𝑡)
  • 2. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio 3. → 𝐾𝐾∆𝑊𝑊 = 𝑈𝑈(𝑠𝑠) �1 + 𝐾𝐾 𝑠𝑠 [1 − 𝑒𝑒−𝑠𝑠𝑇𝑇]� 4. → 𝐾𝐾∆𝑊𝑊 = 𝑢𝑢(𝑡𝑡) + 𝐾𝐾 ∫ 𝑢𝑢(𝜏𝜏) − 𝑢𝑢(𝜏𝜏 − 𝑇𝑇)𝑑𝑑𝜏𝜏 𝑡𝑡 −∞ 5. → 𝑢𝑢(𝑡𝑡) = 𝐾𝐾 �∆𝑊𝑊 − ∫ 𝑢𝑢(𝜏𝜏) − 𝑢𝑢(𝜏𝜏 − 𝑇𝑇)𝑑𝑑𝜏𝜏 𝑡𝑡 −∞ � L’integrale può essere scritto come: �∫ 𝑢𝑢(𝜏𝜏)𝑑𝑑𝜏𝜏 𝑡𝑡−𝑇𝑇 −∞ + ∫ 𝑢𝑢(𝜏𝜏)𝑑𝑑𝜏𝜏 𝑡𝑡 𝑡𝑡−𝑇𝑇 − ∫ 𝑢𝑢(𝜏𝜏)𝑑𝑑𝜏𝜏 𝑡𝑡−𝑇𝑇 −∞ � dove il primo e l’ultimo integrale si semplificano in quanto sono opposti Quindi, si ha che: 𝑢𝑢(𝑡𝑡) = 𝐾𝐾 �∆𝑊𝑊 − � 𝑢𝑢(𝜏𝜏)𝑑𝑑𝑑𝑑 𝑡𝑡 𝑡𝑡−𝑇𝑇 � L’integrale prende il nome di in-flight packets, cioè un insieme di pacchetti, il cui primo questo insieme è stato inviato nell’istante 𝑡𝑡 − 𝑇𝑇, e che non sono ancora stati riscontrati. Sono anche detti outstanding packets. Dunque, la grandezza della finestra di trasmissione è data dall’Advertised Window meno gli outstanding packets che stanno per andare a occupare altro spazio nel buffer. 𝑊𝑊 = 𝑢𝑢(𝑡𝑡) 𝐾𝐾 = 𝐴𝐴𝐷𝐷𝐷𝐷 − 𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑛𝑛
  • 3. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio 2. EQUILIBRIO INIZIALE: SLOW START L’algoritmo introdotto da Van Jacobson permette di controllare il traffico della rete in modo più equilibrato. L’errore, nella connessione, viene causato da una connessione riavviata dopo la perdita di un pacchetto. Dato che il destinatario non può generare ACK più velocemente di quanto i pacchetti fluiscano nella rete, il protocollo si definisce “self-clocking”. I sistemi di questo genere modificano automaticamente la banda e i ritardi e hanno un ampio dynamic range (velocità di trasmissione dei pacchetti). Figura 1. Meccanismo di self-clocking Rappresentazione di mittente e destinatario con reti di accesso ad alta banda, connesse da una rete lenta. Il mittente ha appena iniziato e ha trasmesso una finestra di pacchetti, mentre l’ACK del primo di questi pacchetti sta per arrivargli. La dimensione verticale è la banda, quella orizzontale è il tempo: dunque, l’area di un pacchetto (banda per tempo) equivale alla dimensione del pacchetto stesso, cioè al numero dei suoi bit. Dato che il numero di bit/pacchetto non cambia, con una banda minore sarà necessario più tempo per trasmettere quei bit, quindi il pacchetto viene “spalmato” sull’asse orizzontale. 𝑃𝑃𝑏𝑏 rappresenta il tempo di trasmissione del pacchetto sul link più lento (il bottleneck); se il tempo di elaborazione 𝑃𝑃𝑟𝑟 del destinatario è lo stesso per tutti i pacchetti, l’intervallo tra due ACK consecutivi è di 𝐴𝐴𝑟𝑟 = 𝑃𝑃𝑟𝑟 = 𝑃𝑃𝑏𝑏. Se lo slot temporale 𝑃𝑃𝑏𝑏 è grande abbastanza per il pacchetto, lo è anche per l’ACK che ha dimensione minore, dunque l’intervallo tra due ACK viene preservato durante il cammino di ritorno. Quindi, se effettivamente dopo il primo avvio, i pacchetti vengono inviati in risposta a un ACK, l’intervallo tra i pacchetti inviati dal mittente sarà equivalente al tempo di trasmissione di un pacchetto sul link più lento del percorso.
  • 4. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio Tuttavia, la stessa cosa che rende un sistema self-clocked stabile quando è attivo, lo rende anche difficile da avviare: per avere un flusso di dati ci deve essere un ACK che dia il “segnale” in modo che tale flusso venga inviato, ma per avere ACK ci deve essere un flusso di dati a sua volta. Per far partire questo “segnale”, viene proposto l’algoritmo di slow-start, che aumenta gradualmente la quantità di dati trasmessi. In realtà, lo slow-start non è così lento: impiega un tempo 𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅2 𝑊𝑊 , dove 𝑹𝑹 è il round-trip time mentre 𝑾𝑾 è la dimensione della finestra di trasmissione. Significa che la finestra si apre abbastanza rapidamente da non avere effetti tangibili sulle prestazioni. L’algoritmo garantisce che una connessione trasmetterà dati ad un rate al massimo doppio del massimo possibile sul percorso. Figura 2. Meccanismo slow-start La direzione orizzontale è il tempo, che è stato suddiviso in intervalli grandi 1 RTT, messi verticalmente uno sopra l’altro. I box grigi sono i pacchetti, quelli bianchi sono gli ACK corrispondenti. All’arrivo di ogni ACK corrispondono due pacchetti: uno per l’ACK (l’ACK dice che un pacchetto ha “lasciato” il sistema, quindi un altro può prendere il suo posto) e un altro perché nello slow-start l’ACK aumenta la finestra di un pacchetto. Se la rete di accesso è molto più veloce di quella che collega i due utenti, i due ACK arrivano al bottleneck praticamente nello stesso momento (motivo per cui questi due pacchetti sono mostrati uno sopra l’altro).
  • 5. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio Figura 3. Confronto tra i comportamenti di avvio senza e con slow-start La dimensione della finestra è di 16KB e il buffer del gateway del bottleneck può contenere 30 pacchetti. Il percorso si compone di sei nodi. Ciascun punto indica un pacchetto di 512B. L’asse orizzontale è contiene gli instanti in cui i pacchetti vengono inviati, l’asse verticale indica i sequence number. Due punti con stessa y ma x diversa indicano una ritrasmissione. Il comportamento ideale è che il grafico vada come una diagonale che parte dall’origine. In questo caso, senza slow-start, solo il 35% della banda viene utilizzato e quasi tutti i pacchetti vengono ritrasmessi almeno una volta, eccetto i dati da 54 a 58KB, che vengono ritrasmessi cinque volte. Nelle stesse condizioni ma con l’uso dello slow-start, non c’è spreco di banda per le ritrasmissioni.
  • 6. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio 3. CONSERVAZIONE DELL’EQUILIBRIO: ROUND-TRIP TIMING Ottenere una buona stima del round-trip time è il fulcro di qualsiasi implementazione del protocollo TCP. Un errore che viene commesso è che non viene stimata la variazione 𝝈𝝈𝑹𝑹 del round-trip time R. Dalla teoria delle code, si sa che R e la sua variazione 𝜎𝜎𝑅𝑅 si incrementano rapidamente col carico. Se il carico è 𝝆𝝆 (il rapporto tra il tasso di arrivi e il tasso di invii) allora R e 𝜎𝜎𝑅𝑅 scalano di un fattore (1 − 𝜌𝜌)−1 . Per esempio, se la rete lavora al 75% della sua capacità, ci si aspetta una variazione del round- trip time di un fattore 16 (da −2𝜎𝜎 a 2𝜎𝜎). Infatti: 𝜌𝜌 = 75% = 0,75 (1 − 𝜌𝜌)−1 = 4 [−2𝜎𝜎; 2𝜎𝜎] = [−8; 8] 𝑐𝑐𝑐𝑐𝑐𝑐è 𝑢𝑢𝑢𝑢 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑑𝑑𝑑𝑑 16 Il protocollo TCP suggerisce di stimare un round-trip time medio attraverso un filtro passa basso: 𝑅𝑅 = 𝛼𝛼𝛼𝛼 + (1 − 𝛼𝛼)𝑀𝑀 dove R è la stima del RTT medio, M è la misura del RTT più recente, 𝜶𝜶 è il guadagno del filtro (con un valore suggerito di 0.9). Una volta che il valore di R viene aggiornato, il retransmit rimetout (RTO) per il prossimo pacchetto viene settato a 𝛽𝛽𝛽𝛽. Il parametro 𝛽𝛽 considera le variazioni di RTT: con un 𝛽𝛽 = 2, la rete può adattarsi a un carico di, al massimo, il 30%; superata questa soglia, una connessione risponderà agli aumenti di carico con la ritrasmissione di pacchetti che, in realtà, stanno solo venendo ritardati nella trasmissione ma che non sono andati persi. Questo forza la rete a svolgere del lavoro aggiuntivo inutile, consumando banda per pacchetti duplicati che verranno comunque consegnati. È l’equivalente di gettare benzina sul fuoco. Un vantaggio di utilizzare un 𝛽𝛽 stimato piuttosto che uno fisso è che migliorano le prestazioni quando la rete è a basso o ad alto carico, soprattutto su quei percorsi molto lenti (come le connessioni satellitari). Uno dei più semplici stimatore del RTT è il Recursive Prediction Error. Data una nuova misura m del RTT, si aggiorna la stima del RTT nel seguente modo:
  • 7. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio 𝑎𝑎 = (1 − 𝑔𝑔)𝑎𝑎 + 𝑔𝑔𝑔𝑔 dove 𝑔𝑔 è il guadagno (0 < 𝑔𝑔 < 1), legato al rapporto segnale-rumore di 𝒎𝒎. La formula assume più senso se viene modificata nel seguente modo: 𝑎𝑎 = 𝑎𝑎 + 𝑔𝑔(𝑚𝑚 − 𝑎𝑎) Bisogna pensare ad ‘𝑎𝑎’ come una predizione della prossima misurazione. Il valore ‘𝑚𝑚 − 𝑎𝑎’ è l’errore su tale predizione e l’espressione sopra dice che la nuova predizione si basa su quella vecchia più un certo errore. L’errore di predizione si compone di due parti: l’errore dovuto al rumore sulla misura (𝒈𝒈𝒈𝒈) e l’errore dovuto allo scostamento di ‘𝒂𝒂’ dal valore vero (𝒈𝒈𝒈𝒈). Il primo viene denominato 𝐸𝐸𝑟𝑟, il secondo 𝐸𝐸𝑒𝑒. 𝑎𝑎 = 𝑎𝑎 + 𝑔𝑔𝐸𝐸𝑟𝑟 + 𝑔𝑔𝐸𝐸𝑒𝑒 In senso figurato, si può dire che 𝑔𝑔𝐸𝐸𝑒𝑒 spinge 𝑎𝑎 nella direzione giusta, mentre 𝑔𝑔𝐸𝐸𝑟𝑟 lo porta in una direzione casuale. Su una moltitudine di campioni, i contributi di 𝒈𝒈𝑬𝑬𝒓𝒓 tendono a cancellarsi reciprocamente (troveremo un valore di errore positivo che verrà compensato da un valore di errore negativo), quindi l’algoritmo tende verso il valore corretto. Tuttavia ‘𝑔𝑔’ rappresenta un compromesso: si vuole un 𝑔𝑔 grande per incrementare gli effetti di 𝐸𝐸𝑒𝑒 ma uno piccolo per minimizzare la deviazione introdotta da 𝐸𝐸𝑟𝑟; in realtà, dato che 𝐸𝐸𝑒𝑒 porta 𝑎𝑎 verso il valore vero, non importa che valore si dia a 𝒈𝒈, è sempre meglio usare un piccolo guadagno. Inoltre, un 𝒈𝒈 più piccolo produce un 𝒂𝒂 più stabile, a scapito di richiedere più tempo per raggiungere il valore vero. Tipici valori sono 0.1/0.2 Un altro errore sta nel backoff dopo la ritrasmissione: se un pacchetto deve essere ritrasmesso più di una volta, come dovrebbero distribuirsi nel tempo queste ritrasmissioni? Per un endpoint che si trova in una rete di sconosciuta topologia con una sconosciuta e non conoscibile popolazione, c’è solo una soluzione e cioè quella di usare un backoff esponenziale. Sebbene tale trattazione non rientri nell’articolo, una prova di quanto detto sta nel seguente assunto. Una rete, con buona approssimazione, è un sistema lineare cioè composto da integratori, guadagni e ritardi. La teoria dei sistemi lineari dice che se è un sistema è stabile, allora la sua stabilità è esponenziale: ciò suggerisce che un sistema instabile può essere stabilizzato aggiungendo degli smorzamenti esponenziali (quindi dei backoff esponenziali) alle sollecitazioni iniziali (le sorgenti di traffico).
  • 8. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio 4. ADATTAMENTO AL PERCORSO: CONGESTION AVOIDANCE Se i timer sono configurati correttamente, è possibile affermare con una certa confidenza che un timeout indica un pacchetto perso e non un timer non funzionante. I pacchetti vengono persi per due ragioni: vengono danneggiati durante il transito oppure la rete è congestionata e da qualche parte, lungo il percorso, il buffer è insufficiente. Sulla maggior parte dei link, la corruzione del pacchetto è un evento raro (<1% dei casi), quindi è molto più probabile che la perdita di pacchetto sia dovuta alla congestione della rete. Una strategia di “congestion avoidance” deve necessariamente avere due componenti: • la rete deve essere capace di segnalare agli endpoint che una congestione è avvenuta o sta per verificarsi • gli endpoint devono avere una politica che riduce la trasmissione alla ricezione di questo segnale o la aumenta se non viene ricevuto nulla Dato che la perdita di pacchetto è (empiricamente) dovuta a congestione e dato che il timeout è (empiricamente) dovuto alla congestione, allora il segnale candidato è proprio il timeout. Se 𝑳𝑳𝒊𝒊 è il carico sull’i-esimo link, una rete non congestionata può essere modellata dicendo che 𝐿𝐿𝑖𝑖 cambia molto lentamente rispetto al tempo di campionamento. Quindi: 𝐿𝐿𝑖𝑖 = 𝑁𝑁 con N costante. Se, invece, la rete è soggetta a congestioni, questo sistema di ordine zero non funziona. La lunghezza media della coda diventa la somma di due termini: il precedente valore N, che si riferisce al tasso medio di arrivi e al ritardo intrinseco, e a un secondo valore che si riferisce a una porzione di traffico lasciata indietro durante il precedente intervallo di tempo. Quindi: 𝐿𝐿𝑖𝑖 = 𝑁𝑁 + 𝛾𝛾𝐿𝐿𝑖𝑖−1 Si può notare un pattern del tutto simile a un’espansione di Taylor; c’è ragione di credere che potrebbe essere necessario un terzo termine, per avere un sistema del secondo ordine, ma non finché la rete non sarà cresciuta abbastanza.
  • 9. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio Quando la rete è congestionata, 𝛾𝛾 sarà grande e la lunghezza delle code inizierà a crescere esponenzialmente (quindi il termine N perde importanza). Il sistema si stabilizzerà solo se le sorgenti di traffico ridurranno la trasmissione almeno alla stessa velocità di crescita delle code. Dato che l’unico controllo sul carico che può avere una sorgente di traffico è sulla propria finestra di trasmissione, è proprio su questa che bisogna agire. Quindi: 𝑊𝑊𝑖𝑖 = 𝑑𝑑𝑊𝑊𝑖𝑖−1 (𝑑𝑑 < 1) ottenendo una riduzione moltiplicativa (che diventa esponenziale se la congestione persiste). Se non c’è congestione, 𝛾𝛾 deve essere ovviamente prossimo allo zero. Dato, inoltre, che non viene segnalato in alcun modo se si sta utilizzando al meglio la capacità della rete, una connessione incrementerà il suo uso di banda fino a trovarne il limite. Si pone ora il seguente problema: se due connessioni condividono lo stesso percorso e si converge sull’assegnare il 50% della banda ad entrambe, quando una di queste due connessioni verrà chiusa, il 50% della banda resterà sprecato. Che politica adottare per incrementare la banda della connessione rimanente? Si potrebbe pensare di usare, simmetricamente al decremento, un incremento moltiplicativo. Ciò sarebbe un errore perché il risultato oscillerà fortemente e si otterrà un throughput povero. La ragione analitica di questo fenomeno risiede nel fatto che un incremento moltiplicativo porta la rete a saturarsi molto velocemente e a impiegare molto tempo per riassettarsi. È per questo che si usa un incremento piccolo e costante: 𝑊𝑊𝑖𝑖 = 𝑊𝑊𝑖𝑖−1 + 𝑢𝑢 (𝑢𝑢 ≪ 𝑊𝑊𝑚𝑚𝑚𝑚𝑚𝑚) dove 𝑊𝑊𝑚𝑚𝑚𝑚𝑚𝑚 è detta pipesize. Questo è l’incremento additivo. Il meccanismo riduzione moltiplicativa/incremento additivo viene già implementato nel TCP: la differenza con la versione di Van Jacobson sta nella scelta dei coefficienti. Una ragione per usare 0.5 come termine di decremento, sta nel fatto che, quando un pacchetto viene perso significa che si sta iniziando (o riiniziando) una connessione oppure ci si trova in un invio stazionario. Nel primo caso, si è a conoscenza del fatto che metà della attuale finestra di trasmissione ha funzionato bene: in tal modo, dopo la congestione, si imposta la finestra sulla più grande dimensione conosciuta che funzioni e la si incrementa lentamente. Nel secondo caso, quando un pacchetto viene perso probabilmente è perché è stata creata una nuova connessione che ha “rubato” un po’ della banda di quella precedente. Dunque, si dovrebbe ridurre la finestra del 50% perché la banda stessa è stata “fatta a metà” tra le due connessioni.
  • 10. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio Invece, 1 come termine di incremento ha meno giustificazioni. Tuttavia, dato che non sono state effettuate modifiche per la gestione dei gateway, la finestra di trasmissione a cui si converge corrisponde al massimo che può accettare il gateway senza perdere pacchetti. Figura 4. Confronto tra i comportamenti di avvio senza e con congestion- avoidance Connessioni TCP simultanee senza l’uso del congestion-avoidance. Su 11.000 pacchetti inviati, 4.000 sono ritrasmissioni. Il link è di 25kbps, ciascuna connessione avrebbe dovuto ricevere 6kbps; invece, una ne ha avuti 8, due ne hanno avuti 5, una 0.5 e 6kbps sono andati sprecati. Stesse condizioni precedenti ma con l’utilizzo del congestion-avoidance. Su 8281 trasmissioni, solo 89 pacchetti sono stati ritrasmessi. Due connessioni hanno ricevuto 8kbps, le altre due 4.5. Figura 5. Banda usata dal TCP senza e con il congestion-avoidance Il grafico mostra quattro mittenti che non usano congestion-avoidance, su un link di 25kbps. Notare che, i mittenti inviano, mediamente, il 25% in più di ciò che dovrebbe essere per “riempire” il collegamento. La linea spessa, invece, indica lo stesso ambiente ma con l’uso del congestion-avoidance. I primi 5 secondi sono di slow-start, poi ci sono 20 secondi di oscillazione necessari al TCP a trovare la dimensione corretta della finestra di trasmissione.
  • 11. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio 5. COMBINAZIONE DEGLI ALGORITMI SLOW-START E CONGESTION-AVOIDANCE Il mittente tiene traccia di due variabili: una per la finestra di trasmissione, cwnd, una per la soglia, ssthresh, che viene utilizzata per spostarsi da un algoritmo all’altro. Nel momento in cui si verifica un timeout, in ssthresh è memorizzata la metà della dimensione della finestra di trasmissione attuale (il decremento moltiplicativo del congestion-avoidance), quindi la cwnd viene settata a 1 (per avviare lo slow-start). Quando viene ricevuto un nuovo ACK, il seguente algoritmo viene utilizzato: if (cwnd < ssthresh) /*se siamo ancora in slow-start, aumenta la finestra esponenzialmente*/ cwnd +=1 else /*altrimenti fai congestion-avoidance e incrementa di 1*/ cwnd += 1/cwnd Se la finestra, su quel link, può contenere un massimo di 𝑊𝑊 pacchetti, cwnd deve avere un range [𝟎𝟎, 𝑾𝑾], con una risoluzione di almeno 1 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 . Inoltre, dato che inviare pacchetti più piccoli della MTU del percorso diminuisce l’efficienza, è necessario controllare che le dimensioni frazionate di cwnd non comportino l’invio di pacchetti più piccoli della MTU stessa.
  • 12. Congestion Avoidance and Control | Van Jacobson Tandoi Antonio 6. IL CONTROLLO DI CONGESTIONE DEL GATEWAY Gli algoritmi utilizzati sugli endpoint assicurano che la capacità della rete non venga superata ma non danno nessuna garanzia su un equo utilizzo di tale capacità. Solo sui gateway c’è abbastanza informazione da permettere un’allocazione equilibrata della banda tra le diverse connessioni. L’obiettivo di questo algoritmo è inviare un segnale ai nodi finali il più presto possibile, ma non così presto da lasciare i gateway senza traffico. Se si vuole continuare a usare la perdita di pacchetti come segnale di congestione, allora gli host vedranno persi molti dei loro pacchetti non appena i gateway comunicheranno loro che stanno usando più banda di quella che dovrebbero. L’algoritmo sul gateway, inoltre, dovrebbe ridurre la congestione anche se nessun nodo entra in congestion avoidance.