UniTO/anno2/YearI/FirstSem/CR/lesson3-06102017.md
Francesco Mecca 5e286062f8 MCAD 2019
2018-11-22 13:09:11 +01:00

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).