Riassunto dell'originale articolo in cui si introduce il flavour Westwood, che ha lo scopo di stimare a priori la banda da riservare alla trasmissione.
1. TCP Westwood - Stima della banda
Il TCP Westwood è una variante TCP che consiste in una modifica dell’algoritmo di
controllo della finestra di trasmissione del mittente. La miglioria diventa molto significativa
sui link wireless dato che il TCPW si basa sulla stima della banda end-to-end per
discriminare la causa di perdita di pacchetti.
1. INTRODUZIONE
Al giorno d’oggi, il controllo di congestione del TCP si basa prettamente sulla perdita di
pacchetti come indicatore della congestione stessa, su qualunque tipo di link. Tuttavia, nella
porzione cablata della rete, la congestione potrebbe essere causata da un router
che inizia a perdere pacchetti; sulla porzione wireless, la causa della perdita
potrebbe essere del rumore sul canale radio. Ciò è un problema perché il TCP Reno
(TCPR) non ha i mezzi per distinguere e isolare una “congestione cablata” da una
“congestione wireless”: di conseguenza, il TCPR reagisce sempre e comunque con una
drastica riduzione della finestra di trasmissione.
Nel TCPW, il mittente monitora il tasso di ricezione degli ACK e da esso stima il
tasso di pacchetti sulla rete raggiunto in quel momento. Quando viene percepita una
perdita, il mittente utilizza la banda stimata per impostare correttamente cwnd e
ssthresh.
In questo modo, il TCPW evita le riduzioni drastiche di tali parametri e permette alla rete
di raggiungere il regime più velocemente, motivo per cui tale meccanismo è detto faster
recovery. L’utilizzo del TCPW, inoltre, non entra in conflitto con il TCPR.
Ci sono altre varianti del TCP che utilizzano la stima di banda per impostare i parametri del
TCP. Per esempio, il Bandwith Aware TCP (BA-TCP) basa le proprie misurazioni sui
router intermedi e su tali informazioni elabora anche in che modo dividere equamente la
banda tra le varie connessioni e impostare i parametri di cui sopra.
Tuttavia, questa variante viola uno dei principi su cui si basa l’idea del TCP, cioè che ogni
strato è indipendente dall’altro.
2. MISURAZIONE DELLA BANDA END-TO-END
2. TCP Westwood: Band Estimation for Wireless Links | Mascolo, Casetti, Gerla Tandoi Antonio
Il design di TCPW rispetta, invece, l’assunto che il controllo di congestione debba essere
effettuato end-to-end e che la rete nel mezzo venga considerata una black box.
Innanzitutto, la sorgente deve “mettere alla prova” il link in modo progressivo,
andando a incrementare il carico in input, in modo da determinare a che tasso possa
trasmettere. Questo, finché non viene ricevuto in feedback implicito sulla saturazione,
ovvero timeout o 3DUPACK. Il fulcro di questo algoritmo risiede proprio negli ACK.
Quando un ACK arriva alla sorgente, si può affermare che questo contiene l’informazione
relativa al fatto che un certo carico di dati, corrispondente a un certo pacchetto, è
stato consegnato a destinazione. Se la trasmissione non è affetta da perdite, basta
calcolare la media dei dati consegnati nel tempo per ottenere una buona stima
della banda attualmente usata dalla sorgente.
Questa stima, inoltre, dovrebbe tener conto degli eventuali DUPACK.
Ciononostante, la sorgente non è in grado di conoscere quale segmento abbia causato il
DUPACK e quindi non può aggiornare il conteggio dei dati aggiungendo la dimensione di
tale segmento; è per questo motivo che viene utilizzata una media della dimensione
dei segmenti. Per semplicità della trattazione, si assume che tutti i segmenti abbiano stessa
dimensione: di conseguenza, si può dire che il sequence number viene incrementato
di 1 per ogni segmento.
Si procede, dunque, al calcolo della stima.
Figura 1. Campionamento della banda
Se viene ricevuto un ACK all’instante 𝑡𝑡𝑘𝑘, allora significa che una certa quantità di dati 𝑑𝑑𝑘𝑘
è stata ricevuta dal destinatario TCP. Si può misurare la banda usata per questa singola
trasmissione come:
𝑏𝑏𝑘𝑘 =
𝑑𝑑𝑘𝑘
𝑡𝑡𝑘𝑘 − 𝑡𝑡𝑘𝑘−1
dove 𝒕𝒕𝒌𝒌−𝟏𝟏 è l’istante in cui è stato ricevuto l’ACK precedente.
3. TCP Westwood: Band Estimation for Wireless Links | Mascolo, Casetti, Gerla Tandoi Antonio
Dato che la congestione si verifica quando il traffico eccede la capacità del link, si adopera
un filtro passa-basso per ottenere le componenti a bassa frequenza della banda.
La scelta ricade sul discretizzare, secondo l’approsimazione di Tustin, un filtro continuo:
𝑏𝑏�𝑘𝑘 =
2𝜏𝜏
𝑡𝑡𝑘𝑘 − 𝑡𝑡𝑘𝑘−1
− 1
2𝜏𝜏
𝑡𝑡𝑘𝑘 − 𝑡𝑡𝑘𝑘−1
+ 1
𝑏𝑏�𝑘𝑘−1 +
𝑏𝑏𝑘𝑘 + 𝑏𝑏𝑘𝑘−1
2𝜏𝜏
𝑡𝑡𝑘𝑘 − 𝑡𝑡𝑘𝑘−1
+ 1
dove 𝒃𝒃𝒌𝒌
� è la stima ottenuta per l’istante 𝒕𝒕𝒌𝒌 e
𝟏𝟏
𝝉𝝉
è la frequenza di taglio del filtro.
Se si considera un tempo di interarrivo (𝒕𝒕𝒌𝒌 − 𝒕𝒕𝒌𝒌−𝟏𝟏) costante, la scrittura si riduce a:
𝑏𝑏�𝑘𝑘 = 𝑎𝑎𝑏𝑏�𝑘𝑘−1 +
(1 − 𝑎𝑎)
2
[𝑏𝑏𝑘𝑘 + 𝑏𝑏𝑘𝑘−1] (𝑎𝑎 = 0.9)
È possibile osservare che il valore 𝒃𝒃�𝒌𝒌 dipende, per il 90%, dal precedente valore
stimato, più una media aritmetica delle due ultime due misurazioni.
Sebbene, comunque, questo filtro sia utile per comprendere in che modo funzioni il calcolo
della stima, non può essere utilizzato nelle reti reali perché il tempo di interarrivo
non è costante. Infatti, quando tale valore aumenta, l’ultima stima 𝑏𝑏�𝑘𝑘−1 inizia a perdere
significato, dato che rappresenta un valore più vecchio, mentre aumenta la rilevanza degli
ultimi due campioni. Questo è esattamente ciò che accade col filtro: il coefficiente ‘𝒂𝒂’
diminuisce quando aumenta il tempo di interarrivo.
Si consideri ora la frequenza di taglio. Un filtro con una frequenza di taglio
1
𝜏𝜏
va a tagliare
tutte le componenti in frequenza al di sopra di tale valore. Secondo il teorema di Nyquist,
per campionare un segnale con una banda di
𝟏𝟏
𝝉𝝉
, è necessario un passo di
campionamento di
𝝉𝝉
𝟐𝟐
. Tuttavia, dato che la ricezione degli ACK potrebbe essere irregolare,
diventa difficile rispettare il vincolo imposto dal teorema. Dunque, si stabilisce che, se è
trascorso un tempo:
𝜏𝜏
𝑚𝑚
(𝑚𝑚 ≥ 2)
dall’ultimo ACK ricevuto senza averne ricevuto uno nuovo, il filtro assume un campione
virtuale 𝑏𝑏𝑘𝑘 = 0.
È per questo motivo che in Figura 1. si presenta un campione senza dicitura. Negli istanti
che intercorrono tra 𝑡𝑡𝑘𝑘 e 𝑡𝑡𝑘𝑘+𝑛𝑛−1 non viene ricevuto nessun ACK, dunque viene assunta una
banda 𝑏𝑏𝑘𝑘 = 0.
4. TCP Westwood: Band Estimation for Wireless Links | Mascolo, Casetti, Gerla Tandoi Antonio
Come affermato precedentemente, i DUPACK dovrebbero essere conteggiati all’interno
della stima della banda, dato che il loro arrivo indica un segmento correttamente
ricevuto dal destinatario, sebbene in ordine errato. Tuttavia, si considera il
DUPACK come sempre e solo un ACK (quello originale) dato che il segmento di riferimento
è stato già conteggiato. Il problema si presenta nel momento in cui è l’ACK originale a
essere in ritardo. Combinare, simultaneamente, DUPACK e ACK ritardati, potrebbe
distruggere il processo di stima della banda.
Prima di proseguire ulteriormente, comunque, è necessario ricordare due aspetti necessari a
risolvere tale problematica:
• la sorgente deve tener traccia del numero di DUPACK arrivati prima che
nuovi segmenti vengano riscontrati
• la sorgente deve capire quando un ACK sta ritardando e deve agire di
conseguenza
L’approccio usato per risolvere questi due problemi congiuntamente, prende il nome di
AckedCount.
PROCEDURE AckedCount
cumul_ack = current_ack_segno – last_ack_segno;
if (cumul_ack == 0)
accounted_for++;
cumul_ack = 1;
endif
if (cumul_ack > 1)
if (accounted_for >= cumul_ack)
accounted_for = accounted_for – cumul_ack;
cumul_ack = 1;
else if (accounted_for < cumul_ack)
cumul_ack = cumul_ack - accounted_for;
accounted_for = 0;
endif
endif
last_ack_segno = current_ack_segno;
acked = cumul_ack;
return (acked);
END PROCEDURE
5. TCP Westwood: Band Estimation for Wireless Links | Mascolo, Casetti, Gerla Tandoi Antonio
La variabile chiave è accounted, che tiene traccia dei DUPACK ricevuti. Quando viene
ricevuto un ACK, viene determinato il numero di segmenti che riscontra (cumul_ack): se
tale valore è nullo, si tratta chiaramente di un DUPACK e conta sempre come un segmento
riscontrato; al contrario, se il valore è maggiore di 1, allora l’ACK ricevuto è un ACK
ritardatario oppure un ACK arrivato dopo una ritrasmissione: in tal caso il numero di
segmenti deve essere confrontato con quelli già riscontrati.
Se l’ACK ricevuto riscontra meno pacchetti di quelli attesi, significa che alcuni di questi
sono stati già riscontrati col DUPACK e non vanno conteggiati ancora. Al
contrario, significa che alcuni sono stati riscontrati dal DUPACK altri dall’ACK
ricevuto.
6. TCP Westwood: Band Estimation for Wireless Links | Mascolo, Casetti, Gerla Tandoi Antonio
3. IMPLEMENTAZIONE DEL TCP WESTWOOD
L’impostazione delle variabili cwnd e ssthresh utilizzando il TCPW, segue due modalità.
Quella di seguito riguarda la gestione di n ACK duplicati (pseudocodice):
if (n DUPACK ricevuti)
ssthresh = (BWE * RTTmin) /seg_size;
if (cwnd > ssthresh) /*congestion-avoidance*/
cwnd = sstresh;
endif
endif
dove BWE è la banda stimata, RTTmin è il più piccolo RTT misurato, seg_size
è la lunghezza del segmento espressa in bit.
Quando vengono ricevuti n DUPACK, significa che si è raggiunta la capacità della rete:
ssthresh viene impostato della stessa dimensione disponibile sul bottleneck quando il buffer
è vuoto (BWE * RTTmin), poi cwnd viene posto uguale a ssthresh e si rientra nuovamente
in congestion-avoidance. Ne consegue, che anche in slow-start, cwnd viene incrementato
esponenzialmente. Si sceglie RTTmin in modo che la coda possa drenarsi in seguito a una
congestione.
Quella di seguito riguarda la gestione del timeout (pseudocodice):
if (timeout)
ssthresh = (BWE * RTTmin) /seg_size;
if (ssthresh < 2) /*congestion-avoidance*/
sstresh = 2;
endif
cwnd = 1;
endif
Dopo un timeout, sia cwnd che c ssthresh vengono impostati a 1 e BWE rispettivamente,
quindi viene mantenuto il comportamento del TCPR ma con faster recovery, perché
si imposta già sshtresh alla banda disponibile al momento del timeout.
7. TCP Westwood: Band Estimation for Wireless Links | Mascolo, Casetti, Gerla Tandoi Antonio
Un importante obiettivo del TCPW, come di qualsiasi implementazione del TCP, è l’utilizzo
equilibrato della banda. Si considerino due connessioni con lo stesso RTT e si supponga
che un RTT corrisponda a X trasmissioni e che il link bottleneck abbia X buffer.
La connessione A inizia prima. La sua finestra “cicla” da X a 2X e ogni ciclo termina con un
overflow. Più tardi, la connessione B inizia prima in slow-start e poi in congestion-avoidance.
In congestion-avoidance, le finestre di A e B crescono, approssimativamente, con
lo stesso rate, cioè un segmento per RTT. Nel momento in cui si raggiunge l’overflow,
la finestra ha dimensione:
𝑊𝑊𝑖𝑖 = 𝑅𝑅𝑖𝑖 �
𝑏𝑏
𝐶𝐶
+ 𝑅𝑅𝑅𝑅𝑅𝑅�
dove R è il rate raggiunto, b è la dimensione del buffer del bottleneck e C è la
capacità del link bottleneck. Dopo l’overflow, il TCPW riduce alla finestra alla seguente
dimensione:
𝑊𝑊𝑖𝑖 = 𝑅𝑅𝑖𝑖 (𝑅𝑅𝑅𝑅𝑅𝑅)
Il rapporto
𝑊𝑊 𝐵𝐵
𝑊𝑊 𝐴𝐴
continua a crescere anche durante la congestion-avoidance. L’equilibrio viene
raggiunto quando le due connessioni hanno la stessa finestra e la stessa banda.