1 / 40

Il simulatore ns2 – Network Simulator ver. 2

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.

dympna
Download Presentation

Il simulatore ns2 – Network Simulator ver. 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Il simulatore ns2 – Network Simulator ver. 2 D.E.I.S. Università di Bologna DEISNet http://deisnet.deis.unibo.it/ IC3N 2000

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

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

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

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

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

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

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

  9. 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,...

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

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

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

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

  14. 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" }

  15. 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?

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

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

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

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

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

  21. La classe LINK: generalità • Oggetti che permettono i collegamenti fra gli oggetti NODE • Definita da 5 elementi principali:

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

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

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

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

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

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

  28. 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 • ....

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

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

  31. 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"

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

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

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

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

  36. 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]

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

  38. La classe TRACE: esempio di file trace

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

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

More Related