Sommario NS-2 Basic Introduzione Architettura Oggetti in ns Alessio Mura Simulazioni Luca Pastorino Generazione traffico Generazione scenari Analisi dei risultati 1 2 Sommario Cos’è NS2 Introduzione NS sta per Network Simulator Architettura Dal sito degli sviluppatori http://www.isi.edu/nsnam/ns/ Oggetti in ns “Ns is a discrete event simulator targeted at networking research. Ns provides substantial support for simulation of TCP, routing, and multicast protocols over wired and wireless (local and satellite) networks.” Simulazioni Generazione traffico Generazione scenari Analisi dei risultati 3 4 Caratteristiche tecniche Storia Alcuni numeri: 1989: ns una variante di REAL network simulator (University of California) 1992: Estensioni wireless da CMU Monarch project, UCB Daedelus e Sun Microsystems 1995: DARPA VINT project (UC Berkeley, USC/ISI, LBL, Xerox PARC) Oggi: DARPA SAMAN project e NSF CONSER project Versione corrente 2.27 27000 linee di codice C++ 12000 linee di codice OTcl 18000 linee di esempi 5000 linee di documentazione Piattaforme supportate Unix e Unix like (Linux, FreeBSD, …) Solaris Windows MAC Più di 10000 utenti nel Mondo! 5 Obiettivi di NS2 6 Funzionalità Wired Ricerca e didattica sul networking Routing: DV, LS, PIM-SM Trasporto: TCP and UDP Sorgenti di traffico: web, ftp, telnet, cbr, … Politiche per le code: drop-tail, RED, FQ, SFQ, DRR QoS: IntServ e Diffserv Emulazione Protocol design, analisi del traffico Confronti tra diversi protocolli Ambiente collaborativo Distribuito gratuitamente e open source Visualizzazione semplice dei risultati Wireless Ad hoc routing e mobile IP Directed diffusion, sensor-MAC Diversi livelli di dettaglio nello stesso simulatore Tracing, visualizzazione e varie utility 7 8 Nam (wired) Utility Nam (Network animator) permette la visualizzazione di: Flusso dei pachetti Code Movimento dei nodi nelle reti wireless Generazione di scenari setdest adhockey Generazione di traffico cbrgen 9 Nam (wireless) 10 Sommario Introduzione Architettura Oggetti in ns Simulazioni Generazione traffico Generazione scenari Analisi dei risultati 11 12 OTcl (1) Architettura di ns Object-oriented OTcl è l’abbreviazione di MIT Object Tcl. E’ un linguaggio di scripting Oggetti implementati in C++ e OTcl (Object Tool Command Language) Estensione di Tcl/Tk (Tool Command Language/Tool Kit) per la programmazione object oriented Approccio modulare Decomposizione degli oggetti in modo fine-grained Separazione della parte di controllo da quella dei “dati” Operazioni di controllo in OTcl Operazioni sugli oggetti C++ Sviluppato per essere estendibile dinamicamente Costruito seguendo la sintassi di Tcl Potente linguaggio per la programmazione ad oggetti Portabile Non tipato 13 OTcl (2) OTcl (3) Uso di variabili Commenti con (#) set a 44 set b [expr $a*4] Costrutto if if {$c == "Hell"} { puts "Oh god !" } else { puts "Peace !" } Dichiarazione di funzioni proc power {base p} { set result 1 while {$p > 0} { set result [expr $result * $base] set p [expr $p - 1] } return $result } 14 15 16 OTcl (file) NS-2 visto dall’utente Apertura set f [open out.dat <perm>] <perm> = w (write), r (read) Scrittura puts $f “$time $val” Lettura while { ![eof $f] } { gets $f line } Chiusura close $f 17 Due linguaggi: C++ e OTcl C++ 18 Due linguaggi: interazione OTcl Esecuzione veloce Esecuzione lenta Difficile da modificare (richiede la ricompilazione di ns-2) Facilmente modificabile (senza bisogno di ricompilare) Usato per implementare protocolli e algoritmi e manipolare i dati Usato per implementare lo scenario, effettuare azioni in determinati istanti e manipolare oggetti C++ esistenti OTcl (variante ad oggetti di Tcl) e C++ condividono la gerarchia delle classi TclCL permettere di interagire fra i due mondi (condividere funzioni e variabili) 19 20 Relazione OTcl/C++ Sommario Introduzione Architettura Oggetti in ns set ns_ [new Simulator] set node_(0) [$ns_ node] set node_(1) [$ns_ node] Simulazioni class MobileNode : public Node { friend class PositionHandler; public: MobileNode(); … 21 } Oggetti in NS (1) Generazione traffico Generazione scenari Analisi dei risultati 22 Oggetti in NS (2) Applicazioni Generatori di traffico Exponential On/Off Pareto On/Off CBR Simulazioni di applicazioni Telnet FTP User-defined 23 24 Oggetti in NS (4) Oggetti in NS (3) Link Agent (entità a livello trasporto) W ired TCP UDP RTP User-defined Simplex Duplex W ireless Node W ired W ireless 25 26 Schema generale (1) Sommario Introduzione Architettura Oggetti in ns Simulazione Generazione traffico Generazione scenari Analisi dei risultati 27 28 Schema generale (2) Sequenza di azioni Descrivere lo scenario di rete mediante uno script OTcl Eseguire la simulazione Dalla shell di Linux, digitare ns <nomescript> Analizzare i risultati A seconda di quanto viene specificato nello script Otcl in input, ns può produrre in output diversi tipi di trace file Output trace di ns Output per nam Output per visualizzatori grafici 29 File creati ad-hoc Creazione di un event scheduler 30 Tracing Creazione dell’event scheduler Tracing dei pacchetti su tutti i link (sul file test.out) set ns_ [new Simulator] $ns trace-all [open test.out w] <event> <time> <from> <to> <pkt> <size> <seq> <attr> + 1 0 2 cbr 210 ------- 0 0.0 3.1 0 - 1 0 2 cbr 210 ------- 0 0.0 3.1 0 r 1.00234 0 2 cbr 210 ------- 0 0.0 Schedulare gli eventi $ns_ at <time> “<event>” <event>: ogni comando ns/tcl valido Es. $ns_ at 0.0 “power 2 5” -- <fid> <src> <dst> 0 0 3.1 0 0 Tracing dei pacchetti su tutti i link per il visualizzatore nam Partenza dello scheduler $ns namtrace-all [open test.nam w] Questi comandi devono apparire subito dopo la creazione dello scheduler $ns_ run Terminazione dello scheduler $ns_ halt Creazione di un event scheduler Impostazioni del tracing Creazione dello scenario Setup del routing Inserimento delle probabilità d’errore di trasmissione Creazione di connessioni a livello trasporto Creazione del traffico Operazioni per la terminazione 31 32 Creazione dello scenario (wired) Setup del routing Nodi Unicast set n0 [$ns node] $ns rtproto <type> <type>: Static, Session, DV, cost, multi-path set n1 [$ns node] Multicast Link e code $ns multicast (da mettere dopo [new Simulator]) $ns mrtproto <type> $ns <link_type> $n0 $n1 <bandwidth> <delay> <queue_type> <type>: CtrMcast, DM, ST, BST Altri tipi di routing supportati: source routing, hierarchical routing <link_type>: duplex-link, simplex-link <queue_type>: DropTail, RED, CBQ, FQ, SFQ, DRR, diffserv RED queues Es. $ns duplex-link $n0 $n1 10Mb 20ms DropTail33 Probabilità d’errore di trasmissione 34 Connessioni (Agent) UDP Creazione dell’Error Module set set $ns $ns $ns set loss_module [new ErrorModel] $loss_module set rate_ 0.01 $loss_module unit pkt $loss_module ranvar [new RandomVariable/Uniform] TCP set set $ns $ns $ns $loss_module drop-target [new Agent/Null] Inserimento dell’Error Module $ns_ lossmodel $loss_module $n0 $n1 35 udp [new Agent/UDP] null [new Agent/Null] attach-agent $n0 $udp attach-agent $n1 $null connect $udp $null tcp [new Agent/TCP] tcpsink [new Agent/TCPSink] attach-agent $n0 $tcp attach-agent $n1 $tcpsink connect $tcp $tcpsink 36 Traffico (Application) (1) Traffico (Application) (2) Generatori di traffico Applicazioni (simulazioni) CBR FTP set src [new Application/Traffic/CBR] set ftp [new Application/FTP] Exponential or Pareto on-off Telnet set src [new Application/Traffic/Exponential] Pareto on-off set telnet [new Application/Telnet] Per legare l’applicazione ad un agente set src [new Application/Traffic/Pareto] $application attach-agent $agent 37 38 Simulazione wireless: variabili per la configurazione Termine della simulazione Reset dei nodi set set set set set set set set set set set set set set set set finesim 100 $ns_ at $finesim “$nodo reset” Chiusura dei file Esempio di procedura di pulizia $ns_ at $finesim "stop" proc stop {} { global ns_ tracefd close $tracefd } 39 opt(chan) opt(prop) opt(netif) opt(mac) opt(ifq) opt(ll) opt(ant) opt(ifqlen) opt(nn) opt(adhocRouting) opt(sc) opt(x) opt(y) opt(seed) opt(stop) Channel/WirelessChannel Propagation/TwoRayGround Phy/WirelessPhy Mac/802_11 Queue/DropTail/PriQueue LL Antenna/OmniAntenna 50 100 DSDV "scene-100" 1000 1000 0.0 100 40 Configurazione nodi wireless Creazione dei nodi wireless Prima della creazione dei nodi usare Creazione dei nodi $ns_ node-config \ -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF \ -movementTrace ON set nodo [$ns_ node ] $nodo random-motion 0; Setting della posizione iniziale $nodo set X_ 5.0 $nodo set Y_ 2.0 $nodo set Z_ 0.0 Spostamento del nodo $ns_ at 50.0 "$nodo setdest 5.0 5.0 5.0" Posizione iniziale per nam 41 Sommario $ns_ initial_node_pos <nodo> <size> 42 Generazione traffico Introduzione Per generare traffico con connessioni TCP o CBR : Architettura sintassi: ns cbrgen.tcl [-type cbr|tcp] [-nn nodes] [-seed seed] [-mc connections] [-rate rate] > [outfile] Oggetti in ns Simulazione esempio: ns cbrgen.tcl –type cbr –nn 50 – seed 5 Generazione traffico –mc 6 –rate 4 > cbr-50-4 Lo script si trova <ns-dir>/indep-utils/cmuscen-gen/ Generazione scenari Analisi dei risultati 43 44 Sommario Creazione scenari (1) Introduzione Comando per la creazione di nodi con movimenti casuali: Architettura Sintassi: ./setdest [-n num_of_nodes] [-p pausetime] [-s maxspeed] [-t simtime] [-x Oggetti in ns maxx] [-y maxy] > [outdir/movement-file] Simulazione Esempio: ./setdest -n 20 -p 2.0 -s 10.0 -t 200 -x 500 -y 500 > scen-20-test Generazione traffico Generazione scenari Analisi dei risultati 45 Creazione di scenari (2) Il comando si trova nella directory: <ns-dir>/indep-utils/cmu-scengen/setdest/ 46 Sommario Caricamento di un file di scenario Introduzione source $val(cp) dove val(cp) è la variabile che contiene il nome del file Architettura Oggetti in ns Simulazione Nota: nei file di scenario le variabili dei nodi vengono chiamate per default node_(<num_nodo>)!! Generazione traffico Generazione scenari Analisi dei risultati 47 48 Esempi GNUPlot Rete wired Programma per il disegno di grafici 2D e 3D <ns-dir>/tcl/ex/simple.tcl Al prompt di Linux lanciare gnuplot Rete wireless Due modi di funzionamento <ns-dir>/tcl/ex/simple-wireless.tcl Grafici di funzioni (es. plot 3*x+1) Grafici di dati contenuti in un file (es. plot “file.dat”) Link utili www.csi.uni.edu/Help/gnuplot/ www.gnuplot.info 49 50 Sommario 2 NS-2 Advanced Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Compilazione di ns Alessio Mura Luca Pastorino 51 52 Introduzione Sommario 2 Finora abbiamo visto ns-2 come una blackbox (uso esclusivo di OTcl) Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Compilazione di ns E’ possibile personalizzare il comportamento dei nodi implementando nuovi Protocolli (formati di pacchetti) Agenti Applicazioni Occorre manipolare file di ns-2 o inserirne di nuovi (intervento sul codice C++) 53 NS-2 visto dall’utente 54 Sommario 2 Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Compilazione di ns 55 56 Gerarchia delle cartelle Gerarchia delle classi ns-allinone tcl tk otcl indep-utils ns-2 tclcl tcl ex nam-1 common man bin lib 57 Relazione C++/OTcl: costruttore Relazione C++/OTcl: campi • Per costruire un oggetto C++ quando viene creato un oggetto Otcl occorre definire una classe simile alla seguente: I campi di un oggetto C++ normalmente non sono visibili da Otcl static class MyAgentClass: public TclClass { Per accedere ad una variabile da Otcl occorre effettuare un bind: public MyAgentClass() : TclClass(“Agent/MyAgent”){} MyAgent::MyAgent() : Agent(PT_UDP){ bind(“my_var1_otcl”, &my_var1); bind(“my_var2_otcl”, &my_var2); } TclObject* create(int , const char*const*){ return (new MyAgent()); } } 58 59 Per ulteriori info cercare Otcl Linkage 60 Relazione C++/OTcl: campi(2) Relazione C++/OTcl: metodi Le variabili di cui si è fatto il bind DEVONO essere inizializzate nel file <ns-dir>/tcl/lib/ns-default.tcl I metodi di una classe C++ non sono accessibili da Otcl Per definire dei metodi utilizzabili da Otcl occorre usare il metodo command Da OTcl i campi di un oggetto saranno accessibili nel seguente modo: int MyAgent::command(int argc, const char* argv){ if (argc==2){ if (strcmp(argv[1], “my-priv-function”)==0){ MyPrivFunc(); return(TCL_OK); } } } impostare un valore: $my_agent set my_var1_otcl 10 prendere un valore set my_var [$my_agent set my_var1_otcl] 61 62 Nodo unicast 63 # ! " Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Raggio di comunicazione Compilazione di ns Sommario 2 64 Composizione di un nodo Sommario 2 Nodo collezione di agent e classifier Agent punto terminale di una connessione entità associata ad una porta spedisce/riceve pacchetti sul canale Classifier demultiplexer per i pacchetti in arrivo sull’interfaccia 65 Pacchetti in ns2 Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Raggio di comunicazione Compilazione di ns 66 Esempio nuovo pacchetto I pacchetti sono eventi Formato del pacchetto: Sono composti da una parte header e alcune volte anche da una parte dati code tokens Sono incapsulati all' interno di pacchetti ns bbcast-packet.h Contengono un common header bbcast-packet.cc Dimensione,Timestamp, type, uid, interface label Per gestire i propri dati bisogna implementare nuovi header 67 68 Modifiche ad NS2 (1) Modifiche ad NS2 (2) File <ns-dir>/common/packet.h enum packet_t { PT_TCP, PT_UDP, Nuovo pacchetto …, // insert new packet types here PT_BROADCASTBASE, PT_NTYPE // This MUST be the LAST one }; … class p_info { public: p_info() { name_[PT_TCP]= "tcp"; … name[PT_BROADCASTBASE]=“Broadcastbase”; name[PT_NTYPE]=“undefined”; } … File <ns-dir>/common/ns-process.h enum AppDataType { // Illegal type ADU_ILLEGAL, … BBCAST_DATA, // Last ADU ADU_LAST }; Nuovo pacchetto 69 Modifiche ad NS2 (3) 70 Sommario 2 Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Raggio di comunicazione Compilazione di ns File <ns-dir>/tcl/lib/ns-packet.tcl foreach prot { AODV ARP Nuovo pacchetto aSRM … Broadcastbase } { add-packet-header $prot } 71 72 Creazione di un nuovo agente Esempio nuovo agente Il nuovo agente sara` derivato dalla classe Agent o da una derivata da essa BroadcastbaseAgent Spedisce e riceve pacchetti del formato da me definito, sia broadcast che unicast Udp Tcp Rtp File sorgente E` necessario implementarlo se si vogliono gestire pacchetti creati ad-hoc BroadcastbaseAgent.h BroadcastbaseAgent.cc E` l’intermediario tra l’applicazione ed il canale di trasmissione 73 Esempio nuova applicazione Sommario 2 Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Raggio di comunicazione Compilazione di ns 74 BroadcatbaseApp Schedula l' invio dei pacchetti, mantiene le info sui token e gestisce i pacchetti ricevuti File sorgente BroadcastbaseApp.h BroadcastbaseApp.cc 75 76 Invio dei pacchetti Sommario 2 Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Invio dei pacchetti: Broadcast Raggio di comunicazione Compilazione di ns Unicast Un agente invia i pacchetti sempre all' agente a cui e'“connesso” tramite la funzione connect $ns connect $agent1 $agent2 Per mandare pacchetti ad un nodo diverso occorre creare ad-hoc i pacchetti Gli indirizzi di ns sono specificati dalla struttura ns_addr_t 77 78 Sommario 2 Broadcast Creazione del pacchetto Packet *pkt = allocpkt(2); struct hdr_cmn *ch = HDR_CMN(pkt); struct hdr_ip *ih = HDR_IP(pkt); ch->ptype() = PT_BROADCASTBASE; ch->next_hop_ = IP_BROADCAST; ih->saddr() = Agent::addr(); ih->daddr() = IP_BROADCAST; ih->sport() = 250; Costanti per il ih->dport() = 250; broadcast ih->ttl_ = 1; … Agent::send(pkt, 0); 79 Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Broadcast Raggio di comunicazione Compilazione di ns 80 Raggio di comunicazione Sommario 2 Si cambia nello script con il comando Phy/WirelessPhy set RXThresh_ <nuovo_valore> Per ottenere il valore serve il comando threshhold che si trova nella directory <ns-dir>/indep-utils/propagation/ Nel caso in cui l' eseguibile non fosse presente compilare il file threshold.cc con g++ Eseguire il comando threshold -m <propag_model> distanza Es.: threshold -m TwoRayGround 100 81 Installazione di ns2 Introduzione Struttura di ns Struttura di un nodo Creazione di un nuovo pacchetto Creazione di un nuovo agente Creazione di una nuova applicazione Invio pacchetti: Broadcast Raggio di comunicazione Compilazione di ns 82 Ricompilazione (1) Per installare la versione 2.27 di ns2 all-in-one I file user-defined devono essere compilati. Per farlo occorre modificare il makefile nella cartella ns-2.27 Estrarre i file dall’archivio ns-allinone in una vostra directory sotto /home/local/ (ad es. / home/local/gruppoXX/) OBJ_CC = \ tools/random.o tools/rng.o tools/ranvar.o \ common/misc.o common/timer-handler.o \ common/scheduler.o common/object.o \ … broadcast/bbcast-packet.o \ broadcast/BroadcastbaseAgent.o \ broadcast/BroadcastbaseApp.o Nuovi\file $(OBJ_STL) comando: tar -zxvf ns-allinone-2.27.tar.gz Entrare nella cartella ns-allinone-2.27 e eseguiro lo script install Incrociare le dita affinchè vada tutto per il meglio!! 83 84 Note per l' esercitazione Ricompilazione (2) Utilizzare la shell bash (é un consiglio...) Dalla cartella di ns-2.27 eseguire make clean make depend make Aggiungere nel proprio pathname la cartella <ns-dir>/bin/ Nel caso in cui son siano aggiunti nuovi file basta make 85 Come trovarci 86 Riferimenti (1) Per domande, dubbi e perplessità su NS2 (NON sull' esercitazione) Home Page di NS versione 2 Alessio Mura Manuale generale http://www.isi.edu/nsnam/ns/ [email protected] http://www.isi.edu/nsnam/ns/ns-documentation.html Manuale di Marc Greis Luca Pastorino http://www.isi.edu/nsnam/ns/tutorial/ [email protected] Oppure Sealab al piano zero 87 88 Riferimenti (2) NS by examples http://nile.wpi.edu/NS/ NS Simulator for beginners http://wwwsop.inria.fr/mistral/personnel/Eitan.Altman/ns.htm OTcl http://bmrc.berkeley.edu/research/cmt/cmtdoc/otcl/ 89