NS-2 Basic

Transcript

NS-2 Basic
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