Manuale di Network Simulator v.2
Capitolo 1 - Introduzione ad ns
a cura di Sandro Petrizzelli
Questo documento fornisce una documentazione di riferimento per il simulatore Network Simulator (d’ora in poi, NS). Cominceremo con un semplice esempio di script di simulazione. Del resto, esistono in rete vari tutorial (sotto forma di normali documenti o di slides) che possono probabilmente costituire il modo migliore per cominciare ad usare questo programma.
Come premesso, cominciamo mostrando un semplice esempio di script di simulazione (rintracciabile nel file ~ns/tcl/ex/simple.tcl).
Questo script serve a definire una topologia di 4 nodi e di due agenti: uno di essi è un agente UDP sul quale si “appoggia” un generatore di traffico di tipo CBR (Constant Bit Rate, cioè con tasso di emissione dei bit costante), mentre l’altro è un classico agente TCP. La simulazione dura 3 secondi. Il suo output è costituito da due “trace files”, denominati “out.tr” e “out.nam”. Quando la simulazione termina (dopo i 3 secondi specificati), il programma avvia il programma NAM (se installato), per una comoda visualizzazione grafica della simulazione sullo schermo.
Lo script appena descritto è il seguente:
# The preamble
set
ns [new Simulator]
;# initialise the simulation
#
Predefine tracing
set
f [open out.tr w]
$ns
trace-all $f
set
nf [open out.nam w]
$ns namtrace-all $nf
#
so, we lied. now, we define the topology
#
#
n0
#
\
#
5Mb\
#
2ms \
#
\
#
n2 --------- n3
#
/ 1.5Mb
#
5Mb / 10ms
#
2ms /
#
/
#
n1
#
set
n0 [$ns node]
set
n1 [$ns node]
set
n2 [$ns node]
set
n3 [$ns node]
$ns
duplex-link $n0 $n2 5Mb 2ms DropTail
$ns
duplex-link $n1 $n2 5Mb 2ms DropTail
$ns
duplex-link $n2 $n3 1.5Mb 10ms DropTail
#
Some agents.
set
udp0 [new Agent/UDP]
;# A UDP agent
$ns
attach-agent $n0 $udp0
;# on node $n0
set
cbr0 [new Application/Traffic/CBR] ;# A
CBR traffic generator agent
$cbr0
attach-agent $udp0
;# attached to the UDP agent
$udp0
set class_ 0
;# actually, the default, but...
set
null0 [new Agent/Null]
;# Its sink
$ns
attach-agent $n3 $null0
;# on node $n3
$ns
connect $udp0 $null0
$ns
at 1.0 "$cbr0 start"
puts
[$cbr0 set packetSize_]
puts
[$cbr0 set interval_]
#
A FTP over TCP/Tahoe from $n1 to $n3, flowid 2
set
tcp [new Agent/TCP]
$tcp
set class_ 1
$ns
attach-agent $n1 $tcp
set
sink [new Agent/TCPSink]
$ns
attach-agent $n3 $sink
set
ftp [new Application/FTP]
;# TCP does not generate its own traffic
$ftp
attach-agent $tcp
$ns
at 1.2 "$ftp start"
$ns
connect $tcp $sink
$ns at 1.35 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"
#
The simulation runs for 3s.
#
The simulation comes to an end when the scheduler invokes the finish{}
#
procedure below.
#
This procedure closes all trace files, and invokes nam visualization on
#
one of the trace files.
$ns
at 3.0 "finish"
proc
finish {} {
global
ns f nf
$ns
flush-trace
close
$f
close
$nf
puts
"running nam..."
exec
nam out.nam &
exit
0
}
#
Finally, start the simulation.
$ns
run
Non
si ritiene di dover descrivere dettagliatamente fin da ora cosa fanno le
istruzioni appena elencate, dato che ne daremo ampia descrizione nelle pagine
seguenti. Del resto, i nomi utilizzati sono abbastanza intuitivi e, insieme ai
commenti riportati, danno un’idea sufficiente di cosa fa lo script appena
riportato.
Continua con: Indice Capitolo 2
Aggiornamento: 14 aprile 2001