Download - Esercitazione 2

Transcript
Page 1: Esercitazione 2

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

Page 2: Esercitazione 2

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

Page 3: Esercitazione 2

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

Page 4: Esercitazione 2

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

Page 5: Esercitazione 2

N. 5

Classe Agent/TCP/RFC793edu

• Variabili membro della classe e valori di default

(SS+CA)

(CA)

(SS)

Page 6: Esercitazione 2

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

Page 7: Esercitazione 2

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

Page 8: Esercitazione 2

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

Page 9: Esercitazione 2

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

Page 10: Esercitazione 2

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)

Page 11: Esercitazione 2

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"

}

Page 12: Esercitazione 2

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"

}

Page 13: Esercitazione 2

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

}

Page 14: Esercitazione 2

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

Page 15: Esercitazione 2

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

Page 16: Esercitazione 2

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

Page 17: Esercitazione 2

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

Page 18: Esercitazione 2

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”

Page 19: Esercitazione 2

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

Page 20: Esercitazione 2

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”

Page 21: Esercitazione 2

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

Page 22: Esercitazione 2

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”

Page 23: Esercitazione 2

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

Page 24: Esercitazione 2

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”

Page 25: Esercitazione 2

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

Page 26: Esercitazione 2

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.

Page 27: Esercitazione 2

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"

Page 28: Esercitazione 2

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).

Page 29: Esercitazione 2

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

Page 30: Esercitazione 2

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

Page 31: Esercitazione 2

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

Page 32: Esercitazione 2

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

Page 33: Esercitazione 2

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

Page 34: Esercitazione 2

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

Page 35: Esercitazione 2

N. 35

Esecuzione dello script 3

Comando per eseguire lo script:

./ns es2_frec.tcl

0 1 29

Sink

Page 36: Esercitazione 2

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)

Page 37: Esercitazione 2

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)