380 likes | 535 Vues
Esercitazione 2. Studio dei meccanismi TCP per il controllo della congestione Analisi del comportamento della finestra in presenza di: Algoritmo di Slow Start Algoritmo di Congestion Avoidance Algoritmi di Fast Retransmit e Fast Recovery Confronto delle prestazioni dei diversi algoritmi
E N D
Esercitazione 2 • Studio dei meccanismi TCP per il controllo della congestione • Analisi del comportamento della finestra in presenza di: • Algoritmo di Slow Start • Algoritmo di Congestion Avoidance • Algoritmi di Fast Retransmit e Fast Recovery • Confronto delle prestazioni dei diversi algoritmi • Grandezze da monitorare in funzione del tempo • andamento della finestra di trasmissione • valore della soglia di Slow Start • andamento del numero di sequenza dei pacchetti
Meccanismi di incremento della finestra • Slow start: • Si applica inizialmente, W cresce di 1 per ogni ACK ricevuto • cwnd= cwnd + 1; • Consente un incremento rapido della finestra (esponenziale) e quindi del throughput • L’ampiezza della finestra raddoppia ad ogni RTT • Congestion avoidance: • Dopo aver raggiunto la soglia, W si incrementa di 1/W ogni ACK (1 ogni RTT) • Evita di saturare la banda disponibile • Assenza di Slow Start: • La finestra si apre subito al massimo • cwnd=wnd
Evento di perdita • Il TCP riconosce la perdita di pacchetto mediante • Presenza di 3 ACK duplicati • Scadere del time out di ritrasmissione • Il TCP reagisce diversamente nei due casi • diverso meccanismo di recupero della perdita • diverso aggiornamento del valore della finestra a valle della perdita • diversa attività della sorgente in trasmissione
Scenari di rete per la simulazione • Topologia 1: analisi SS e CA • Topologia 2: analisi Fast Retr./Fast Rec. 10Mb; 100ms; DropTail 256Kb; 100ms; DropTail Router Nodo Destinazione Nodo Sorgente 55Kb; 10ms; DropTail Router 1Mb; 10ms; DropTail Nodo Destinazione Nodo Sorgente
Classe Agent/TCP/RFC793edu • Variabili membro della classe e valori di default (SS+CA) (CA) (SS)
Script caso 1 • Possibilità di lanciare la simulazione fornendo come parametri di ingresso: • dimensione della coda del router • tipo di algoritmo di gestione della congestione • Algoritmi selezionabili: • Solo Slow Start • Assenza di Slow Start (valore fisso della finestra) • Solo Congestion Avoidance • Slow Start e Congestion Avoidance • Valore massimo dell’advertised window = 20
Script caso 1: step 1 • Istanza al simulatore • Apertura in scrittura dei file per registrare i dati utili all’analisi della simulazione set ns [new Simulator] set trace_nam [open $sim.nam w] set trace_all [open $sim.tr w] set trace_swnd [open wnd.$sim w] set numseq [open sn.$sim w] set loss [open loss.$sim w] $ns namtrace-all $trace_nam $ns trace-all $trace_all
Script caso 1: step 2 • Definizione della topologia # nodo di trasmissione set n0 [$ns node] # router centrale set n1 [$ns node] # nodo di ricezione set n2 [$ns node] # caratterizzazione dei link $ns duplex-link $n0 $n1 10Mb 100ms DropTail $ns duplex-link $n1 $n2 256Kb 100ms DropTail
Script caso 1: step 3 • Impostazione della dimensione max della coda del router • Monitor del riempimento della coda • Definizione dell’agent • Impostazione della dimensione della finestra • Definizione del tipo di applicazione $ns queue-limit $n1 $n2 $dim_coda_router1 set qmon [$ns monitor-queue $n1 $n2 1 2] set tcp1 [$ns create-connection TCP/RFC793edu $n0 TCPSink $n2 1]#equivale a 5 istruzioni singole: #set tcp1 [new Agent/TCP/RFC793edu] #set tcp2 [new Agent/TCPSink] #$ns attach-agent $n0 $tcp1 #$ns attach-agent $n2 $tcp2 #$ns connect $tcp1 $tcp2 $tcp1 set window_ 20 set ftp1 [new Application/FTP] $ftp1 attach-agent $tcp1 Valore massimo dell’advertised window Traffico trasferimento dati Sfrutta tuttta la banda
Script caso 1: step 4 • Procedura “standard” per il monitoraggio della finestra proc sampleswnd { interval } { global ns trace_swnd tcp1 set now [$ns now] set curr_cwnd [$tcp1 set cwnd_] set curr_wnd [$tcp1 set window_] if { $curr_wnd < $curr_cwnd } { set swnd $curr_wnd } else { set swnd $curr_cwnd } puts $trace_swnd "$now $swnd" $ns at [expr $now + $interval] "sampleswnd $interval" } swnd=min(cwnd,wnd)
Script caso 1: step 5 • Procedura per il monitoraggio della perdita proc LossMon { interval } { global ns qmon loss set now [$ns now] set curr_loss [$qmon set pdrops_] puts $loss "$now $curr_loss" $ns at [expr $now + $interval] "LossMon $interval" }
Script caso 1: step 8 • Procedura per il monitoraggio dei numeri di sequenza e del valore di ssthresh proc altri_tcp_var { step } { global ns tcp1 numseq set now [$ns now] set seqno [$tcp1 set t_seqno_ ] set sst [$tcp1 set ssthresh_ ] puts $numseq "$now $seqno $sst" $ns at [expr $now+$step] "altri_tcp_var $step" }
Script caso 1: step 8 • Procedura di fine simulazione proc finish {} { global ns loss trace_nam trace_all trace_swnd numseq $ns flush-trace close $trace_nam close $trace_all close $trace_swnd close $numseq close $loss exit 0 }
Script caso 1: step 9 • Scheduling della simulazione $ns at 0.0 "sampleswnd 0.05" $ns at 0.0 "altri_tcp_var 0.05" $ns at 0.0 "LossMon 0.05" $ns at 0.1 "$ftp1 start" $ns at 12.0 "finish" $ns run
Esecuzione dello script 1 Sink 0 1 2 Comando per eseguire lo script: ns es2_acronimo_alg.tcl
Analisi dei risultati (1/2) Comandi per analizzare i risultati delle simulazioni: Animazione con NAM ./nam “nome_file.nam” Grafici con Gnuplot gnuplot plot “wnd.acronimo_alg” w l plot “sn.acronimo_alg” w l exit with lines uscire da gnuplot
Analisi dei risultati (2/2) Comandi per salvare il grafico in formato eps: gnuplot set terminal postscript eps set output “wnd.acronimo_alg.eps” plot “wnd.acronimo_alg” w l exit Per visualizzare il grafico: gv file.eps Nb: per visualizzare i file .eps in windows occorrono ghostview e ghostscript
Gnuplot: confronto finestre tra ss e noss • Aprire gnuplot con wgnuplot.exe nella certella esercitazione • set style data linespoints • set yrange[0:28] • set xrange[0:4] • set xlabel “tempo di simulazione (s)” • set ylabel “finestra di trasmissione (segmenti)” • plot wnd.ss title “con Slow Start”, wnd.noss “Senza Slow Start”
SS: assente Risultati: andamento della finestra • L’apertura graduale della finestra con lo SS evita la trasmissione contemporanea di un numero di segmenti maggiori di quelli memorizzabili dal buffer 28 SS: presente 26 RTO: chiusura della finestra ad 1 24 22 20 18 16 Finestra di trasmissione (segmenti) 14 12 10 8 6 4 2 0 0 0.5 1 1.5 2 2.5 3 3.5 4 tempo (s)
Gnuplot: confronto numero sequenza tra ss e noss • Aprire gnuplot con wgnuplot.exe nella certella esercitazione • set style data linespoints • set yrange[0:100] • set xrange[0:4] • set xlabel “tempo di simulazione (s)” • set ylabel “numero di sequenza dei segmenti” • plot sn.ss title “con Slow Start”, sn.noss “Senza Slow Start”
100 SS: presente SS: assente 90 80 70 60 Numero di sequenza 50 40 30 20 10 0 0 0.5 1 1.5 2 2.5 3 3.5 4 tempo (sec) Risultati: evoluzione del numero di sequenza • Maggior numero di segmenti nuovi trasmessi in presenza di SS (>90 in 4 sec) • Senza SS presenza di ritrasmissioni (fasi decrescenti per il sequence number)
Gnuplot: confronto finestre tra ss e noss • Una volta aperto Gnuplot: • set style data linespoints • set yrange[0:28] • set xrange[0:4] • set xlabel “tempo di simulazione (s)” • set ylabel “finestra di trasmissione (segmenti)” • plot wnd.ss title “con Slow Start”, wnd.noss “Senza Slow Start”
28 SS 26 CA 24 22 20 18 16 Finestra di trasmissione (segmenti) 14 12 10 8 6 4 2 0 0 0.5 1 1.5 2 2.5 3 3.5 4 tempo (sec) Risultati: crescita exp. (SS) e lineare (CA) • Apertura lenta della finestra nel caso di crescita lineare (utile in prossimità di situazioni di possibile congestione) • Assenza di perdita in entrambi i casi
Gnuplot: confronto numero sequenza tra ss e noss • Aprire gnuplot con wgnuplot.exe nella certella esercitazione • set style data linespoints • set yrange[0:100] • set xrange[0:4] • set xlabel “tempo di simulazione (s)” • set ylabel “numero di sequenza dei segmenti” • plot sn.ss title “con Slow Start”, sn.noss “Senza Slow Start”
100 SS CA 90 80 70 60 50 Seqeunce Number (segmenti) 40 30 20 10 0 0 0.5 1 1.5 2 2.5 3 3.5 4 tempo (sec) Risultati: evoluzione del numero di sequenza • Una crescita lenta della finestra comporta una minore efficienza nell’utilizzo della risorse di rete • minor quantità di informazione trasmessa a parità di tempo di riferimento
Algoritmo di congestion avoidance • cwnd<ssthresh: regime di Slow Start. • cwnd>ssthresh: regime di Congestion Avoidance. • Valore iniziale della ssthresh molto alto, nella simulazione pari al cwnd. • Stima automatica della capacità della rete e aggiornamento dinamico della ssthresh grazie al meccanismo di perdita del TCP. • La coda di n1 è scelta molto piccola (8) per “favorire” le perdite nella simulazione.
“CWND_ssca" 25 20 15 Sliding Window (segments) 10 5 0 0 2 4 6 8 10 Simulation Time (s) Risultati: SS e CA time out Slow Start geometrica ssthresh Congestion Avoidance lineare Slow Start • t = 2.12 perdita del pacchetto • t = 2.63 arrivo dell’ACK duplicato, il nodo sorgente smette ti trasmettere • t = 3.46 scade il Time-Out, si riprende in regime di Slow Start
Script caso 2 Studio dell’algoritmo di Fast Retransmit • Parametro d’ingresso: algoritmo • Casi possibili: • Presenza di Fast Retransmit (fret) • Assenza di Fast Retransmit (nofret) • Parametri TCP di set-up: • Valore della finestra di trasmissione: 20 segmenti • Dimensione del buffer del router: 19 segmenti (in modo tale da perdere esattamente un pacchetto).
Script caso 2: Step 1 • Istanza al simulatore • Apertura in scrittura dei file per registrare i dati utili all’analisi della simulazione # Creazione dell’oggetto simulator set ns [new Simulator] # Apertura dei file dei risultati in “w” set trace_nam [open $sim.nam w] set trace_wnd [open wnd.$sim w] set trace_seq [open sn.$sim w] $ns namtrace-all $trace_nam
Esecuzione dello script 2 Sink 0 1 2 9 Comando per eseguire lo script: ns es2_acronimo_alg.tcl acronimo_alg: fret, nofret Per l’analisi dei risultati vedere la slide relativa dello script 1
Risultati: finestra di trasmissione (no-FRet) 22 • 3.11 sec < t 6.28 sec: • tx di un nuovo pacchetto per ogni ACK relativo ai pacchetti precedente al perso • t=6.28 sec: rx di un DACK; non si trasmette. Si deve attendere lo scadere del RTO • t=10.31 sec: scade il RTO, Chiusura della finestra ad 1 ed inizio della fase di SS Perdita Fast Retr.: Assente Time out 20 18 16 14 12 Finestra di trasmissione (segmenti) 10 8 6 4 Wmax=20; Buffer_size=19 2 0 0 5 10 15 20 25 30 Tempo (s)
Risultati: finestra di trasmissione (FRet) Perdita • t=6.61 sec: ricezione del terzo DACK • Ritrasmissione del pacchetto perso: • t=9.1 sec: ricezione del primo ACK non duplicato relativo al segmento ritrasmesso • Anticipo la reazione del TCP ad un evento di perdita
Risultati: evoluzione del numero di sequenza 250 L’algoritmo di FRet consente di trasmettere un maggior numero di nuovi pacchetti nello stesso intervallo di tempo Fast Retr. No Fast Retr. 225 204 197 200 175 150 125 Numero di sequenza 100 75 50 25 0 0 5 10 15 20 25 30 Tempo (sec)
Script caso 3 • Studio dell’algoritmo di Fast Recovery (C’è ovviamente anche il Fast Retransmit). • Si usa la versione FullTCP che implementa il TCP Reno in maniera bidirezionale. • Si attiva alla ricezione del 3° DACK. 5 passi: • ssthresh=cwnd/2 • ritrasmetto il segmento “mancante” (fast retransmit) • cwnd=ssthresh+3 • Per ogni DACK ricevuto incremento la finestra di 1 e se ammesso trasmetto un nuovo segmento • Alla ricezione dell’ACK per il segmento ritrasmesso: • cwnd=ssthresh • la sorgente riparte a trasmettere in fase di CA
Esecuzione dello script 3 Sink 0 1 2 9 Comando per eseguire lo script: ./ns es2_frec.tcl
20 15 Finestra di Trasmissione (segmenti) 10 5 0 0 2 4 6 8 10 12 14 16 18 20 Tempo (sec) Risultati: finestra di trasmissione (Frec) • t=1.88 sec: evento di perdita di un pacchetto • 1.88 sec < t < 3.89 sec • buffer non vuoto (19 pacchetti da smaltire) • ad ogni nuovo ACK si ha la trasmissione di un nuovo pacchetto • il 20° riscontro è il primo DACK • t=3.89 sec: ricezione di 3 DACK; ritrasmissione fast, aggiornamento finestra
Risultati: finestra di trasmissione (Frec) • 3.89 sec < t < 5.46 sec: per ogni DACK incremento di 1 il valore della finestra • in tal caso però la sorgente non trasmette, avendo già trasmesso tutti i pacchetti permessi dal valore della finestra • t=5.46 sec: ricezione del riscontro del pacchetto ritrasmesso fast • si tratta di un riscontro cumulativo che riscontra anche tutti i pacchetti ricevuti • Sorgente TCP abilitata a trasmettere con finestra pari al valore di ssthresh (cwnd/2= 10)