Il simulatore NS-2

78
Il simulatore NS-2 Paolo Campegiani [email protected] http://www.paolocampegiani.it – p.

description

 

Transcript of Il simulatore NS-2

Page 1: Il simulatore NS-2

Il simulatore NS-2Paolo Campegiani

[email protected]

http://www.paolocampegiani.it

– p.

Page 2: Il simulatore NS-2

Network Simulator - versione 2 (NS-2)

É un simulatore di reti orientato al livello network sviluppatoda UC Berkeley, USC/ISI, Xerox Parc e disponibilegratuitamente in formato sorgente (ma non è GPL).

simulatore scritto in C++

linguaggio di scripting OTcl

ha un tool di analisi grafica: nam

sviluppato per Unix/Linux, può essere compilato ancheper Windows

E’ disponibile sia il solo sorgente del simulatore che tutte lelibrerie di cui ha bisogno, nella versione allinone (circa60MB)

– p.

Page 3: Il simulatore NS-2

Installare NS-2 (1)

Faremo riferimento alla versione presente a partire dawww.ce.uniroma2.it nel materiale per questo corso. Il sito diNS-2 é www.isi.edu/nsnam . Prelevato il file sorgentequesto può essere scompattato ad esempio in /usr/local.Come root:cd /usr/localtar tfvj ns-2-allinone...tar.bz2ln -s /usr/local/ns-allinone-2.27 ns-2

– p.

Page 4: Il simulatore NS-2

Installare NS-2 (2)

Quindi si procede alla compilazione del programma ns-2 edegli altri a corredo:

cd /usr/local/ns-2./install

Intenderemo nel seguito NS_2_BASE_DIR come ladirectory /usr/local/ns-2/ , o qualsiasi altra in cui si sonostati scompattati i sorgenti della versione allinone.

– p.

Page 5: Il simulatore NS-2

Installare NS-2 (3)

Al termine dell’esecuzione del programma di installazione,vengono riportate le modifiche da effettuare sulle variabili diambiente. Tipicamente si ha:export PATH=NS BASE DIR/bin:NS BASE DIR/tcl8.4.5/unix:NS BASE DIR/tk8.4.5/unix:$PATHexport TCL LIBRARY=NS BASE DIR/tcl8.4.5/libraryexport LD LIBRARY PATH=NS BASE DIR/otcl-1.8:NS BASE DIR/libInfine occorre validare il simulatore:./validate

– p.

Page 6: Il simulatore NS-2

Installare NS-2 (4)

Se tutto é andato a buon fine il simulatore é eseguibilelanciando il comando ns , e si puó verificare che versione éin esecuzione:

$ ns% ns-version2.27 (NSWEB/0.2)% quit

– p.

Page 7: Il simulatore NS-2

Installare NS-2 (5)

Oltre ad ns sono installati altri programmi (nella directoryNS_BASE_DIR/bin ):

nam il network animator

tclsh8.4 l’interprete tcl

Il simulatore viene solitamente invocato con il nome di unoscript da eseguire come parametro, ma può operare anchein modo interattivo.

– p.

Page 8: Il simulatore NS-2

Il linguaggio Tcl

Il linguaggio Tcl (Tool Command Language) é un linguaggiodi scripting. Ha a disposizione un toolkit grafico (Tk) ed éstato spesso usato per realizzare programmi diconfigurazione (ad esempio printtool). Anche expect sibasa su Tcl.Siti su Tcl:http://www.tcl.tkhttp://www.msen.com/˜clif/TclTutor.htmlPer accedere alle pagine di manuale relative a Tcl convienespecificare la sezione n: man n puts.

– p.

Page 9: Il simulatore NS-2

Tcl: variabili - 1

Le variabili in Tcl non hanno tipo, e vengono istanziateassegnando loro un valore con il comando set :

set x 10set nome Riccardoset soprannome “Cuor di Leone”

Il valore di una variabile viene acceduto premettendo alnome il simbolo $.

– p.

Page 10: Il simulatore NS-2

Tcl: Il comando puts

Il comando puts visualizza il contenuto di una stringa sullostandard output:

puts “Oggi sto imparando il Tcl.”puts -nonewline “Questo e’ l’inizio di unariga”puts “ e questa e’ la fine”puts “Il soprannome di Riccardo era:$soprannome”

– p. 10

Page 11: Il simulatore NS-2

Tcl: Il risultato di un comando

Il risultato dell’esecuzione di un comando (o dellainvocazione di una funzione) viene espresso con leparentesi quadre [ ]:

set a [comando]set a [funzione $variabile1 $variabile2]

– p. 11

Page 12: Il simulatore NS-2

Tcl: il comando expr e il comando incr

Il comando expr permette di valutare una espressionenumerica, in cui possono comparire anche variabili.

set a 5set b 10puts “La somma vale [expr $a+$b]”set c [expr $a * $b]puts “Il valore di c e’ $c”

– p. 12

Page 13: Il simulatore NS-2

Tcl: il comando incr

Il comando incr permette di incrementare il valore di unavariabile di una quantitá che puó essere specificata e che didefault vale 1.

incr c ;# ora c vale 51

Si possono scrivere piú comandi sulla stessa rigaseparandoli con il carattere ;. I commenti sono indicati dalcarattere #. La stessa riga puó essere spezzata in piú righeutilizzando il carattere \.

– p. 13

Page 14: Il simulatore NS-2

Tcl: il comando switch

Il comando switch é un comando di branching che operacon confronti di tipo testuale.

switch $x \“ONE” : puts “You’re english.” \“UNO” : puts “Sei italiano.” \“default” : puts “Ich weiss nicht.”

– p. 14

Page 15: Il simulatore NS-2

Tcl: il comando if

L’esecuzione condizionale si definisce con il comando if .

if {$x == 100} {puts “Il valore e’ accettabile.”} else { ;# SULLA STESSA RIGA!puts “Il valore non va bene.”}

– p. 15

Page 16: Il simulatore NS-2

Tcl: for e while

Il comando for ha questa sintassi:for {condizione iniziale} {test}{incremento} {corpo del ciclo}for {set i 0} {$i<10} {incr i} {puts “Valore di i: $i”}

Il comando while ha questa sintassi:while {test} {corpo del ciclo}

– p. 16

Page 17: Il simulatore NS-2

Tcl: array associativi (1)

Gli array in Tcl hanno come indice un valore di qualsiasitipo:

set eta(gianni) 5set eta(mario) 10set eta(luigi) 15puts “Mario ha $eta(mario) anni”

– p. 17

Page 18: Il simulatore NS-2

Tcl: array associativi (2)

array exists a ritorna 1 se l’array a esiste.

array names a ritorna una lista contenente i valoridegli indici dell’array a.

array size a ritorna la dimensione dell’array a.

array get a ritorna una lista i cui elementi disparisono i valori dell’indice e i cui elementi pari sono i valoridell’array a.

array set a lista effettua l’operazione inversa(dalla lista ad un array). La lista é nel formato prodottoda array get.

– p. 18

Page 19: Il simulatore NS-2

Tcl: Liste: Creazione

Le liste sono la struttura dati base in Tcl. Sono collezioniordinate di elementi.Possono essere create in diversi modi:

Esplicitamente: set lista { {1} {2} {3} {4}{5}}

Con il comando list: set lista [list 1 2 3 4 5]

Con il comando split: set lista [split “Da unafrase le singole parole” “ ,:“]

– p. 19

Page 20: Il simulatore NS-2

Tcl: Liste: accesso

llindex lista posizione ritorna l’elemento diposizione posizione dalla lista lista. Il primo elementoha posizione 0

llength lista ritorna la lunghezza della lista lista

E’ possibile compiere operazioni su tutti gli elementi di unalista con il comando foreach :foreach el $lista { ;# NON $elputs “Nella lista c’e’ l’elemento $el”}

– p. 20

Page 21: Il simulatore NS-2

Tcl: Liste: modifiche

concat l1 l2 l3 ritorna la concatenazione delleliste l1, l2, l3:set result [concat a b c { 1 2 3} {q { rs } } ]La lista result é: a b c 1 2 3 q { r s }

lappend l1 a1 a2 aggiunge alla lista l1 gliargomenti a1, a2.

linsert lista indice a1 a2 aggiunge alla listalista gli elementi a1 a2 subito dopo la posizione indice.

lreplace lista inizio fine a1 a2 sostituiscegli elementi compresi tra inizio e fine della lista lista congli elementi a1 a2.

– p. 21

Page 22: Il simulatore NS-2

Tcl: Liste: ricerche

lsearch lista pattern ritorna l’indice delelemento di lista che combacia con il pattern (o -1 senon c’é elemento).set elenco [list A B C AAA DG EE FR]set indice [lsearch $elenco AA * ] ==> indicevale 3

lsort lista ordina una lista. Per default in modoalfabetico, per ulteriori informazioni si veda la pagina dimanuale.

lrange lista inizio fine ritorna una lista i cuielementi sono quelli di lista di posizione compresa trainizio e fine.

– p. 22

Page 23: Il simulatore NS-2

Tcl: stringhe

Una stringa in Tcl é una lista i cui componenti sono singolicaratteri.set stringa “Mi sto appassionando al TCLsempre piu’ ”

string length $s ritorna la lunghezza della stringa.

string index $s pos ritorna il carattere diposizione pos della stringa s.

string range $s inizio fine ritorna lasottostringa costituita dai caratteri di posizionecompresa tra inizio e fine della stringa s.

– p. 23

Page 24: Il simulatore NS-2

Tcl: procedure - 1

Le procedure in Tcl si definiscono con il comando proc:proc sum {n1 n2} {set totale [expr $n1 + $n2return $totale}

– p. 24

Page 25: Il simulatore NS-2

Tcl: procedure - 2

Una procedura puó avere un numero variabile di argomenti:

proc p {param1 {param2 “”} } {...}Il parametro param2 é facoltativo. Nel codice dellaprocedura si pu’øvedere se é stato impostatocontrollando se vale o meno “”.

proc p {param1 param2 args} {...}I parametri param1 e param2 sono obbligatori. Ulterioriparametri sono facoltativi e sono nel caso presenti inargs (come sequenza di valori che puó essere tradottain una lista con split).

Lo scoping delle variabili é quello usuale: per accedere aduna variabile globale si usa il comando global: global i .

– p. 25

Page 26: Il simulatore NS-2

Tcl: I/O su file

File esterni possono essere aperti in lettura o scrittura:

set file [open outfile w] ;# Apre in scritturaset file [open outfile r] ;# Apre in letturaputs $file “Ci abbiamo anche l’I/O in Tcl!!”gets $file $valore ;# legge la riga e la memorizza in valore

– p. 26

Page 27: Il simulatore NS-2

Il linguaggio OTcl

OTcl é una estensione object oriented (o quasi...) di Tcl.L’estensione si ottiene con alcuni nuovi comandi, tra cui:

class

instproc

instvar

$self

next

$class

new

Gli altri comandi (in particolare info) sono riportati inNS_BASE_DIR/otcl-<versione>/doc .

– p. 27

Page 28: Il simulatore NS-2

OTcl: class

Il comando class permette di definire una nuova classe.

Class WebClientClass Proxy -superclass WebServer

Questa definizione precede la definizione dei metodi e degliattributi della classe.

– p. 28

Page 29: Il simulatore NS-2

OTcl: instproc,instvar, $self

Il comando instproc permette di definire un metodo diuna classe.Il metodo init é il costruttore di una classe. Il metododestroy é il distruttore.Il comando instvar permette di definire gli attributi di unaclasse.Con $self si intende l’instanza in cui quelle definizionihanno luogo, ed é quindi analogo al this del C++, anchese risulta indispensabile e non opzionale.

– p. 29

Page 30: Il simulatore NS-2

OTcl: instproc, instvar, $self (2)

Ad esempio per dichiarare un costruttore per la classeWebClient si potrebbe avere:WebClient instproc init {modalita_} {$self instvar num_page_read modalitaset num_page_read 0set modalita $modalita_}In questo modo si definisce un costruttore con dueparametri e due attributi della classe (NON gli unici due!).

– p. 30

Page 31: Il simulatore NS-2

OTcl: note su instvar

Non occorre definire tutti gli attributi in tutti i metodi, ésufficiente riportare quelli usati in ogni metodo.

WebClient instproc choose-page {} {$self instvar modalita num_page_asked... }Quindi la classe WebClient ha anche l’attributonum_page_asked.

– p. 31

Page 32: Il simulatore NS-2

OTcl: next

Il comando next permette di far riferimento allasuperclasse della classe corrente, e quindi di eseguire deimetodi altrimenti ridefiniti.Il tipico uso é in un costruttore:Proxy instproc init { param... } {eval $self next $param... }In questo modo viene invocato il costruttore della classe dacui deriva la classe Proxy.

– p. 32

Page 33: Il simulatore NS-2

OTcl: $class

Con $class si fa riferimento alla classe corrente, e quindisi puó utilizzare per definire delle variabili globali a tutte leistanze di una classe.

Webclient instproc init { ... } {$class instvar num_of_clientsincr num_of_clients}

– p. 33

Page 34: Il simulatore NS-2

OTcl: new

Il comando new istanzia un oggetto per una data classe.set myproxy [new Proxy]set myspecproxy [new Proxy/Transcoding]Quindi i metodi vengono richiamati in modo analogo alleprocedure:$myproxy add-handler p1 p2 p3$myproxy show-stats

– p. 34

Page 35: Il simulatore NS-2

NS-2: Architettura

Il simulatore NS-2 é scritto in C++, ed é accessibile in OTcl.Le piú importanti classi disponibili in OTcl sono:

Simulator Il simulatore

Node I nodi

Link I collegamenti tra nodi

Queue Le code dei pacchetti (router)

Agent Entitá livello Transport

LanNode Reti Locali (Ethernet)

Inoltre esistono varie classi di supporto.

– p. 35

Page 36: Il simulatore NS-2

NS-2: un esempio (1)

Vogliamo simulare un traffico di tipo CBR (Constant BitRate) tra due nodi collegati direttamente tra di loro.

set ns [new Simulator] ;# Istanzia un simulatoreset f [open out.tr w]$ns trace-all $f ;# Trace fileset n0 [$ns node] ;# 1o nodoset n1 [$ns node] ;# 2o nodo$ns duplex-link $n0 $n1 1Mb 5ms DropTail ;# link tra i nodi

– p. 36

Page 37: Il simulatore NS-2

NS-2: un esempio (2)

set udpsource [new Agent/UDP]$ns attach-agent $n0 $udp0 ;# traffico di tipo UDPset cbrsource [new Application/Traffic/CBR]$cbrsource attach-agent $udp0 ;# a bitrate costanteset sink [new Agent/Null]$ns attach-agent $n1 $sink ;# Destinatario traffico$ns connect $udpsource $sink$ns at 1.0 “$cbrsource start”$ns at 10.0 “close $f; $ns halt”$ns run ;# Inizio simulazione

– p. 37

Page 38: Il simulatore NS-2

NS-2: la classe Simulator (1)

In ogni simulazione é presente una istanza della classeSimulator che sostanzialmente é lo scheduler deglieventi.

set ns [new Simulator] istanzia un simulatore

[$ns now] riporta l’ora della simulazione

[$ns at time event] Esegue l’evento ad un datoorario.

– p. 38

Page 39: Il simulatore NS-2

NS-2: la classe Simulator (2)

Quindi questa é una procedura che una volta richiamataviene poi eseguita ogni 5 secondi:

proc schedule {} {global nsset now [$ns now]puts “Schedule invocata ad $now”set later [expr $now + 5.00]$ns at $later “schedule”}

– p. 39

Page 40: Il simulatore NS-2

NS-2: la classe Simulator (3)

$ns cancel event cancella un dato evento (atritorna il numero assegnato all’evento)

$ns run fa partire lo scheduler (che é quindi statocaricato prima con le invocazioni di at)

$ns halt Termina la simulazione

– p. 40

Page 41: Il simulatore NS-2

NS-2: trace file (1)

Un trace file é un file di log le cui riportano gli eventiaccaduti ai pacchetti. Sono presenti in piú formati, quellostandard per nodi fissi é il seguente:

O Time S D Type Size flags FlowID SourceAddrDestAddr SeqNo PktID

dove:

O vale:+: aggiunta di un pacchetto in coda-: rimozione di un pacchetto dalla codar: ricezione di un pacchettod: drop di un pacchetto

– p. 41

Page 42: Il simulatore NS-2

NS-2: trace file (2)

Time é il momento in cui l’evento é avvenuto

S e D sono i due nodi coinvolti

Type é il tipo del pacchetto

Size é la dimensione in byte del pacchetto (determinatadall’header IP)

Flags sono i flag eventualmente presenti (trace.cc):E Congestion ExperiencedN ECN CapableC ECN EchoA Congestion Window Reduced (!)P PriorityF TCP Fast Start

– p. 42

Page 43: Il simulatore NS-2

NS-2: trace file (3)

FlowID é il flow identifier (come IPv6)

SourceAddr e DestAddr sono gli indirizzi dei nodicoinvolti

SeqNo é il numero di sequenza (se l’Agente lo genera)

PktId é un identificatore univoco del pacchetto

– p. 43

Page 44: Il simulatore NS-2

NS-2: esempio di trace file

O Time S D Type Size flags FlowID SourceAddr DestAddr SeqNo Pkt ID

+ 1.0000 0 2 cbr 400 - - - - - - - 0 0.0 3.1 225 610

- 1.0005 0 2 cbr 400 - - - - - - - 0 0.0 3.1 225 610

r 1.0011 0 2 cbr 400 - - - - - - - 1 0.0 3.1 225 610

r 1.0012 2 0 ack 40 - - - - - - - 2 3.2 0.1 82 602

d 1.1111 2 3 tcp 1000 - - - - - - - 2 0.1 3.2 102 611

– p. 44

Page 45: Il simulatore NS-2

NS-2: comandi per trace file (1)

$ns trace-all file Imposta il file di trace

$ns namtrace-all file Imposta il file di trace pernam

$ns flush-trace Svuota i buffer dei trace file

$ns monitor-queue param Monitor sulla lunghezzadi una coda

$ns create-trace param Traccia tra due nodispecifici

Il tracing é una operazione molto costosa, ed allunganotevolmente i tempi della simulazione.

– p. 45

Page 46: Il simulatore NS-2

NS-2: comandi per trace file (2)

Occorre sempre specificare un file di trace!Tuttavia si può ridurre la quantità di dati tracciati:

$ns node-config -agentTrace ON -routerTraceOFF -macTrace OFF

In questo modo si ha un tracing solo a livello applicativo esenza il livello network e il livello MAC.

– p. 46

Page 47: Il simulatore NS-2

NS-2: Tipi dei pacchetti

In NS-s sono presenti diversi tipi di pacchetti, come adesempio:

PT_TCP

PT_UDP

PT_CBR

PT_ACK

PT_REQUEST, PT_ACCEPT, PT_CONFIRM,PT_TEARDOWN

– p. 47

Page 48: Il simulatore NS-2

NS-2: unicast routing

É possibile specificare che tipo di routing avere:

$ns rtproto static routing statico, tabellecalcolate all’inizio della simulazione con Dijkstra

$ns rtproto session come sopra, ma ricalcolatose la topologia cambia

$ns rtproto DV $n0 $n1 $n2 i nodi n0, n1, n2usano Distance Vector.

$ns rtproto LS $n0 $n1 i nodi n0, n1 usano Linkstate.

$n0 rtproto Manual i percorsi di routing sonocodificati esplicitamente conadd-route-to-adj-node.

– p. 48

Page 49: Il simulatore NS-2

NS-2: routing gerarchico (1)

I nodi possono essere indirizzati in modo gerarchico, equesto riduce anche la dimensione delle tabelle di routing.Sono possibili fino a 3 livelli gerarchici. Per avere routinggerarchico occorre innanzitutto utilizzare node-config:

$ns node-config -addressType hierarchical

Quindi bisogna specificare il numero di domini, il numero dicluster per dominio, e il numero di nodi per cluster.

– p. 49

Page 50: Il simulatore NS-2

NS-2: routing gerarchico (2)

AddrParams set domain_num 2 ;#due dominilappend cluster_num 2 2AddrParams set cluster_num_$cluster_num ;#ogni dominio ha due clusterlappend nodes 5 10 20 20AddrParams set nodes_num_ $nodes ;#il primocluster ha 5 nodi, il secondo 10, e i due cluster del secondodominio hanno venti nodi l’uno

– p. 50

Page 51: Il simulatore NS-2

NS-2: routing gerarchico (3)

Quindi quando si creano i nodi si specifica anche il loroindirizzo:

set client [$ns node 1.0.10]

1. Ci si assicuri di avere un numero di nodi sufficienti inogni cluster

2. Il nodo x.y.z ha un numero identificativo dato dax ∗ 20482 + y ∗ 2048 + z

– p. 51

Page 52: Il simulatore NS-2

NS-2: nodi

Un nodo ha un identificativo univoco, un indirizzo(progressivo o gerarchico), un insieme di agenti che cigirano sopra, ed un oggetto di tipo Classifier cheindirizza i pacchetti in arrivo all’opportuno agente. Alcunicomandi sono:

$node id ritorna l’id del nodo;

$node-addr ritorna l’indirizzo del nodo;

$node attach agent (port) aggiunge un agenteal nodo, opzionalmente specificando la porta

$node detach agent (null_agent) rimuove unagente, opzionalmente indirizzando pacchetti in arrivoper il vecchio agente ad un null_agent.

– p. 52

Page 53: Il simulatore NS-2

NS-2: link (1)

Un link é un collegamento tra due nodi, e modella sia lacapacitá di un collegamento che il ritardo che la politica discheduling dei pacchetti (tramite degli oggetti di classeQueue). Un link monodirezionale viene creato con:$ns simplex-link $n0 $n1 bw delay tipo-codaMentre un link bidirezionale viene creato con:$ns duplex-link $n0 $n1 bw delay tipo-codae consiste in una coppia di link monodirezionali.

– p. 53

Page 54: Il simulatore NS-2

NS-2: link (2)

Nella definizione di un link viene esplicitato il tipo di coda,ovvero la politica di gestione dei pacchetti, mal’istanziazione viene effettuata dalla procedurasimplex-link, e quindi l’oggetto creato risulta nascosto.Se si vuole avere un accesso diretto all’oggetto occorrecreare il link direttamente tramite una instproc diSimulator:set Q1 [new Queue/MyQueue]set Q2 [new Queue/MyQueue]$Q1 my-command my-param$Q2 my-command my-param

$ns my-set-link

– p. 54

Page 55: Il simulatore NS-2

NS-2: link(3)

Simulator instproc my-set-link {} {global node Q1 Q2$self instvar link_set sid [$node(0) id]set did [$node(1) id]set link_($sid:$did) [new SimpleLink$node(0) $node(1) $OPT(CAP) 2ms $Q1]set link_($did:$sid) [new SimpleLink$node(1) $node(0) 200Kbit 2ms $Q2]}

– p. 55

Page 56: Il simulatore NS-2

NS-2: link (4)

Le code presenti in NS-2 sono di tipo:

DropTail Coda FIFO (dimensione standard 50pacchetti)

FQ Fair Queueing

SFQ Stochastic Fair Queueing

DRR Deficit Round Robin

RED Random Early Detection

CBQ Class Based Queueing

CBQ/WRR CBQ con Weighted Round Robin

– p. 56

Page 57: Il simulatore NS-2

NS-2: Agenti

Gli agenti sono i punti terminali in cui si creano oconsumano i pacchetti che transitano al livello network. InNS-2 gli agenti modellano sia il livello Transport che quelloApplication. Alcuni agenti disponibili sono:

Agent/TCP Mittente TCP

Agent/TCP/Reno Mittente TCP con fast recovery

Agent/TCP/Sack1 Mittente TCP con SACK (RFC2018)

Agent/TCP/FullTcp TCP due vie

Agent/TCPSink destinatario per TCP, TCPReno (nonFullTcp)

UDPmittente e destinatario UDP

Null agente nullo (scarta tutti i pacchetti)– p. 57

Page 58: Il simulatore NS-2

NS-2: Agenti: Creazione

set newtcp [new Agent/TCP]$newtcp set window_ 20 finestra pari a 20$newtcp set fid_ 2 Flow ID pari a 2

Gli agenti si agganciano a dei nodi:$ns attach-agent $node(0) $newtcp$ns attach-agent $node(1) $sink

Infine gli agenti si collegano tra di loro:$ns connect $newtcp $sink

– p. 58

Page 59: Il simulatore NS-2

NS-2: Agenti: avvio e fermo

Gli agenti vengono attivati con l’instproc start:$ns at $time “$newtcp start”

Gli agenti possono essere arrestati con l’instproc stop:$ns at $time “$newtcp stop”

– p. 59

Page 60: Il simulatore NS-2

NS-2: Agenti livello applicativo (1)

Questi agenti si appoggiano su agenti di tipo trasporto.Alcuni esempi sono:

Application/FTP Traffico FTP. Simula trasferimentibulk di dati.

Application/Telnet Traffico di tipo telnet (distribuitoesponenzialmente o secondo tcplib-telnet.cc)

Application/Traffic/Exponential un oggettoOn/Off distribuito esponenzialmente

Application/Traffic/Pareto un oggetto On/Offdistribuito con una Pareto

Application/Traffic/CBR Un constant bit rate

– p. 60

Page 61: Il simulatore NS-2

NS-2: Agenti livello applicativo (2)

Questo esempio configura un traffico CBR su un agenteUDP:set src [new Agent/UDP]set sink [new Agent/UDP]$ns attach-agent $node(0) $src$ns attach-agent $node(1) $sink$ns connect $src $sinkset c [new Application/Traffic/CBR]; $c set packetSize 1500$c set interval 0.1; $c set maxpkts 200$c attach-agent $src

– p. 61

Page 62: Il simulatore NS-2

NS-2: LAN

Una LAN puó essere creata con l’instproc make-lan dellaclasse Simulator:$ns make_lan nodi banda delay LL TipoDiCodaTipoDiMac

Ad esempio per creare una rete Ethernet si ha:

$ns make_lan “$n(0) $n(1) ...” 10Mbit 2msLL Queue/DropTail Mac/Csma/CD

– p. 62

Page 63: Il simulatore NS-2

NS-2: LAN e routing gerarchico

In NS_BASE_DIR/ns-(versione)/tcl/ex/vlantest-hier.tcl é riportato un esempio diutilizzo di LAN quando c’é un routing gerarchico, utilizzandol’instproc newLan:

set lan [$ns newLan $nodelist $opt(bw) \$opt(delay) -llType $opt(ll) -ifqType$opt(ifq) \-macType $opt(mac) -chanType $opt(chan)-address "0.0.0’’

– p. 63

Page 64: Il simulatore NS-2

NS-2: Generazione numeri casuali (1)

La classe RNG modella istanze di un generatore di numericasuali. Il seme di ogni generatore puó essere impostatoeuristicamente (sconsigliato) oppure con un valore scelto.

set rng [new RNG] ;# Istanzia un nuovo generatore$rng seed 0 ;# Seme euristico$rng seed 123 ;# Seme pari a 123$rng seed predef n ;# Usa uno dei 64 semi predefiniti(stream da 33 milioni di elementi)

– p. 64

Page 65: Il simulatore NS-2

NS-2: Generazione numeri casuali (2)

$rng next-random ;# ritorna il prossimo numero$rng uniform a b ;# uniforme in [a..b]$rng integer k ;# intero uniforme in [0..k-1]$rng exponential ;# esponenziale di media 1

– p. 65

Page 66: Il simulatore NS-2

NS-2: Generazione numeri casuali (3)

Le manipolazioni necessarie per passare da unadistribuzione uniforme ad una data possono essereottenute tramite delle classi aggiuntive:

RandomVariable/UniformRandomVariable min_, max_

RandomVariable/ExponentialRandomVariable avg_

RandomVariable/ParetoRandomVariable avg_, shape_

RandomVariable/HyperExponentialRandomVariable avg_, cov_

RandomVariable/ConstantRandomVariable val_

– p. 66

Page 67: Il simulatore NS-2

NS-2: Generazione numeri casuali (4)

Il collegamento viene effettuato tramite use-rng:

set e [new RandomVariable/Exponential]$e use-rng $rngSi impostano quindi i parametri e si ottengono i valori convalue:

$e set avg_ 10set interarrivo [$e value]

– p. 67

Page 68: Il simulatore NS-2

NS-2: NSWEB (1)

NSWEB é una estensione di NS-2 che consente dimodellare facilmente del traffico di tipo Web. É possibileinserire in un server delle pagine aventi dimensioni, numerodi oggetti e dimensione degli oggetti modellati secondodelle variabili casuali, ed avere dei client che richiedono lepagine e gli oggetti in esse presenti. Supporta HTTP/1.1(pipelining e persistenza) e genera un log a livelloapplicativo evidenziando il traffico dovuto agli header e aibody.Directory di riferimento: NS_BASE_DIR/ns-2.27/nsweb

– p. 68

Page 69: Il simulatore NS-2

NS-2: NSWEB: Esempio (1)

NSWEB definisce dei client e dei server, che condividonol’insieme delle pagine che possono essere richieste efornite.Discuteremo il file example.tcl fornito con NSWEB.set ns [new Simulator]set trace [open "session.tr" w]$ns trace-all $trace

– p. 69

Page 70: Il simulatore NS-2

NS-2: NSWEB: Esempio (2)

set log [open "session.log" w]set web [new GPool]$web log $logset se1 [$ns node]set cl1 [$ns node]$ns duplex-link $se1 $cl1 100mb 2ms DropTail

– p. 70

Page 71: Il simulatore NS-2

NS-2: NSWEB: Esempio (3)

set s1 [$web server $se1 $CONN_PIPELINED 515] ;# max 5 connessioni e 15 secondi diinattivita’ per connessioni persistentiset c1 [$web client $cl1 3 $CONN_PIPELINED]# Dimensione delle pagine HTMLset pagesize_gen [newRandomVariable/UdSPareto]$pagesize_gen set scale_ 13300$pagesize_gen set alpha_ 1.2

– p. 71

Page 72: Il simulatore NS-2

NS-2: NSWEB: Esempio (4)

# Numero di oggetti per paginaset embcount_gen [newRandomVariable/UdSPareto]$embcount_gen set scale_ 2$embcount_gen set alpha_ 1.5# Dimensione degli oggettiset embsize_gen [newRandomVariable/UdSPareto]$embsize_gen set scale_ 133000$embsize_gen set alpha_ 1.05

– p. 72

Page 73: Il simulatore NS-2

NS-2: NSWEB: Esempio (5)

# Popolamento del server$web populate-server $s1 100 $pagesize_gen$embcount_gen $embsize_gen ;# Attenzione,example.tcl usa due volte pagesize_gen!set dump [open "demo.dump" w]$web dump-scenario $dump ; close $dump# Meccanismo di selezione delle pagineset page_gen [new AccessGenerator/Uniform0.0 1.0]$web set-page-generator $page_gen

– p. 73

Page 74: Il simulatore NS-2

NS-2: NSWEB: Esempio (6)

# Imposta l’interarrivo delle richiestedelle pagineset inter_request [newRandomVariable/UdSPareto]$inter_request set scale_ 10$inter_request set alpha_ 1.5#10 richieste per questa sessioneset u 10$ns at 1.0 "session_handler $c1"$ns run

– p. 74

Page 75: Il simulatore NS-2

NS-2: NSWEB: Esempio (7)

proc session_handler { client } {global ns length web u log inter_requestputs stderr "Call to session handler: [$nsnow]"if { $u > 0 } {set page [$web select-page]set nextpage [$page getID]set wait [$inter_request value]set nt [expr [$ns now] + $wait]

– p. 75

Page 76: Il simulatore NS-2

NS-2: NSWEB: Esempio (8)

$ns at $nt "$client request-page $page"session_handler $client"set u [expr $u - 1]} else { ;# u vale 0# Termina la simulazione tra 30 secondi$ns at [ expr [$ns now] + 30.0 ] "finish"} ;#chiusura if} ;#chiusura proc

– p. 76

Page 77: Il simulatore NS-2

Binding C++/OTcl

– p. 77

Page 78: Il simulatore NS-2

Estendere ns-2

– p. 78