Script caso 1 - Reti di Telecomunicazioni

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. 1
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. 2
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. 3
Scenari di rete per la simulazione
• Topologia 1: analisi SS e CA
Router
Nodo
Destinazione
Nodo
Sorgente
• Topologia 2: analisi Fast Retr./Fast Rec.
Router
Nodo
Sorgente
Nodo
Destinazione
N. 4
Classe Agent/TCP/RFC793edu
• Variabili membro della classe e valori di default
(SS+CA)
(CA)
(SS)
N. 5
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. 6
Script caso 1: step 1
• Istanza al simulatore
• Apertura in scrittura dei file per registrare i dati utili
all’analisi della simulazione
set
set
set
set
set
set
$ns
$ns
ns [new Simulator]
trace_nam [open $sim.nam w]
trace_all [open $sim.tr w]
trace_swnd [open wnd.$sim w]
numseq [open sn.$sim w]
loss [open loss.$sim w]
namtrace-all $trace_nam
trace-all $trace_all
N. 7
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. 8
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
Valore massimo
#$ns attach-agent $n2 $tcp2
dell’advertised
#$ns connect $tcp1 $tcp2
window
$tcp1 set window_ 20
Traffico trasferimento dati
set ftp1 [new Application/FTP]
Sfrutta tuttta la banda
$ftp1 attach-agent $tcp1
N. 9
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
swnd=min(cwnd,wnd)
} else {
set swnd $curr_cwnd
}
puts $trace_swnd "$now $swnd"
$ns at [expr $now + $interval] "sampleswnd
$interval"
}
N. 10
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. 11
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. 12
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. 13
Script caso 1: step 9
• Scheduling della simulazione
$ns
$ns
$ns
$ns
$ns
$ns
at 0.0 "sampleswnd 0.05"
at 0.0 "altri_tcp_var 0.05"
at 0.0 "LossMon 0.05"
at 0.1 "$ftp1 start"
at 12.0 "finish"
run
N. 14
Esecuzione dello script 1
Sink
0
1
2
Comando per eseguire lo script:
ns es2_acronimo_alg.tcl
acronimo_alg
dim_buffer
ss, noss, ca
18
ssca
8
N. 15
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
N. 16
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
N. 17
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. 18
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
Finestra di trasmissione (segmenti)
28
26
24
RTO: chiusura della finestra ad 1
SS: presente
SS: assente
22
20
18
16
14
12
10
8
6
4
2
0
0
0.5
1
1.5
2
tempo (s)
2.5
3
3.5
4
N. 19
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. 20
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)
100
SS: presente
SS: assente
90
Numero di sequenza
80
70
60
50
40
30
20
10
0
0
0.5
1
1.5
2
2.5
3
3.5
4
tempo (sec)
N. 21
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. 22
Risultati: crescita exp. (SS) e lineare (CA)
Finestra di trasmissione (segmenti)
• Apertura lenta della finestra nel caso di crescita lineare
(utile in prossimità di situazioni di possibile congestione)
• Assenza di perdita in entrambi i casi
28
26
24
22
20
18
16
14
12
10
8
6
4
SS
CA
2
0
0
0.5
1
1.5
2
2.5
tempo (sec)
3
3.5
4
N. 23
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. 24
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
100
SS
CA
90
Seqeunce Number (segmenti)
80
70
60
50
40
30
20
10
0
0
0.5
1
1.5
2
2.5
3
3.5
4
tempo (sec)
N. 25
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. 26
Risultati: SS e CA
“CWND_ssca"
Sliding Window (segments)
25
time out
Slow Start
geometrica
20
15
ssthresh
10
5
Congestion Avoidance
lineare
Slow Start
0
0
2
4
6
8
10
Simulation Time (s)
• 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
N. 27
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. 28
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. 29
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
N. 30
Risultati: finestra di trasmissione (no-FRet)
22
20
Finestra di trasmissione (segmenti)
Fast Retr.: Assente
Perdita
Time out
18
16
14
12
10
8
6
4
2
Wmax=20; Buffer_size=19
0
0
•
•
•
5
10
15
Tempo (s)
20
25
30
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
N. 31
di SS
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
N. 32
Risultati: evoluzione del numero di sequenza
250
Fast Retr.
No Fast Retr.
225
204
197
Numero di sequenza
200
175
150
125
100
75
50
25
0
0
5
10
15
20
25
30
Tempo (sec)
L’algoritmo di FRet consente di trasmettere un maggior
numero di nuovi pacchetti nello stesso intervallo di tempo
N. 33
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/2
2. ritrasmetto il segmento “mancante” (fast retransmit)
3. cwnd=ssthresh+3
4. Per ogni DACK ricevuto incremento la finestra di 1 e se
ammesso trasmetto un nuovo segmento
5. Alla ricezione dell’ACK per il segmento ritrasmesso:
• cwnd=ssthresh
• la sorgente riparte a trasmettere in fase di CA
N. 34
Esecuzione dello script 3
Sink
0
1
2
9
Comando per eseguire lo script:
./ns es2_frec.tcl
N. 35
Risultati: finestra di trasmissione (Frec)
Finestra di Trasmissione (segmenti)
20
15
10
5
0
0
2
4
6
8
10
12
Tempo (sec)
14
16
18
20
• 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,
N. 36
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)
N. 37