260 likes | 460 Views
Esercitazione ns2 N° 1. D.E.I.S. Università di Bologna DEIS Net http://deisnet.deis.unibo.it/. 10Mb ; 10ms ; DropTail. destinazione. sorgente. Esercitazione script1 - Analisi del prodotto Banda Ritardo.
E N D
Esercitazione ns2 N° 1 D.E.I.S. Università di Bologna DEISNet http://deisnet.deis.unibo.it/ IC3N 2000
10Mb; 10ms; DropTail destinazione sorgente Esercitazione script1 - Analisi del prodotto Banda Ritardo • nome e percorso del file:C:\cygwin\ns-allinone-2.29\ns-2.29\esercitazione\es1_script1.tcl • Analisi del meccanismo a finestra del TCP ed effetti del prodotto BANDA - RITARDO • Topologia di rete considerata • Link bidirezionale • Capacità: 10Mb • Ritardo: 10ms • Politica di gestione della coda: DropTail • 2 nodi: sorgente e destinazione • Protocollo di trasporto: TCP • dimensione della sliding window: 6 • Sorgente: CBR (Constant Bit Rate) a 10 Mb/s
Dimensione ideale della finestra • Wid = ritardo (sec) banda (bit/sec) Rappresenta la quantità di informazione che utilizza al 100% la tratta tra trasmettitore e ricevitore • Se W < Wid: si spreca banda • Se W > Wid: è necessario accodare nei router intermedi e cresce il ritardo e quindi potenzialmente anche la perdita • Massimo throughput ottenibile: W/RTT dove RTT è il Round Trip Time
Stima del rate medio • Stima approssimata del rate medio • parametri noti: • Dimensione della finestra: 6 segmenti • Dimensione di ogni segmento: 1000 bytes • Tempo di propagazione sul link: 10 msec • Tempo di trasmissione del pacchetto: 1000 8 / 107 = 0.8 msec • Calcolo approssimato del RTT • si considerano trascurabili il tempo per la creazione dell’ACK da parte del ricevitore ed il tempo di trasmissione dell’ACK • RTT = (10 2 + 0.8) 10-3 = 20.8 msec • Calcolo del rate medio stimato • Rate = Wnd / RTT = 1000 8 6 / (20.8 10-3) = 2.307 Mbit/sec
Creazione dello script Otcl: step 1 • Definizione delle variabili globali necessarie per monitorare le grandezze utili alla valutazione del rate di trasmissione # Inizializzazione delle variabili per calcolare e registrare # su un file il rate di trasmissione # numero di byte registrati dall’oggetto monitor set NumBytePrec1 0 # istante corrente di monitoraggio set TimePrec1 0
Creazione dello script Otcl: step 2 • Creazione dell’oggetto Simulator che comprende le funzionalità del simulatore ns2 • Apertura in scrittura del file per l’animazione (out.nam) e del file su cui saranno registrati i dati utili a produrre le valutazioni richieste (rate fra i due nodi) (rate.dat) • Attribuzione di un colore ai pacchetti del flusso 1 set ns [new Simulator] # apertura file set nam_file [open out.nam w] $ns namtrace-all $nam_file set rate_file [open rate.dat w] # colorazione dei pacchetti del flusso 1 $ns color 1 Red
Creazione dello script Otcl: step 3 • Creazione della topologia: 2 nodi e link di collegamento fra essi in base alle specifiche # Nodo sorgente set src_node [$ns node] # Nodo destinazione set dst_node [$ns node] # Link bidirezionale fra i 2 nodi $ns duplex-link $src_node $dst_node 10Mb 10ms DropTail
Creazione dello script Otcl: step 4 • Definizione degli elementi che generano e raccolgono il traffico nella rete: agent • Agent di riferimento: TCP 793edu • versione del TCP descritta nella RFC 793 • versione Tahoe del protocollo TCP e permette di decidere sull’attivazione dei diversi algoritmi del TCP, come slow-start, fast-recovery, ... # Agent in nodo sorgente set src_agent [new Agent/TCP/RFC793edu] # Agent in nodo destinazione set dst_agent [new Agent/TCPSink] # Collegamenti Agent/nodo $ns attach-agent $src_node $src_agent $ns attach-agent $dst_node $dst_agent # Connessione fra i due agent $ns connect $src_agent $dst_agent $src_agent set window_ 6 #rappresenta la rwnd definita dal ricevitore all’inizio della trasmissione
Creazione dello script Otcl: step 5 • Definizione dell’oggetto application per la generazione del traffico d’utente • Sorgente CBR # Creazione dell’oggetto Application/Traffic/CBR (Constant Bit Rate e # associazione alla variabile src_traffic. set src_traffic [new Application/Traffic/CBR] # Attribuzione del rate $src_traffic set rate_ 10Mb # Specifica di quale agent riceve i dati dall’applicazione $src_traffic attach-agent $src_agent
Creazione dello script Otcl: step 6 • Monitoraggio del rate del traffico generato: • creazione di un oggetto QueueMonitor associato alla variabile monitor inserito fra nodo sorg. e nodo dest. set monitor [$ns monitor-queue $src_node $dst_node [$ns get-ns-traceall]] • Si noti che in ns le code sono implementate sui link
Creazione dello script Otcl: step 7 • Creazione della procedura per monitorare e registrare il rate durante la simulazione sul file precedentemente aperto proc record {} { global rate_file monitor ns global NumBytePrec1 TimePrec1 set now [$ns now] set Bytes [$monitor set barrivals_] set time 0.1 set DeltaByte [expr $Bytes-$NumBytePrec1] set DeltaTime [expr $now-$TimePrec1] if { $DeltaTime == 0 } then { $ns at [expr $now+$time] "record" return } Definizione delle variabili globali: sono il puntatore al rate_file, all’oggetto monitor che dà le info da scrivere, all’oggetto ns, alle due variabili appoggio Registrazione del tempo corrente (now) e del numero di byte registrati dall’oggetto monitor (Bytes) DeltaByte: N° di byte nell’intervallo considerato DeltaTime: evita divisione per zero nella prima chiamata Gestione eventuale divisione per zero
Creazione dello script Otcl: step 8 # Stampa dell’istante di monitoraggio e del corrispondente # valore del rate puts $rate_file "$now [expr $DeltaByte/$DeltaTime*8]" set NumBytePrec1 $Bytes set TimePrec1 $now $ns at [expr $now+$time] "record" } Aggiornamento delle variabili e nuova chiamata alla procedura
Creazione dello script Otcl: step 9 • Creazione della procedura di fine simulazione per la chiusura di tutti i file e schedulazione degli eventi proc finish {} { global ns nam_file rate_file $ns flush-trace close $nam_file close $rate_file exec nam out.nam & exit 0 } # Indicazioni per la gestione degli eventi $ns at 0.0 "$src_traffic start" $ns at 0.0 "record" $ns at 5.0 "finish" $ns run
Creazione dello script Otcl: step 10 • lo script con Lo script è salvato come: es1_script1.tcl • Lanciare la simulazione con il comando: ./ns es1_script1.tcl • La simulazione produce 2 risultati: • il file rate.datnel quale è memorizzato il valore del rate misurato durante la simulazione. Tale file verrà utilizzato dal programma per produrre i grafici delle curve del rate di trasmissione (es.: gnuplot) il file rate.datè un file di testo con due colonne: • prima colonna: istante di campionamento • seconda colonna: valore campionato • il file out.nam utilizzato da NAM (se richiesto)
Risultati di simulazione • Riportando i dati contenuti nel file rate.dat in un graficosi otterrà l’andamento temporale del rate di trasmissione. • Il rate medio sarà caratterizzato da una certa variabilità:durante il periodo di riferimento saranno presenti degli intervalli temporali in cui il trasmettitore si pone in attesa dei riscontri. • Rappresentazione del rate medio stimato nello stesso grafico al fine di un confronto con il rate osservato.
Gnuplot: esempio per grafico cnwd_size=6 Lanciare gnuplot cliccando sull’eseguibile wgnuplot.exe situato nella cartella: C:\cygwin\ns-allinone-2.29\ns2.29\esercitazione. Dopo aver lanciato gnuplot digitare le seguenti istruzioni: g(x)=2.307e6 set data style linespoints set xrange[0:5] set yrange[1.6e6:2.6e6] set xlabel "Tempo (s)" set ylabel "Rate (bit/s)" plot "rate6.dat" title "cwnd=6", g(x) title "rate medio"
Rate medio stimato ed osservato: grafico 2.6e+006 Rate istantaneo Rate medio 2.4e+006 2.2e+006 Rate (bit/sec) 2e+006 1.8e+006 window size = 6 1.6e+006 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Simulation Time (sec)
Considerazioni (1) • L’andamento del rate medio osservato oscilla attorno al valore del rate medio stimato a causa di periodi più o meno lunghi in cui il Tx è in attesa di riscontri. • Rate medio stimato pari a 2.307 Mbit/sec • Capacità trasmissiva pari a 10 Mbit/sec • Si ha una sotto-utilizzazione del collegamento dovuta ai periodi di attesa dei riscontri da parte del trasmettitore • Effetto del prodotto banda-ritardo • quantità di informazione che utilizza al 100% la tratta tra trasmettitore e ricevitore • maggiore è il rapporto Banda-Ritardo, maggiore sarà la quantità informazione trasmessa nel collegamento tra sorgente e destinatario.
Considerazioni (2) • Per sfruttare al massimo la capacità trasmissiva del collegamento devo trasmettere una quantità d’informazione pari al prodotto bandaritardo • Rate(medio)=Wnd(bit)/RTT(s) • Fisso Rate a 10Mbit/sec; • RTT noto • Trovo Wnd ottimo • In base alle specifiche • RTT = 2*(tempo di propagazione) + tempo di trasmissione = 10 ms * 2 + 0.8 = 20.8 ms • numero massimo di bit che può contenere contemporaneamente il collegamento pari a: • Banda × RTT • 10 Mbit/sec 20.8 msec = 208 Kbit = 26 Kbyte • Possibilità di determinare il dimensionamento ottimo della finestra di ricezione per il controllo di flusso del TCP
Dimensionamento Ottimo • Dimensionamento ottimo: valore da assegnare alla dimensione della finestra tale da non produrre sotto-utilizzazione del collegamento • Dimensione dei pacchetti: 1000 bytes • Massimo numero di bit che può contenere contemporaneamente il collegamento: 26 kbyte • Dimensione minima della finestra che permette l’utilizzo ottimale del link: 26 Kbyte / 1000 byte per pacchetto = 26 pacchetti
Analisi del dimensionamento ottimo con ns • Impostazione del nuovo valore della dimensione della finestra nello script Otcl • Sostituire: $src_agent set window_ 6 • con: $src_agent set window_ 26 • Oppure modificare nel grafico i parametri relativi all’agent TCP e salvare di nuovo lo script e sostituire 26 con 6 sia nei parametri sia nelle definizioni dei file di uscita: • set rate_file [open rate6.dat w] • set trace_file [open out6.tr w] • Nuova simulazione con il valore aggiornato della dimensione della finestra • Guardando l’andamento del rate si potrà riscontrare che utilizzando il valore ottimo della finestra è possibile utilizzare a pieno il collegamento
Gnuplot: esempio per grafico cnwd_size=26 Dopo aver lanciato gnuplot digitare le seguenti istruzioni: set data style linespoints set xrange[0:5] set yrange[1.6e6:2.6e6] set xlabel "Tempo (s)" set ylabel "Rate (bit/s)" plot "rate6.dat" title "cwnd=6", rate26.dat title “cwnd=26"
Rate osservato con dimensionamento ottimo 1.05e+007 rate 1e+007 9.5e+006 9e+006 8.5e+006 Rate (bit/sec) 8e+006 7.5e+006 7e+006 6.5e+006 window size = 26 6e+006 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Simulation Time (sec)
Rate osservato: confronto 1.2e+007 window size = 6 window size = 26 1e+007 8e+006 Rate (bit/sec) 6e+006 4e+006 2e+006 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Simulation Time (sec)
Grafici dei risultati: gnuplot • Gnuplot è un programma per la realizzazione dei grafici a partire da file di dati in cui sono registrati i risultati (prodotto Gnu; SO LINUX) • Da linea di comando: gnuplot • Vincolo: il file dati dev’essere organizzato in colonne separate da una tabulazione • Prima colonna interpretata come i dati rappresentati sull’asse x • Seconda colonna e successive interpretati come i dati rappresentativi dell’asse y • Senza nessuna indicazione gnuplot assume come dati da plottare sull’asse x e sull’asse y i dati elencati nella prima e nella seconda colonna rispettivamente
Comandi gnuplot • set data style lines • Grafica i dati come linee • set xrange[0:1] • Imposta l’intervallo dell’asse x (tra 0 e 10 in questo caso). Analogamente per l’assey • set xlabel “tempo di simulazione” • Imposta l’etichetta dell’asse x. analogamente per l’asse y • plot “nome_file” • Visualizza il grafico prendendo i dati dal file nome_file.est • save “nome.plt” • Salva l’ultimo grafico visualizzato, con tutte le impostazioni in un file .ptl • load “nome.plt” • Rivisualizza il file precedentemente impostato e memorizzato (senza bisogno di ripetere il settaggio)