Date post: | 21-Dec-2015 |
Category: |
Documents |
View: | 216 times |
Download: | 2 times |
N. 1
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
N. 2
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
N. 3
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
N. 4
Scenari di rete per la simulazione
• Topologia 1: analisi SS e CA
• Topologia 2: analisi Fast Retr./Fast Rec.
Nodo Sorgente
10Mb; 100ms; DropTail
Nodo Destinazione
Router
256Kb; 100ms; DropTail
1Mb; 10ms; DropTail 55Kb; 10ms; DropTail
Nodo Sorgente
Nodo Destinazione
Router
N. 5
Classe Agent/TCP/RFC793edu
• Variabili membro della classe e valori di default
(SS+CA)
(CA)
(SS)
N. 6
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
N. 7
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
N. 8
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
N. 9
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
N. 10
Script caso 1: step 4
• Procedura “standard” per il monitoraggio della finestra
proc sampleswnd { interval } {global ns trace_swnd tcp1set 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)
N. 11
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"
}
N. 12
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"
}
N. 13
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
}
N. 14
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
N. 15
Esecuzione dello script 1
Comando per eseguire lo script:
ns es2_acronimo_alg.tcl
0 1 2
Sink
acronimo_alg dim_buffer
ss, noss, ca 18
ssca 8
N. 16
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 lplot “sn.acronimo_alg” w lexit
with lines
uscire da gnuplot
N. 17
Analisi dei risultati (2/2)
Comandi per salvare il grafico in formato eps:
gnuplotset terminal postscript eps
set output “wnd.acronimo_alg.eps”
plot “wnd.acronimo_alg” w lexit
Per visualizzare il grafico:gv file.eps
Nb: per visualizzare i file .eps in windows occorrono ghostview e ghostscript
N. 18
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”
N. 19
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
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
0 0.5 1 1.5 2 2.5 3 3.5 4
Fin
estr
a d
i tra
smis
sio
ne (
segm
ent
i)
tempo (s)
SS: presenteSS: assenteRTO: chiusura della finestra ad 1
N. 20
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”
N. 21
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)
0
10
20
30
40
50
60
70
80
90
100
0 0.5 1 1.5 2 2.5 3 3.5 4
Num
ero
di s
eque
nza
tempo (sec)
SS: presenteSS: assente
N. 22
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”
N. 23
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
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
0 0.5 1 1.5 2 2.5 3 3.5 4
Fin
est
ra d
i tra
smis
sio
ne
(se
gm
en
ti)
tempo (sec)
SSCA
N. 24
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”
N. 25
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
0
10
20
30
40
50
60
70
80
90
100
0 0.5 1 1.5 2 2.5 3 3.5 4
Seq
eunc
e N
umbe
r (s
egm
enti)
tempo (sec)
SSCA
N. 26
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.
N. 27
Risultati: SS e CA
Slow Startgeometrica
ssthresh
time out
Slow Start
Congestion Avoidancelineare
• 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
0
5
10
15
20
25
0 2 4 6 8 10
Slid
ing
Win
dow
(se
gmen
ts)
Simulation Time (s)
“CWND_ssca"
N. 28
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).
N. 29
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
N. 30
Esecuzione dello script 2
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
0 1 29
Sink
N. 31
Risultati: finestra di trasmissione (no-FRet)
• 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
0
2
4
6
8
10
12
14
16
18
20
22
0 5 10 15 20 25 30
Fin
estr
a di
tras
mis
sion
e (s
egm
enti)
Tempo (s)
Fast Retr.: AssentePerdita
Wmax=20; Buffer_size=19
Time out
N. 32
Risultati: finestra di trasmissione (FRet)
• 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
Perdita
N. 33
Risultati: evoluzione del numero di sequenza
L’algoritmo di FRet consente di trasmettere un maggior numero di nuovi pacchetti nello stesso intervallo di tempo
0
25
50
75
100
125
150
175
200
225
250
0 5 10 15 20 25 30
Num
ero
di s
eque
nza
Tempo (sec)
Fast Retr.No Fast Retr.
204197
N. 34
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: 1. ssthresh=cwnd/22. ritrasmetto il segmento “mancante” (fast retransmit)3. cwnd=ssthresh+34. Per ogni DACK ricevuto incremento la finestra di 1 e se
ammesso trasmetto un nuovo segmento5. Alla ricezione dell’ACK per il segmento ritrasmesso:
• cwnd=ssthresh• la sorgente riparte a trasmettere in fase di CA
N. 36
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
0
5
10
15
20
0 2 4 6 8 10 12 14 16 18 20
Fin
est
ra d
i Tra
smis
sio
ne
(se
gm
en
ti)
Tempo (sec)
N. 37
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)