Capitolo 3 - parte 4 Corso Reti ed Applicazioni Mauro Campanella
TCP Dalla prima RFC ad oggi, sono state introdotti in TCP vari meccanismi per: - rendere più efficente il trasferimento dei segmenti - rendere TCP più rispettoso del carico che crea alla rete Le modifiche si sono concentrate sul - controllo di flusso - controllo della congestione M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 2
TCP La prima versione di TCP (BSD 4.2 1983) era basata su: controllo basato su ACK e sliding window e operato solo dagli end node (e2e) TCP Tahoe (1988) introduce tecniche per un funzionamento migliore su una rete condivisa ed estesa: slow start per controllare la congestione e una decrescita moltiplicativa per minimizzazione la congestione (tecnica AIMD: Additive Increase Multiplicative Decrease) fast retransmission per velocizzare e mantenere la velocità di trasmissione alta anche in caso di perdite singole di segmenti M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 3
TCP TCP Reno (1990) introduce: fast recovery per un recupero più veloce dopo un periodo di congestione l header prediction permise di rendere il codice di TCP estremente più veloce ed efficente nel caso di funzionamento normale (senza perdite od errori) TCP New Reno (1999) : introduce miglioramenti nel processo di ritrasmissione veloce quando l opzione SACK non è attiva. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 4
TCP: controllo di flusso Dal lato del ricevente: controllo di flusso il mittente non invierà più dati di quelli memorizzabile nel buffer del ricevente L applicazione può essere lenta a leggere i dati dal buffer Il controllo di flusso garantisce che vi sia un equilibrio fra la velocità di spedizione e quella di svuotamento del buffer da parte dell applicazione. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 5
TCP: base del controllo di flusso Supponiamo che il ricevente non memorizzi segmenti fuori ordine. Lo spazio libero è: RcvWindow= RcvBuffer- [LastByteRcvd - LastByteRead] La comunicazione al mittente di RcvWindow permette al sender di limitare il totale dei segmenti inviati e per cui non è stato ricevuto un ACK a tale valore. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 6
TCP Slow Start Viene introdotta un altra finestra logica (la finestra di congestione) per limitare dalla parte del mittente il numero di segmenti inviabili Inizialmente cwnd = 1 MSS Esempio: MSS = 500 bytes e RTT = 200 msec la velocità iniziale è di 20 kb/s Ma la capacità disponibile può essere molto maggiore di MSS/RTT. E quindi importante far crescere velocemente cwnd all inizio della connessione. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 7
TCP Slow Start Far crescere esponenzialmente cwnd all inizio della connessione, fino al primo evento di perdita di segmento: raddoppiare cwnd ad ogni ACK, se ogni pacchetto ricevuto genera 1 ACK in pratica aumentare cwnd (il numero di MSS che possono essere trasmesse una di seguito all altra) di 1 MSS per ogni MSS recevuta bene (segnalata dagli ACK ricevuti, cumulativi) Inizio lento, ma crescita veloce M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 8 RTT A B 1 segmento 2 segmenti 4 segmenti tempo
TCP controllo congestione La trasmissione e2e è quindi limitata imponendo che : (LastByteSent- LastByteAcked) sia minore od eguale del minore fra cwnd e receive WindowSize cwnd è dinamica ed è funzione della congestione nella rete Gli eventi che segnalano la congestione sono: - timeout oppure - ACK duplicati TCP diminuisce cwnd in caso di tali eventi in modo drastico, dividendola a metà o riducendola a 1. Slow start con divisione in caso di congestione è noto come AIMD M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 9
TCP AIMD Additive Increase: aumentare cwnd di 1 MSS ogni RTT in assenza di pardite (ricerca del limite di capacità) Multiplicative Decrease: dividere cwnd a metà in caso di evento che segnali una perdita 24 Kbytes congestion window 16 Kbytes 8 Kbytes time connessione TCP di lunga durata M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 10
Slow start migliorato La crescita esponenziale porterebbe ben presto ad una eccessiva quantità di segmenti in transito: - viene introdotto un valore di soglia (ssthresh) per cwnd che fa transire da un regime esponenziale (slow start) ad uno lineare di crescita, detto congestion avoidance, in cui cwnd cresce di circa 1 MSS per ogni RTT cwnd (segmenti) ssthresh qui ssthresh inizialmente vale 16 MSS ( negli stack odierni vale 65KB o circa 44 MSS da 1550B) RTT M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 11
Fast retransmission Dopo la ricezione di 3 segmenti con il campo ACK con lo stesso valore (duplicati): cwnd è dimezzata la crescita diventa lineare Ma dopo un timeout: cwnd torna a 1 MSS; si riprende lo slow start In ogni caso ssthresh diventa la metà del minore fra cwnd e la receive window size Razionale 3 ACK duplicati indicano una rete solo in parte congestionata un timeout prima di 3 ACK duplicati indica una congestione più severa M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 12
Sommario: TCP Congestion Control Quando cwnd è inferiore a ssthresh, il mittente è nella fase di slow-start e la finestra cresce esponenzialmente. Quando cwnd è maggiore di ssthresh, il mittente è nella fase di congestion-avoidance e la finestra cresce linearmente. Quando vengono ricevuti tre ACK duplicati, ssthresh diventa la metà del minore fra cwnd e la receive window size remota. cwnd diventa eguale a ssthresh. In caso di timeout, ssthresh diventa la metà del minore fra cwnd e la receive window size remota. cwnd diventa 1 MSS. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 13
TCP Fast recovery In caso di ritrasmissione di un segmento dovuta alla ricezione di ACK duplicati, non si riparte dalla fase di slow-start, ma da quella di congestion-avoidance. L algoritmo di fast recovery, quando vengono ricevuti tre ACK duplicati, fa sì che: ssthresh divenga la metà del minore fra cwnd e la receive window size remota. Viene ritrasmesso il segmento mancante cwnd diventa eguale a ssthresh + 3 segmenti se arrivano altri duplicati, si ritrasmette immediatamente e si aumenta cwnd di un segmento al primo ACK di dati nuovi, si pone cwnd = ssthresh e si continua in modalità congestion-avoidance M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 14
Esempio cwnd [100 B] sequence numbers tempo [secondi] M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 15
TCP Header prediction L eseguzione del codice TCP, alla ricezione di un nuovo segmento, prevede molti controlli complessi in base allo stato attuale della FSM e dei valori contenuti nell header del segmento. Il flusso dell eseguzione del codice si può velocizzare significamente se si confronta il valore del numero di sequenza del nuovo segmento ricevuto, con uno calcolato (predetto) che corrisponda a quello atteso nel caso normale di ricezione in sequenza. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 16
TCP New Reno La maggior parte delle implemetazioni di TCP sono basata sulla versione Reno. Reno definiva (migliorava) quattro meccanismi chiave Slow Start Congestion Avoidance Fast Retransmit Fast Recovery NewReno migliora fast retransmit/recovery in presenza di acknowledgement parziali (SACK) M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 17
TCP generazione di ACK [RFC 1122, 2581] Evento al Ricevente Arrivo di un segmento in ordine (numero di seq. atteso). ACK per tutti i dati fino al numero atteso Arrivo di un segmento in ordine Un segmento precedente ha un ACK pendente Arrivo di un segmento fuori ordine maggiore del numero di sequenza atteso. Arrivo di un segmento che riempie parzialmente o completamente un intervallo mancante Azione TCP al ricevente Invio di un ACK ritardato. Attesa fino a 500 ms per ilprossimo segmento. Se non arriva si invia l ACK. Immediatamente viene inviato un ACK singolo cumulativo per l intervallo dei numeri di sequenza in ordine Immediatamente viene inviato un ACK duplicato che indica il numero di sequenza atteso. Immediatamente viene inviato un ACK se il segmento inizia dal numero di sequenza atteso M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 18
Controllo di congestione. Dove? Vi sono due approcci diversi al controllo della congestione: Controllo End-end : Controllo con l aiuto della rete: non si ricava nessuna informazione dalla rete la congestione è inferita nei sistemi finali attraverso perdita di segmenti e aumento di ritardo Questo è l approccio di TCP. router forniscono informazioni ai sistemi finali (Bit Explicit Congestion Notification nell header IP) si usano uno o più bit per indicare congestione (SNA, DECnet, TCP/IP ECN, ATM, FrameRelay M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 19
Esempio: ATM ABR congestion control ABR: available bit rate: Offre un servizio elastico se la linea è libera il mittente usa la capacità disponibile se il cammino è congestionato il mittente diminuisce la velocità sino ad un valore minimo garantito. Celle di tipo RM (resource management) : inviate dal mittente, inframmezzate al traffico dati. Alcuni bits nelle celle RM sono accesi dagli switch: NI bit: non aumentare la velocità di trasmissione (congestion moderata) CI bit: indica congestione Le celle RM cells sono reinviate dal ricevente al mittente senza modifica M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 20
Esempio: ATM ABR sorgente destinazione Vi è un campo di due byte ER (explicit rate) nelle celle RM lo switch con congestione può diminuire il valore di ER la sorgente usa la velocità minima concessa sul cammino Vi è il bit EFCI nelle celle dati: anche lui è acceso dallo switch se la cella dati che precede quella ER ha il bit EFCI acceso, il mittente accende il bit CI nella cella RM di ritorno Problema: converge lentamente in tempi di vari RTT! M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 21
TCP Correttezza (fairness) Scopo: se K sessioni TCP condividono lo stesso collo di bottiglia, di capacità R, ciascuna connessione ottiene un valore medio di banda trasmissiva di R/K TCP connessione 1 TCP connessione 2 Router con linea di capacità R M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 22
Due sessioni in competizione: TCP è corretto. Additive increase: fornisce la pendenza di 1, aumentando la capacità utilizzabile multiplicative decrease: diminuisce in caso di congestione R condivisione eguale della banda Capacità connessione 2 Capacità connessione 1 R M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 23
Correttezza Correttezza ed UDP Le applicazioni multimediali spesso usano UDP non hanno la velocità modificata da un sistema di controllo della congestione devono mantenere la frequenza di emissione dei segmenti audio/video ad una velocità costante o funzione dell uso, preferendo avere perdite. Correttezza e sessioni parallele TCP (peer to peer) nulla vieta di aprire fra due nodi due sessioni TCP parallele. Per esempio i browser web lo fanno regolarmente. Se l applicazione è in grado di usare la connessioni contemporaneamente può ottenere una maggiore capacità. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 24
Tempo di risposta per HTTP 70 60 Esempio: RTT =1 sec, 10 oggetti da 5 Kbytes l uno e 5 connessioni parallele millisecondi 50 40 30 20 10 non-persistente persistente parallelo non persistente 0 28Kbps 100Kbps 1Mbps 10Mbps Per grandi RTT, il tempo di risposta è dominato dal tempo necessario allo stabilirsi della connessione TCP e dallo slow start. Le connessioni persistenti danno un significativo miglioramento, soprattutto in reti ad alta capacità ed elevato ritardo. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 25
Capacità massima in presenza di perdite Capacità < C * MTU RTT * p M. Mathis, et.al. (1) Raddoppiando la MTU, si raddoppia il throughput Dimezzando la latenza, si raddoppia il throughput Dimezzando la probabilità di perdita p si ha il 40% in più di throughput (1) M. Mathis, J. Semke, J. Mahdavi, Pittsburgh Supercomputing Center, Teunis Ott Bellcore, The Macroscopic Behavior of the TCP Congestion Avoidance Algorithm Computer Communication Review, volume 27, numero 3, luglio 1997 M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 26
TCP ad alta velocità Supponiamo che il circuito end to end sia a 10Gb/s e che RTT = 200ms, allora Capacità * RTT = 166.666 pacchetti di 1500 byte. Se non vi sono errori, allora la fase di slow start impiega circa 17 RTT (3,4 s) per saturare il circuito (2 17 = 131.072) ed in questa prima fase vengono inviati 197MB. Dopo la perdita del primo pacchetto cwnd viene dimezzata (cwnd = 166666/2) ed impiegherà 83333 RTTs, cioè 4 ore e 38 minuti, per riempire nuovamente il circuito. In questo tempo sono trasmessi 125 petabytes {cwnd * cwnd + cwnd * (cwnd -1)/2 } ~ 125*10^12 bits Se il bit-error rate è 10^-12, allora ci sarà un altra perdita di pacchetto prima che il circuito si riempia di nuovo. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 27
TCP ad alta velocità Quindi TCP standard ri-aumenta la frequenza di trasmissione troppo lentamente e la diminuisce troppo velocemente per reti ad alta velocità. Si stanno sviluppando modifiche al protocollo per garantire migliori prestazioni per singoli flussi ad alta velocità. Scopi delle modifiche ad alta velocità di TCP: Aumentare velocemente la frequenza dei pacchetti e mantenerla elevata per lungo tempo Mantenere la correttezza verso il normale TCP (e.g. SACK), fondamentale in caso di condivisione di circuiti congestionati. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 28
High Speed TCP TCP usa due parametri nella fase di Congestion Avoidance- AIMD( a,b ) parametro di crescita: a parametro di decresita: b TCP standard usa a=1 e b=0.5. High Speed TCP introduce una dependenza di a e b dalla dimensione corrente della finestra di congestione (cwnd) a->a(cwnd) b->b(cwnd) Se si fa crescere a di più per valori grandi di cwnd si ritorna più velocemente ad alti valori di throughput. Se si diminuisce b, non si descresce troppo il valore della finstra di congestione. M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 29
La risposta di TCP alle perdite Frequenza invio pacchetti [pacchetti/rtt] probabilità di perdita p M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 30
Puntatori Come abilitare trasferimenti ad alta velocità fra nodi: http://www.psc.edu/networking/perf_tune.html Internet Measurement Tool Taxonomy http://www.caida.org/tools/taxonomy/measurement/ Stack modificato per avere maggiori informazioni http://www.web100.org/ Programma per misurare la massima banda raggiungibile fra due nodi: http://dast.nlanr.net/projects/iperf/ HS-TCP - variante di Li: http://www.hep.ucl.ac.uk/~ytl/tcpip/hstcp/ M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 31
Performance TCP Pc loopback 900 800 700 600 500 400 300 200 100 0 0 6550 13100 19650 26200 32750 39300 45850 52400 58950 65500 dimensione messaggio (Byte) M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 32
Performance TCP 900 800 700 600 500 400 300 200 100 0 Confronto loopback sunatm almiga pcatmv dimensione messaggio (byte) M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 33
Performance TCP Rilke - Pcatmv 100 90 80 70 60 50 40 30 20 10 0 dimensione send socket (byte) M. Campanella Corso Reti ed Applicazioni - Como 2005 Cap 3-4 pag. 34