400 likes | 546 Views
Il simulatore ns2 – Network Simulator ver. 2. D.E.I.S. Università di Bologna DEIS Net http://deisnet.deis.unibo.it/. Note sull’installazione. NS2 viene naturalmente installato su sistema operativo UNIX.
E N D
Il simulatore ns2 – Network Simulator ver. 2 D.E.I.S. Università di Bologna DEISNet http://deisnet.deis.unibo.it/ IC3N 2000
Note sull’installazione • NS2 viene naturalmente installato su sistema operativo UNIX. • È possibile installare NS2 anche su Windows appoggiandosi sulla piattaforma Cygwin che simula l’ambiente Linux. • Trovate tutto il materiale sul sito del corso http://deisnet.deis.unibo.it/Didattica/CorsiBO/RetiLS/Laboratorio(2007) • NS2 • Cygwin • Istruzioni per le installazioni
NS2 su Cygwin (per Windows) • Cygwin è scaricabile liberamente da Internet o in alternativa lo trovate sul sito dell’esame. • Prima di tutto installare Cygwin in C: o in C:/Programmi. • È consigliabile installare tutti i componenti (all install)
Installazione di NS2 su windows(1) • Scaricare il file ns-allinone 2.29.2.tar.gznella directory C:/Cygwin. • Aprire Cygwin e arrivare nel file system alla cartella C:/Cygwin • Scompattare il file ns-allinone-2.29.2.tar.gz nella directory C:/Cygwin (o C:/Programmi/Cygwin) con il comando: tar -xvzf ns-allinone-2.29.2.tar.gz • Posizionarsi nella cartella /ns-allinone-2.29/ • Lanciare il comando di installazione: ./install • Aggiornare il file ~/.bashrc che si trova nella home di ns aggiungendo i comandi che trovate nelle spiegazioni (v.slide successiva).
Installazione di NS2 su windows(2) • Aggiornare il file ~/.bashrc che si trova nella home di ns (vedi file readme.pdf) • Questa operazione serve per riconoscere il file eseguibile ns.exe da ogni parte del file system (e non solo dalla cartella in cui è contenuto) • Il file va aggiornato aggiungendo nella propria home directory il percorso (PATH) dell’eseguibile ns.exe • es: PATH=$PATH;”directory” • $PATH è il “percorso” precedente che NON va modificato. “directory” è il percorso di ns.exe da aggiungere.
Utilizzo di NS2 in laboratorio. • Lanciare Cygwin (icona nel desktop) o in “all programs” Cygwin Cygwin bash shell • Posizionarsi nella directory: C:/cygwin/ns-allinone-2.29/ns-2.29/NSCRIPT/examples usando i comandi • cd C: e poi • cd cygwin/ns-allinone-2.29/ns-2.29/NSCRIPT/examples • Cartella “examples” dedicata alle Lezioni: • ns.exe • grafici.nss, script.tcl • Gnuplot (per la visualizzazione dei risultati)
Il simulatore: ns2 – Network Simulator ver. 2 • Simulatore di reti di telecomunicazioni • sviluppato presso l’University of Southern California's Information Sciences Institute (ISI) • software di simulazione di pubblico dominio (open source) • http://www.isi.edu/nsnam/ns/ • http://www.isi.edu/nsnam/ns/ns-documentation.html • Motore di simulazione (engine): linguaggio C++ • Interazione utente-simulatore: linguaggio OTcl • Otcl (Object-oriented Tool Command Language) • Linguaggio di scripting • natura interpretata non compilata • alta efficienza a livello di utente nello sviluppo del codice
User Space User Space OTcl Script .... .... Risultati ..... ns2 La simulazione con script OTcl • OTcl è il mezzo con il quale l’utente può simulare il funzionamento di una rete reale
ns2: simulatore tempo-discreto ad eventi • L’istante in cui si presenta un evento attiva l’esecuzione di azioni specificate dal programma • Gli eventi sono caratterizzati dall’istante di simulazione ed inseriti in una lista degli eventi • Il simulatore agisce sulla lista eventi • inserisce un nuovo evento nella lista • processa l’evento attuale estraendolo dalla lista • esegue le azioni associate all’evento • elimina l’evento processato • L’accesso alla lista è gestito da uno scheduler • ns2 è uno strumento in continua evoluzione • permette la definizione di nuove classi per la caratterizzazione di nuovi componenti di rete, collegamenti, protocolli, ecc,...
Scheduler select next event Lista Eventi t0 :evento 0 t1: evento 1 t2: evento 2 ...... ...... ...... tn: evento n add new event remove old event Invocazione Elaborazione event i Gestione degli eventi • La gestione degli eventi coinvolge l’unità di elaborazione, lo scheduler e la lista eventi
Il linguaggio C++ • Evoluzione del linguaggio C • introduzione di una particolare struttura dati: classe • Classe: • tipo di dato con struttura definita dal programmatore • permette un elevato livello di astrazione • interazione solo con gli oggetti della classe attraverso particolari funzioni proprie della stessa (metodi) • Le funzionalità della classe si sfruttano facendo un’istanza della stessa: • L’istanza è denominata oggetto • Possibilità di rappresentare il comportamento di entità reali
Linguaggio OTcl • Permette di descrivere tutte le operazioni fondamentali per la simulazione • Attraverso opportuni comandi consente l’impostazione del set-up: • Topologia di rete, • caratteristiche dei link, • tipo di traffico, • protocolli supportati,... • Elaborazione e presentazione dei risultati di una simulazione
Caratteristiche e comandi Otcl: esempi (1) • Creare, inizializzare ed eliminare una varaibile: • set <nome_variabile> <valore> • unset <nome_variabile> • Chiamata per riferimento e per valore • per riferimento:$variabile • per valore: variabile • Input di parametri esterni: if {$argc == 2} { set a [lindex $argv 0] set b [lindex $argv 1] } exit 1 Ad a viene assegnato il primo valore dell’array argv e a b il secondo. Argv è l’array dei parametri in ingrsso
Caratteristiche e comandi Otcl: esempi (2) • Cicli FOR for {set i 0}{$i < 100}{incr i}{ set v($i) [new vettore] } • Cicli WHILE while {$i < 100}{ set v($i) [new vettore] incr i } • Istruzioni IF if {$i < 10} { puts "i is less than 10" }
Le procedure OTcl • Sono un componente fondamentale di Otcl • facilitano la programmazione • permettono l’esecuzione di azioni ricorsive • caratterizzano il programma in blocchi logici • Esempio: proc proc3 {min max} { set randomvar [uniform $min $max] return $randomvar } set randomvar [proc3 0 1]: qual è il risultato?
Interazione fra classi C++ e classi OTcl • Le classi C++ che costituiscono ns2 implementano l’insieme dei protocolli disponibili • L’ambiente OTcl : • permette la definizione di classi OTcl direttamente connesse alle classi C++ (linkage) • fornisce i metodi per l’utilizzo delle classi • ns2 utilizza le due tipologie di classe e consente di creare gestire ed analizzare una rete di telecomunicazioni • lo script OTcl è il mezzo per creare gli oggetti della rete ed i relativi collegamenti fra gli stessi
Le classi standard di ns2 • Le classi standard utili per implementare un modello di rete per lo studio del protocollo TCP sono: • SIMULATOR • NODE • LINK • AGENT • ERROR MODEL • TRACE • MONITOR
La classe SIMULATOR • Classe fondamentale di ns2 • Permette di istanziare il motore di simulazione • Primo oggetto creato da uno script OTcl set ns [new simulator] • I metodi della classe simulator permettono di • configurare la simulazione • schedulare gli eventi • I metodi della classe simulator: 3 categorie • configurazione della topologia (creazione dei nodi, dei link,...) • monitoraggio dell’evoluzione temporale di oggetti (trace) • configurazione dello scheduler
La classe NODE: generalità • Classe implementata in Otcl • Implementano le funzionalità del protocollo IP • definizione dell’indirizzamento • routing • consegna delle unità informative al protocollo di trasporto • Due tipi: • Unicast Node: per gestire pacchetti con un solo mittente ed un solo destinatario • Multicast Node: per gestire pacchetti con un solo mittente e più destinatari
La classe NODE: comandi • Creazione dell’oggetto NODE: set node1 [$ns node] • Ritorno dell’identificatore di nodo $node1 id • Creazione di N oggetti NODE for {set i 0} {$i < N} {incr i} {set node$i [$ns node]} • $node1 attach <agent>
La classe LINK: generalità • Oggetti che permettono i collegamenti fra gli oggetti NODE • Definita da 5 elementi principali:
invocazione della classe simulator creazione di 4 oggetti NODE attraverso il metodo “node” appartenente alla classe ns Creazione di 2 collegamenti fra i nodi specificandone il tipo, la capacità, il ritardo e la politica di coda all’interfaccia fra il nodo ed il link d’uscita La classe LINK: creazione dell’oggetto • Esempio: set ns [ new Simulator ] set node1 [ $ns node ] set node2 [ $ns node ] set node3 [ $ns node ] set node4 [ $ns node ] $ns simplex-link $node1 $node2 10Mb 1ms DropTail $ns duplex-link $node3 $node4 100Mb 50ms DropTail
B=10Mb; d=1ms 2 1 La classe LINK: creazione dell’oggetto • Esempio: set ns [ new Simulator ] set node1 [ $ns node ] set node2 [ $ns node ] set node3 [ $ns node ] set node4 [ $ns node ] $ns simplex-link $node1 $node2 10Mb 1ms DropTail $ns duplex-link $node3 $node4 100Mb 50ms DropTail B=50Mb; d=50ms 4 3
La classe LINK: alcuni comandi • queue-limit: massima dimensione della coda $ns queue-limit <node0> <node1> <queue_limit> • $link up: attiva un collegamento • $link down: disabilita un collegamento • $link up?: interrogazione sullo stato di un link
Applicazione A Applicazione B AGENT A AGENT B NODO 1 LINK NODO 2 NODO 3 LINK LINK La classe AGENT: generalità • Gli agent sono gli elementi dove si realizza: • la generazione a livello di rete delle unità informative che devono essere trasmesse (es.:applicazione che invia dati) • la rimozione delle stesse dopo la ricezione (es.: applicazione che riceve i dati)
La classe AGENT: caratteristiche • L’agent non riceve realmente dati dall’applicazione ma solo la dimensione dell’unità informativa (bytes) • Diversi tipi di agent per gestire diversi tipi di protocolli di trasporto (es. TCP, UDP,…) • Per ogni protocollo di trasporto è definito: • Un agent trasmettitore • Un agent ricevitore • Al nodo ricevitore i pacchetti vengono “scartati” dall’agent ricevitore (libera la memoria associata alla struttura dati del pacchetto) • AGENT NULL (scarto) • AGENT TCPSink (scarto +ACK)
La classe AGENT: agent TCP • Due categorie possibili: • Agent TCP unidirezionali • Agent trasmettitori • Agent ricevitori • Agent TCP bidirezionali • Possibilità di impostare diverse versioni del TCP • Tahoe, Reno, NewReno, Vegas etc. • La classe Agent/TCP è caratterizzata da numerose variabili membro • Senza nessuna specifica valore di default • Possibilità di modificare i valori di default Agent/TCP set <member_variable> <value>
Agent/TCP: variabili membro e significato • window: dimensione massima della finestra di congestione/ricezione • packetsize: dimensione in byte del pacchetto trasmesso • tcpTick: granularità temporale nella stima del RTT • maxrto: valore massimo per il RTO • dupacks: contatore degli ack duplicati • Ack: il valore più alto di ACK ricevuto • cwnd: dimensione della finestra di congestione (in pacchetti) • sstresh: valore della soglia di slow start • rtt: campione del RTT • srtt: valor medio del campione di RTT • rttvar: varianza del campione di RTT • maxseq: massimo numero di sequenza trasmesso • ....
La classe AGENT: utilizzo • Esempio: set ns [ new Simulator ] set node1 [ $ns node ] set node2 [ $ns node ] $ns simplex-link $node1 $node2 100Mb 2ms DropTail set agent1 [ new Agent /UDP ] set agent2 [ new Agent / Null ] $ns attach-agent $node1 $agent1 $ns attach-agent $node2 $agent2 $ns connect $agent1 $agent2 $agent1 set fid_ 1 #associa i pacchetti ad certo flusso tramite la viaribile membro “flow indicator” 1 1 1 Agent 2 Agent 1 Link node 2 node 1
La classe APPLICATION: generalità • Ha lo scopo di emulare le applicazioni più comuni e le caratteristiche di profili di traffico noti. • Le unità dati generate da oggetti application sono passati all’oggetto agent tramite funzioni di interfaccia. • Possibilità di: • generare traffico tipico di applicazioni del mondo reale (FTP File Transfer Protocol, Telnet, WEB) • Configurare le caratteristiche dell’applicazione • In ns2 l’applicazione non genera veri dati ma solo delle dimensioni di file (es.: numero di byte inviati per trasferire un file mp3) • I byte generati vengono incapsulati in segmenti TCP dall’agent corrispondente con intestazioni TCP/IP
Simulatore di applicazioni: esempio (FTP) set ns [new Simulator] set node1 [$ns node] set node2 [$ns node] $ns duplex-link $node1 $node2 1Mb 1ms DropTail set agent1 [new Agent/TCP] set agent2 [new Agent/TCPSink] $ns attach-agent $node1 $agent1 $ns attach-agent $node2 $agent2 $ns connect $agent1 $agent2 set application1 [new Application/FTP] $application1 attach-agent $agent1 $ns at 0.0 "$application1 start"
La classe APPLICATION: generatori di traffico • In ns2 sono implementate 4 classi derivate dalla classe TrafficGenerator: • EXPOO_Traffic. generazione di traffico “On/Off ” con distribuzione exp dei tempi di permanenza in ogni stato • POO_Traffic: tempi di permanenza in ciascuno stato distribuiti secondo una distribuzione di Pareto (bursty) • CBR_Traffic: generazione di traffico a rate costante, con pacchetti di dimensione fissa • TrafficTrace: generazione di trafficoeffettivo ottenuto da misurazioni sulla rete
La classe ERRORMODEL: generalità • Consente di riprodurre il verificarsi di errori a livello fisico e/o la perdita di unità dati • Si basa sull’utilizzo di due stratagemmi: • Attivazione dei flag di errore nella struttura del pacchetto come indicazioni di presenza di bit errati (opzione di default) • Invio del pacchetto ad un unità di scarto (drop target) invece che al destinatario per simulare la perdita del pacchetto • L’evento di errore può quindi essere definito sia a livello di bit sia di pacchetto
Monitoraggio e raccolta dei risultati • Due strategie possibili per raccogliere i risultati della simulazione • definizione di due diversi oggetti ns: • oggetti trace • oggetti monitor • Oggetto trace: • inserito tra due nodi • produce un report su tutti gli eventi che hanno interessato i pacchetti trasmessi sul link durante la simulazione • necessità di associare all’oggetto trace un elemento di raccolta dei dati di simulazione (TclChannel (un file)) • Oggetto monitor: • sfrutta l’uso di contatori • permette di monitorare i parametri d’interesse durante la simulazione
La classe TRACE • Ogni pacchetto è tracciato grazie ad una intestazione (hdr_cmn) caratterizzata da • un identificativo unico • il tipo di pacchetto • la dimensione del pacchetto (tempo di trasmissione) • un identificativo dell’interfaccia di trasmissione (per il caso multicast) • un identificativo di flusso • nodo sorgente • nodo destinazione
creazione dei nodi sorgente, destinazione e del link fra essi apertura in scrittura del file di trace traccia.tr creazione del file traccia.tr con trace-queue chiusura del file a fine simulazione e apertura in lettura per leggere i risultati La classe TRACE: esempio di utilizzo set ns [ new Simulator ] set source [ $ns node ] set dest [ $ns node ] $ns duplex-link 100Mb 1ms DropTail set trace_file [open traccia.tr w] $ns trace-queue $source $dest $trace_file .... .... close $trace_file set trace_file [open traccia.tr r]
La classe TRACE: formato del file • Caratterizzato da un formato standard in cui si specifica: • tipo di evento (ricezione, accodamento, trasmissione, scarto) • istante in cui si verifica l’evento • nodo sorgente e nodo destinazione • tipo di pacchetto • dimensione • flag per utilizzi specifici (collegamenti wireless, etc,...) • identificativo di flusso • identificativo univoco di pacchetto • numero di sequenza
La classe MONITOR: generalità • Permette di costruire oggetti in grado di monitorare alcune grandezze (variabili di stato) di utilità per l’analisi dei risultati di simulazione • Consente anche di specificare l’intervallo di campionamento delle variabili monitorate • 0.1 sec di default
La classe MONITOR: esempio • Monitoraggio dello stato della coda posta fra due nodi (n1 ed n2): set queue1_2 [$ns monitor-queue $n1 $n2 [$ns get-ns-traceall]] • queue1_2: puntatore all’oggetto MONITOR • $ns get-ns-traceall: comando per definire il puntatore ai dati