Università degli Studi di Modena e Reggio Emilia Dipartimento di Ingegneria dell Informazione TCP: Algoritmi di Slow Start, Congestion Avoidance, Fast Retransmit, And Fast Recovery rfc 2001 M.L. Merani 1
Premessa Le moderne implementazioni del TCP contengono quattro algoritmi intertwined Slow Start Congestion Avoidance Fast Retransmit Fast Recovery 2
Slow Startt Condotta con successo a termine la fase di connection establishment, il TCP entra nella fase di slow start Algoritmo corrispondente è basato sull introduzione di una nuova finestra lato sender, la congestion window, cwnd Si aggiunge alla advertized window Vediamo l algoritmo e l impiego di cwnd: cwnd è inizialmente posta pari ad un segmento, o - più precisamente al segment size espresso in byte pubblicizzato dall altro estremo della connessione attraverso l opzione MSS impiegata nel three ways handshake; per ogni ACK ricevuto, cwnd viene incrementata di 1 segmento; al sender è consentita la trasmissione di un numero di byte al più pari a min{advertised window, congestion window cwnd} Flow control imposed lato receiver congestion control imposed lato sender 3
Ricordiamo l header del TCP 4
Nel dettaglio Il sender TCP invia un primo segmento e si blocca, in attesa dell ACK corrispondente All atto della ricezione del primo ACK, il sender porta la finestra di congestione a 2 (segmenti) e può procedere all invio di due segmenti Quando perviene l ACK per questi ultimi, la finestra di congestione è posta pari a 4 La dimensione della finestra aumenta in corrispondenza di ogni nuovo ACK ricevuto Tale crescita non è affatto slow! 5
Esempio Assunti Trasferimento di dati di tipo bulk Flusso unidirezionale di tipo successful ACK viaggino alla medesima velocità dei segmenti dati Solo per semplicità descrittiva si numerano i segmenti, piuttosto che i byte Il tempo di trasmissione di un segmento, opportunamente incapsulato, è assunto pari ad una unità temporale. In altri termini, nella rappresentazione che segue i tempi in gioco vengono tutti normalizzati al tempo di frame. Il round trip time è pari ad 8 unità di tempo 6
Continua 7
Continua 8
Continua Dall istante 31 in poi, la pipe tra sender e receiver è piena Non può contenere altri dati, indipendentemente dalla dimensione della cwnd e della advertised window Ad ogni segmento rimosso dalla rete corrisponde un nuovo segmento inviato La connessione ha raggiunto la condizione ideale di steady-state 9
Osservazioni i interessanti ti Nelle condizioni ideali esaminate nell esempio esempio precedente, la spaziatura degli ACK è la medesima presentata dai segmenti dati. La tempistica con cui gli ACK pervengono al sender identifica la frequenza di arrivo dei dati al receiver! Il processo di aumento graduale di cwnd può essere dunque interpretato t t come un network probing del sender, che non immette troppi nuovi segmenti in rete In realtà La frequenza di arrivo degli ACK al sender può essere alterata Ritardi nel feedback channel, dovuti ad es. a queueing nei buffer dei router ACK perduti È tuttavia la ricezione degli ACK a scandire l apertura della finestra di congestione. Da qui: Comportamento self-clocking del TCP 10
Continua Lo SLOW START garantisce comunque una crescita approssimativamente, e non esattamente, esponenziale della finestra di congestione. Infatti: Il ricevitore può ritardare l invio degli ACK, tipicamente inviandone uno ogni due segmenti ricevuti Si tratta comunque di una velocità di apertura della finestra considerevole! Le prime implementazioni TCP eseguivano lo slow start solo se l altro estremo si trovava su una rete diversa da quella del trasmettitore Le implementazioni correnti eseguono sempre lo slow start 11
Inoltre La dimensione della finestra di congestione non cresce indefinitamente La dinamica di crescita rallenta una volta raggiunto un valore prefissato, noto come slow start threshold, ssthres, poiché si entra nella fase di CONGESTION AVOIDANCE*, in cui la congestione risulta maggiormente probabile: In tale fase il sender aumenta la dimensione della finestra di un solo segment size ogni cwnd ACK ricevuti Si tratta di una crescita lineare * descritta tra poco! 12
Rappresentazione grafica Solo per semplicità NB in questo tipo di rappresentazione il tempo necessario alla trasmissione i dei segmenti è trascurabile, è solo l RTT che scandisce la dinamica di crescita della finestra! 13
I Pacchetti Persi Anche se la condizione di steady state descritta in precedenza viene raggiunta, è piuttosto improbabile che la connessione TCP la sperimenti per la sua intera durata pacchetti persi!! Due motivi diversi 1. Pacchetti mai giunti a destinazione, in quanto in una porzione della rete attraversata si è verificata una congestione, che ha forzato i router coinvolti a scartare i pacchetti in ingresso 2. Pacchetti scartati in ricezione o da un router intermedio, in quanto non validi. Es: sporcati da errori di natura trasmissiva o da errori introdotti dall HW di rete 1. Il TCP assume che i pacchetti persi appartenenti alla seconda categoria rappresentino una percentuale piuttosto esigua sul totale, meno dell 1% all interno della singola connessione Interpreta la perdita di pacchetti come un indicatore di CONGESTIONE 14
Esempio di potenziale congestione Big gpp pipe in ingresso ad una smaller pipe pp (LAN-WAN) NB La spaziatura degli ACK corrisponde alla banda (velocità trasmissiva) del link più lento!! LAN 1 WAN LAN 2 R 1 Il router R 1 da un certo punto in poi potrebbe non avere più memoria per i pacchetti che gli arrivano da LAN 1 e dunque eseguirne il discarding 15
Come si rilevano i pacchetti persi Attraverso DUE meccanismi: Lo scadere di un timeout La ricezione lato sender di tre acknowledgment duplicati, i cosidetti triple duplicate ACKs (TDACK) 16
Utilizzo dei Timeouts In corrispondenza alla trasmissione di ogni segmento, il TCP sender setta un retransmission timer, detto Retransmission Time Out, RTO Se l RTOO raggiunge ge lo zero prima della ricezione e di un ACK dall altro estremo TCP, riferito al segmento in questione o ad altri, il timeout scatta Si tratta di un indicazione di congestione piuttosto severa - in una qualche porzione della rete attraversata: non arriva nulla sul feedback channel! Il TCP entra in slow-start, riportando a 1 (segment size) la dimensione della cwnd Oss. È immediato comprendere che il settaggio dell RTO è estremamente delicato ed implica l impiego di un algoritmo efficiente per la stima del round trip time RTT, che influenzerà in maniera significativa l RTO 17
Utilizzo dei Triple Duplicate Acknowledgments Quando il TCP riceve un segmento fuori sequenza genera un ACK immediato (duplicate ACK) Esempio: arriva il segmento TCP che contiene i byte 8705:8961, ma l ultimo byte per il quale era stato inviato l ACK supponiamo fosse quello con numero 6656. In tal caso il TCP receiver torna ad inviare un ACK con il numero di sequenza atteso, ovvero 6657. Tale duplicate ACK non dovrebbe venire ritardato Poichè il processo TCP che lo riceve non sa se 1.Tale duplicate ACK è stato causato da un segmento perso, oppure 2. Da un operazione di reordering dei segmenti al ricevitore si mette in attesa per verificare se ne arrivano degli altri 18
Se l invio del duplicate ACK è stato provocato da 2., saranno verosimilmente inviati uno o al più due duplicate ACK prima del processamento del segmento riordinato, che a sua volta genererà un nuovo ACK, quello che il trasmettitore si aspetta di ricevere Se il trasmettitore si vede invece recapitare tre o più duplicate ACK Forte indicazione di perdita di un segmento 19
Continua la ricezione di un duplicate ACK non dice semplicemente che, forse, un segmento è andato perduto, ma anche che un segmento successivo ha lasciato la rete e si trova nel buffer del ricevitore Ci sono ancora comunque dei dati che fluiscono tra i due estremi Si è dunque in presenza di congestione moderata 20
Ma torniamo agli algoritmi i Ed in particolare a quello di CONGESTION AVOIDANCE 21
Congestion Avoidance Quando si verifica una congestione, il TCP deve ridurre la velocità di invio di segmenti in rete Slow Start e Congestion Avoidance sono algoritmi indipendenti, con obiettivi diversi, ma entrambi mirano a ridurre/regimare tale velocità In pratica, tali algoritmi sono implementati insieme Entrambi richiedono che per ciascuna connessione siano mantenute le due variabili introdotte in precedenza cwnd, la congestion window, e ssthres, la slow start threshold 22
La combinazione i dei due algoritmi i Le operazioni previste sono le seguenti Per ciascuna connessione, fase di inizializzazione: cwnd = 1 segmento ssthres = 65535 byte Quando si verifica una congestione, ssthres = min{1/2 * current window size cwnd, 2 segmenti} Se la congestione è indicata da un timeout, cwnd = 1 segmento si entra nella fase di SLOW START! * Quando l altro estremo fornisce un acknowledgment per nuovi dati, occorre incrementare cwnd. COME? * Vedremo in seguito, slide 27, il settaggio della cwnd se viene ricevuto un triple duplicate ACK 23
Continua Supponiamo che il TCP abbia subito un timeout in tal caso cwnd viene incrementata di uno per ogni ACK ricevuto Si invia un segmento, poi due Tale fase prosegue fintanto che cwnd = ssthres. Da quel punto in avanti il TCP entra in CONGESTION AVOIDANCE In che cosa consiste? Si impone che cwnd = cwnd + 1/(cwnd) per ogni ACK ricevuto Se invece è stato ricevuto un triple duplicate ACK, il TCP esegue subito il CONGESTION AVOIDANCE, ma è qui che scattano anche gli altri due algoritmi, FAST RETRANSMIT e FAST RECOVERY 24
Fast Retransmit Se il trasmettitore si vede recapitare tre o più duplicate ACK Forte indicazione di perdita di un segmento Il TCP provvede immediatamente alla ritrasmissione del segmento missing, senza attendere lo scadere del retransmission timer corrispondente 25
Fast Recovery Ritrasmesso quel segmento che verosimilmente era andato perduto (fase di FAST RETRANSMIT), Il trasmettitore esegue la fase di congestion avoidance, e non quella di slow start. t Si tratta tt dell algoritmo l di FAST RECOVERY. Perché non si esegue lo slow start? Poiché la ricezione di un duplicate ACK dice che ci sono ancora comunque dei dati che fluiscono tra i due estremi il TCP non ha necessità di ridurre drasticamente la velocità di invio dei segmenti eseguendo lo slow start Il FAST RECOVERY consente al contrario di ottenere throughput elevati in condizioni di congestione moderata, soprattutto per finestre ampie 26
Implementazione Fast Retransmit e Fast Recovery Fast retransmit e fast recovery sono di solito implementati insieme, nella seguente maniera 1. Arriva il terzo duplicate ACK ssthres=min{1/2 current cwnd, due segment size} si ritrasmette il segmento missing e si setta cwnd=ssthres+3 segment size. Questo apre la finestra di congestione di un numero di segmenti pari a quelli che hanno lasciato la rete e che l altro estremo ha in memoria 2. Per ogni ulteriore duplicate ACK che perviene, si incrementa la congestion window della dimensione del segmento ACKed, così da aprire la finestra per questo segmento addizionale che ha lasciato la rete e si trasmette un pacchetto, se la finestra lo consente 27
Continua 3. Quando finalmente arriva un ACK per dati nuovi, e dovrebbe essere l acknowledgment per il segmento ritrasmesso al punto 1., pervenuto dopo un round-trip time dalla ritrasmissione, il quale fornisce anche l ACK per i tutti i segmenti intermedi inviati i i tra quello perduto e la ricezione del primo duplicate ACK Si setta cwnd = ssthres CONGESTION AVOIDANCE! Il TCP è tornato t ad inviare i dati ad una velocità trasmissiva i che è pari alla metà del valore rilevato quando il pacchetto era andato perduto 28
Esempio 29
Misura del Round Trip Time- Algoritmo di Van Jacobson Per un corretto settaggio del timeout del TCP la misura dell RTT sperimentata sulla connessione è fondamentale L RTT varia al variare del tempo. Infatti Le route possono cambiare Le condizioni di traffico possono modificarsi Il TCP deve tenere traccia di tali variazioni e aggiornare di conseguenza il suo timeout Sia M il valore misurato dell RTT e D la sua deviazione media, che risulta una buona approssimazione della deviazione standard dell RTT. Ad ogni misura M di RTT si calcolano allora le seguenti equazioni: Err = M A A A + gerr = A + g( M A) = (1 g) A + gm D D + h( Err D) RTO = A + 4D dove g = 1 / 8 = 0.125 e h = 0.25 30
Algoritmo di Karn Si verifica un problema quando un pacchetto viene ritrasmesso ES: pacchetto trasmesso, si verifica un timeout, l RTO viene ricomputato e il pacchetto viene ritrasmesso con un RTO più lungo e per questa prima ritrasmissione si riceve un ACK Q: L ACK è per il primo o per il secondo pacchetto ricevuto? Retransmission ambiguity problem Non possiamo eseguire l update dello stimatore dell RTT quando arriva l ACK per i dati che sono stati ritrasmessi, perché forse la prima trasmissione è stata solo ritardata (e non perduta), o forse è l ACK della prima trasmissione che è stato ritardato Inoltre, poiché i dati sono stati ritrasmessi e si è applicato il backoff esponenziale all RTO, impieghiamo questo RTO backed off per la prossima trasmissione i Conclusione: NON si calcola un nuovo RTO fintanto che non viene ricevuto un acknowledgment per un segmento che non è stato ritrasmesso 31