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