Controllo di flusso e di congestione nel TCP
Transcript
Controllo di flusso e di congestione nel TCP
Controllo di congestione 1 Timeout 2 D: come fissare un valore per il timeout in TCP? • troppo corto: timeout prematuri, ritrasmissioni non necessarie • troppo lungo: reazione lenta a perdite di segmenti • ancora peggio: RTT ha notevoli fluttuazioni RTT 3 Stima di RTT D: come stimare RTT? • SampleRTT: tempo misurato dalla trasmissione del segmento sino alla ricezione dell' ACK – si ignorano le ritrasmissioni ed i segmenti con ACK cumulativi • SampleRTT varia notevolmente, si vuole un RTT stimato che sia “smoother” – si usano diverse misurazioni recenti, non soltanto il SampleRTT corrente, e si fa la media • Se si considera, però, soltanto la media di SampleRTT, si genereranno ancora molti timeout a causa delle notevoli variazioni della rete: bisogna tener conto anche della varianza 4 Varianza 1. Se la velocità dei dati sulla connessione TCP è relativamente bassa, il ritardo di trasmissione sarà grande rispetto al tempo di propagazione, e la varianza in ritardo dovuta alla varianza delle dimensioni dei datagrammi IP sarà significativa (proprietà dei dati e non della rete) 2. Il traffico può cambiare bruscamente a causa del traffico generato da altre sorgenti, e così l'RTT 3. Uso del privilegio di ACK cumulativi o ritardi di elaborazione alla destinazione 5 Stima della media EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT • exponential weighted moving average EWMA • l'influenza di un dato sample diminuisce in modo esponenziale rispetto alla distanza dal sample corrente • tipico valore di x: 0.125 Stima della varianza Deviation = (1-x)*Deviation + x*|SampleRTT-EstimatedRTT| 6 1 k +1 ARTT ( k + 1) = RTT (i ) ∑ k + 1 i =1 k 1 ARTT ( k ) + RTT ( k + 1) = k +1 k +1 SRTT ( k + 1) = (1 − x ) SRTT ( k ) + xRTT ( k + 1) = xRTT ( k + 1) + x (1 − x ) RTT ( k ) + x (1 − x ) 2 RTT (k − 1) + ... + x (1 − x ) k RTT (1) + (1 − x ) k +1 RTT (0) 7 0.5 Valore dei coefficienti 0.4 x=0.5 x=0.125 0.3 0.2 0.1 0.0 1 2 3 4 5 6 7 8 9 Età di osservazione 10 8 Algoritmo di Jacobson EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT Deviation = (1-x)*Deviation + x*|SampleRTT-EstimatedRTT| Timeout = EstimatedRTT + 4*Deviation 9 RTT e Timeout timeout round-trip time 10 Congestione 11 •Il controllo della congestione può essere considerato come l'uso efficiente della rete ad alto carico • La congestione avviene quando il numero di pacchetti trasmessi (immessi nella rete) comincia ad approssimare la capacità di trattamento di pacchetti da parte della rete stessa • Quando l'utilizzazione delle linee in ingresso ai nodi supera l'80%, e/o quando la velocità con cui arrivano i pacchetti eccede la velocità con cui possono essere trasmessi, la lunghezza delle code cresce in modo allarmante 12 Congestione: • informalmente: “troppe sorgenti che inviano troppi dati troppo rapidamente perchè la rete riesca a trattarli” • differente da controllo di flusso! • manifestazioni: – pacchetti persi (buffer overflow ai router) – lunghi ritardi (code nei router) 13 Throughput normalizzato Prestazioni ideali Carico normalizzato 14 Ritardo Carico normalizzato 15 Prestazioni in pratica Il caso ideale assume buffer infiniti ed assenza di overhead per controllo di congestione Prestazioni in pratica (buffer finiti) • Punto A: alcuni nodi possono sperimentare congestione severa; inoltre messaggi di routing per evitare aree congestionate • Punto B: molti più nodi in congestione severa (buffer pieni); ritrasmissioni per pacchetti con ACK in ritardo Throughput normalizzato • Congest. moderata A Congestione severa B 1.0 Carico normalizzato 16 Approcci al controllo della congestione Due approcci di larga massima: Controllo di congestione Controllo di congestione assistito dalla rete: end-to-end: • i router forniscono feedback • assenza di un feedback agli end system esplicito dalla rete – singolo bit indicante • congestione dedotta dalle congestione (SNA, perdite e dai ritardi DECbit, TCP/IP ECN, osservati dal sender ATM) • approccio seguito dal TCP – velocità esplicita a cui il sender dovrebbe trasmettere 17 Meccanismi di controllo della congestione • Backpressure: può essere usata solo in reti che permettono controllo di flusso hop-by-hop (X.25 si; Frame Relay, ATM, IP no) • Choke packet: pacchetto di controllo trasmesso direttamente alla sorgente (es. source quench in ICMP – Internet Control Message Protocol) • Segnalazione implicita: uso di controllo di flusso endto-end (cioè a livello di trasporto, come in TCP, o di data link LAPF control in Frame Relay), basato sul riconoscimento di ritardi aumentati e perdite di pacchetti da parte dell'end system sorgente 18 • Segnalazione esplicita: la rete avverte gli end system di congestione crescente e gli end system riducono il carico; opera su reti orientate alla connessione • Backward • Forward (invio di eco alla sorgente o controllo di flusso ad uno strato superiore (TCP)): alterazione di bit in pacchetti dati o invio di pacchetti di controllo separati • Binary, Basato su credito, Basato su velocità 19 Implicito (delay,scarto) policing backpressure Choke packet source Esplicito (binario,credito,velocità) destination Meccanismi per il controllo della congestione 20 Messa al passo di segmenti TCP Sorgente Segmenti di dati Destinazione Segmenti di ACK Flusso determinato da congestione della rete Pr=Pb e quindi Ar=Pr=Pb, Ab=Ar=Pb, As=Ab=Pb, ed infine Ps=As=Pb 21 Sorgente Segmenti di dati segmenti di ACK Destinazione Flusso determinato dal sistema di destinazione 22 • Gli ACK di ritorno funzionano da segnali regolatori. Nello stato stazionario, dopo un burst iniziale, la velocità dei segmenti del sender è uguale a quella di arrivo degli ACK. Così la velocità dei segmenti del sender è uguale a quella del link più lento lungo il cammino. In questo modo, il TCP sente automaticamente il collo di bottiglia e regola il suo flusso di conseguenza. Questo è il cosiddetto comportamento self-clocking di TCP • Questo comportamento è identico se il collo di bottiglia è al receiver, così la sorgente non ha modo di conoscere se la velocità di messa al passo a cui essa riceve gli ACK rifletta lo stato della internet (controllo di congestione) o lo stato della destinazione (controllo di flusso). Nel primo caso, dovrebbe trasmettere ancor più lentamente del passo degli ACK per aiutare la rete ad uscire dalla congestione, nel secondo non c'è vantaggio a ridurre ulteriormente la velocità 23 • L'uso di GBN o SR per il recupero da errori/perdite fornisce automaticamente anche una forma piuttosto efficace di controllo di flusso/congestione – Se la congestione monta ed aumentano i ritardi, gli ACK sono emessi in ritardo ed il sender viene rallentato – Se il receiver vuole ricevere pacchetti meno rapidamente, può semplicemente ritardare l'invio degli ACK • La combinazione di ACK con il controllo di flusso ha però alcune limitazioni – Il posporre l'invio di ACK può causare anche ritrasmissioni non necessarie dovute a timeout • Possibile approccio (e quello impiegato dal TCP): disaccoppiare gli ACK dalla concessione del permesso di invio di ulteriori unità di dati (il receiver manda due numeri come feedback al sender!!!) 24 Controllo di congestione 25 Controllo di congestione in TCP • IP non fornisce alcun meccanismo per rilevare, tanto meno per controllare, la congestione • TCP fornisce solo controllo di flusso end-to-end e può solo dedurre con mezzi indiretti la presenza di congestione nella internet. Tale conoscenza, inoltre, è inaffidabile • La definizione dei parametri per il controllo di flusso e di errore istante per istante (timeout e dimensione della window), unitamente alle politiche di ritrasmissione, può avere effetti gravissimi sull'insorgere della congestione, come anche sulla prevenzione ed il ripristino dalla congestione stessa: sono state così sviluppate delle tecniche di gestione del timer di ritrasmissione e della window di trasmissione finalizzate al controllo di congestione 26 Gestione del Timeout 27 Algoritmo di Karn • usare l'algoritmo di Jacobson per il calcolo del timeout sino a quando non avviene una ritrasmissione • fare backoff ad ogni ritrasmissione: timeout = 2x timeout • riprendere l'algoritmo di Jacobson quando finiscono le ritrasmissioni, cioè quando viene ricevuto un ACK di un segmento non ritrasmesso 28 Gestione della Window 29 • Receiver Window: anche nota come Advertised Window, usata dal receiver per informare circa lo spazio disponibile di buffer • Congestion Window: il suo valore dipende dalla congestione di rete così come è percepita dal sender TCP • La window del sender è min (CongWin, RcvWin) LastByteSent – LastByteAcked <= min(CongWin, RcvWin) 30 • “provare” per conoscere la bandwidth utilizzabile: – idealmente: arrivare a trasmettere il più velocemente possibile (=CongWin la più grande possibile) senza avere perdite. Per questo: • partire da una CongWin piccola ed aumentarla sino ad avere perdite (congestione) • appena si hanno perdite: diminuire CongWin, quindi ricominciare a provare (aumentandola) • due “fasi” – slow start – congestion avoidance • variabili importanti: – CongWin – Threshold: definisce la soglia tra la fase di slow start e la fase di congestion avoidance 31 Slowstart 32 TCP Slowstart Slowstart initialize: CongWin = 1 Threshold = 8 for (ogni ACK ricevuto) CongWin++ until (perdita OR CongWin > Threshold) • crescita esponenziale (rispetto a RTT) in window size (non così lento!) • evento di perdita: timeout (Tahoe TCP) e/o tre ACK duplicati (Reno TCP) RTT Host A Host B one segm ent two segm ents four segm ents time 33 Congestion Avoidance 34 TCP Congestion Avoidance Congestion avoidance /* sl w o st ra t è f i in t a */ /* CongWin > Threshold */ Until (perdita) { ogni w ACK ricevuti: Congwin++ } Threshold = CongWin/2 CongWin = 1 effettua slowstart 1 1: TCP Reno salta slowstart (fast recovery) dopo tre ACK duplicati Congestion avoidance Slow start Round-trip times •AIMD: additive increase, multiplicative decrease – aumenta la window di 1 ad ogni RTT – diminuisce la window di un fattore 2 quando ci sono perdite 35 Timeout Round-trip times 36 Fast retransmit e Fast recovery 37 Fast retransmit e fast recovery • TCP sender:”Un ACK • TCP esegue fast retransmit di duplicato è causato da un segmento perso prima che un segmento perso o il suo timer scada e comincia soltanto da un segmento la fase di slow start (TCP fuori ordine?” Tahoe) • Se il TCP sender riceve • TCP Reno (de facto TCP) tre ACK duplicati, impiega anche un assume questa come meccanismo di fast recovery una indicazione che il che essenzialmente salta la segmento seguente il fase di slow start dopo una segmento riscontrato è fast retransmission (la stato perso congestione dopo tutto è moderata se sono ritornati ACK multipli!!) 38 TCP/Reno: Big Picture cwnd TD TD TO ssthresh ssthresh slow start congestion avoidance ssthresh congestion avoidance ssthresh congestion avoidance slow congestion start avoidance TD: Triple duplicate acknowledgements TO: Timeout 39 Time Procedura di controllo di congestione: TCP Tahoe Initialize: cwnd <-- 1 (MSS); Threshold <-- 8 (MSS) State <-- Slow Start; Case of: ACK received in Slow Start: cwnd <-- cwnd +1; /* “exponential ” increase of cwnd */ If cwnd > Threshold Then State= Congestion Avoidance; ACK received in Congestion Avoidance: If # Acks received = cwnd Then cwnd <-- cwnd +1; /* “linear” increase of cwnd */ Timeout: Threshold <-- cwnd/2; cwnd <-- 1; State <-- Slow Start; 40 Equità 41 Obiettivo di equità: se N sessioni TCP condividono lo stesso bottleneck link, ciascuna dovrebbe ottenere 1/N della capacità del link conessioneTCP 1 connessione TCP 2 bottleneck router capacità R 42 Equità TCP Due sessioni in competizione: • additive increase: pendenza di 1 (W, e così il throughput, crescono linearmente per entrambe le connessioni) • multiplicative decrease: linee che passano per l'origine (W, e così il throughput, si dimezzano per entrambe le connessioni) Throughput connessione 2 R Linea di piena utilizzazione di banda Throughput connessione 1 Uguale condivisione di banda R 43 • il traffico UDP non è soggetto al controllo di congestione TCP; alcune sorgenti UDP (es. telefonia IP) possono abusare di questo privilegio per forzare buffer overflow e così slow start su connessioni TCP (esse sono TCP unfriendly!) • applicazioni multicast usano UDP; anch'esse sono TCP unfriendly • alcune applicazioni (es. HTTP) possono aprire diverse sessioni TCP in parallelo, ottenendo così un vantaggio non equo 44