77 lines
3.6 KiB
Markdown
77 lines
3.6 KiB
Markdown
# Complementi di Reti
|
|
|
|
## Controllo di Congestione
|
|
|
|
Due approcci:
|
|
* **End-to-End**: i terminali / host gestiscono tutto, la rete (link/router) non fa nulla a parte scartare pacchetti in eccesso. **TCP**
|
|
* **Assistito**: I router comunicano agli endpoint e gli altri router di congestione, (settando un bit, calcolando il rate ottimale e includendolo nei pacchetti). **ATM** (esempi su slides)
|
|
|
|
### TCP - Controllo di Congestione
|
|
|
|
* End-to-End
|
|
* Window protocol: il trasmettitore utilizza una *sliding window* che scorre sui dati da trasmettere, identificando una finestra chiamata **congestion window** (congwin).
|
|
```
|
|
**congwin**
|
|
|||||||||||||||||||||||||||-||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||-||||||||||||||||||
|
|
*gia' inviati con successo* ^base (paccetti inviati, no feedback yet) ^nextseqnum (da inviare) *pacchetti futuri*
|
|
|
|
```
|
|
La dimensione della finestra di congestione e' regolata **dinamicamente** da TCP, che la regola alla massima banda possibile senza congestione.
|
|
|
|
#### Regolazione di congwin: algoritmo e procedura
|
|
|
|
Pe identificare la dimensione ottimale della finestra, TCP usa un algoritmo chiamato basato su due procedure:
|
|
|
|
* **Slow Start**: all'inizio, congwin e' aumentata esponenzialmente fino a che non si verifica una congestione. Per fare cio', TCP duplica il numero di pacchetti inviati a ogni ricezione di ACK (con successo). Quindi invia 1,2,4,8,16... pacchetti, fino a congestionare la rete. TCP identifica una congestione tramite timeout expiration (Tahoe TCP) o ricezione di 3 ACK duplicati (Reno TCP).
|
|
* **Congestion Avoidance**: Appena una congestione e' rilevata, TCP diminuisce il numero di pacchetti (Tahoe: inizia da 1, Reno: dimezza) e setta il **threshold** tra Slow Start e Congestion Avoidance alla meta` del numero di pacchetti che ha causato la congestione (congestione a 16 -> threshold a 8). Durante la fase di congestion avoidance, TCP incrementa il numero di pacchetti inviati linearmente, seguendo l'equazione:
|
|
|
|
```
|
|
congwin = congwin(old) + 1/congwin(old)
|
|
|
|
questo viene fatto per ogni pacchetto, di modo che se congwin(old) e' 4, l'incremento sara':
|
|
|
|
4 -> 4+1/4 -> 4+2/4 -> 4+3/4 -> 5
|
|
|
|
per questo motivo, e' possibile approssimare l'incremento dato dalla congestion avoidance di 1 pacchetto per ogni invio simultaneo con successo.
|
|
```
|
|
|
|
Per questo motivo, l'algoritmo utilizzato da TCP e' detto anche **Additive Increase, Multiplicative Decrease** durante la congestion avoidance.
|
|
|
|
#### TCP square root formula
|
|
|
|
E' possibile descrivere la dimensione **media** della finestra di congestione data la probabilita' di packet loss su una rete. Questo si ottiene eguagliando le formule di additive increase, multiplicative decrease in congestion avoidance:
|
|
|
|
```
|
|
E[w] = avg window size
|
|
p = loss probability
|
|
|
|
(1-p) * 1/E[w] = p * E[w]/2
|
|
|
|
Da cui, isolando E[w]:
|
|
|
|
E[w] = sqrt((2 (1-p))/p)
|
|
|
|
Che, assumendo p molto piccolo (caso reale):
|
|
|
|
E[w] = sqrt(2/p)
|
|
|
|
Dato il RTT (round trip time), e' possibile ottenere il throughput della rete:
|
|
|
|
B = throughput
|
|
Rtt = round trip time
|
|
|
|
B = E[w] / Rtt -> B = sqrt(2/p) * 1/Rtt
|
|
```
|
|
|
|
Dall'equazione del throughput e' possibile notare come esso sia inversamente proporzionale alla loss probability e al RTT.
|
|
|
|
### TCP fairness
|
|
|
|
TCP e' un protocollo fair, che quindi vuole rispettare determinate condizioni di equita':
|
|
|
|
Date K connessioni TCP sulla stessa rete,
|
|
Data una banda totale R da condividere tra le connessioni,
|
|
|
|
-> Connessioni **identiche** dovrebbero ottenere R / K banda totale.
|
|
|
|
Questo e' possibile perche' il multiplicative decrease della congestion avoidance influisce piu' sulle connessioni favorite (che quindi hanno una finestra di congestione piu' ampia).
|