Vous êtes sur la page 1sur 32

The ns-2 Network Simulator

Dino M. LOPEZ P. dino.lopez@unice.fr

Avant propos

Ce cours est une version modifi du cours prsent par Emmanuel Lochin (Novembre 2007) l'ISAE Ce cours a t inspir galement des prsentations et documents ns suivants :

Cours ns-2 de Chadi BARAKAT Tutoriel ns-2 de Michel Welzl Tutoriel ns-2 de polly Huang Le manuel de ns-2
www.lkn.ei.tum.de/lehre/scn/ns2/ns-berkeley.ppt http://www-sop.inria.fr/planete/personnel/Chadi.Barakat/NSCourse.pdf http://www.welzl.at/research/tools/ns/welzl-ns-tutorial-2.pdf

Cours de Eitan Altman et Tania Jimerez

http://www.isi.edu/nsnam/ns/doc/everything.html http://www-sop.inria.fr/mistral/personnel/Eitan.Altman/ns.htm

Un peu d'histoire

ns a commenc comme une variant de REAL network simulator en 1989. En 1995, le dveloppement de ns a t support par DARPA travers le projet VINT la LBNL (Lawrence Berkeley National Laboratory). La premire version de ns a t exprimentale ns version 2 (ns-2) a remplac la premire version de ns.

ns version 1 n'est plus maintenu. ns-2 est aujourd'hui le standard de facto pour les simulations des protocoles Internet.

Cependant, la 3me version de ns est actuellement disponible (ns-3)

La version 3 de ns cherche a remplacer ns-2. ns-3 n'est pas compatible avec ns-2.

Introduction ns-2

ns-2 :

Est un projet open-source. Est un simulateur vnements discrets. Peut tre install sur Windows et Linux. Est crit en C++ avec avec un interprteur Otcl comme front-end.

Plusieurs extensions de ns-2 sont actuellement disponibles.

Des nouveaux protocoles de transport et de contrle de congestion. Des nouveaux mdia de transmissions. Des nouvelles architectures QoS.

ns-2 est disponible l'adresse

http://www.isi.edu/nsnam/ns/

La structure du simulateur ns-2

Les principales classes de ns-2 sont :

Node : L'ensemble des nuds du rseau (hosts, routeurs, switches) sont construits partir de cette classe. Chaque nud contient galement un classificateur qui distribue les paquets entrants l'agent ou lien de sorti correcte. Queue : La classe mre de tous les protocoles d'administration de file d'attente. LinkDelay : Cette classe permet la simulation du dlai de propagaison d'un lien. TimerHandler : La classe mre de tous les temporisateurs utiliss par le simulateur.

La structure du simulateur ns-2

Packet : Cette classe maintient un pointeur vers l'en-tte du paquet et un autre vers les donnes (payload). Application : La classe mre de toutes les applications tel que ftp, telnet, http. Agent : La classe mre de tous les protocoles de couche 4 (TCP, UDP, RIP, OSPF).

head_

enqT_ queue_ deqT_ drophead_ drpT_

link_

ttl_

n1 entry_

La structure du simulateur ns-2

n0

n1

Port Classifier Addr Classifier entry_

Application/FTP dst_=1.0 Agent/TCP agents_

Port Classifier Addr Classifier

dst_=0.0 Agent/TCPSink agents_

0
dmux_

0
dmux_

0 1

Link n0-n1 entry_

1 0

classifier_

classifier_

Link n1-n0

Les objets de ns-2

En ns-2 chaque objet (sauf les applications) maintient un pointeur vers l'objet prochain qui recevra le paquet aprs d'tre trait. An objet obtient un paquet en faisant appel la mthode recv. L'argument reu par la mthode recv est le pointeur du paquet. Donc, pour faire une simulation avec ns-2 nous devrons :

Crer un ensemble d'objets. Interconnecter les objets. Signaler les vnements et les excuter.

Le scheduler de ns-2

Au dbut de la simulation, l'exprimentateur prcise un certain nombre d'vnements Pendant la simulation, les objets prcisent des autres vnements drivs des vnements lists par l'exprimentateur Tous les vnements sont stock dans une mme liste. La simulation finit lorsque l'vnement exit est rencontr.

L'interface OTcl

OTcl est un langage orient objet offrant les mmes fonctionnalits que C++ Les scnario de simulation et toutes les actions effectuer sont crits en OTcl Un interprteur OTcl (TclCL) traduit les instruction OTcl en des instructions C++ Lorsque le simulateur est excut, une hirarchie des classes similaires celle au niveau C++ est cr au niveau OTcl.

Quelques outils fournit avec ns-2

Nam : an outil pour montrer graphiquement le droulement de la simulation Xgraph : Permet de tracer les rsultats de la simulation sous forme de courbes. Gt-itm : Un gnrateur de graphe qui facilite la creation des grands rseaux Sgb2ns : outil pour convertir les graphes crs par gt-itm en des instructions OTcl.

Faire de simulations avec ns-2

Pour crire des scripts de simulation sur ns-2, il faut connaitre :

OTcl

pas compliqu

Un peu l'architecture du simulateur au niveau C++

Conseill Trs conseill

Les mthodes et attributs des objets OTcl

Quelques instructions de base en OTcl

Assigner une valeur une variable :


set a 10

Lire le contenu d'une variable :


set b $a

Ouvrir un fichier :
set f [open File w]

Imprimer le contenu d'une variable dans un fichier :


puts $f "$b"

Operations arithmetiques
set a [expr $b * 10]

Quelques Instructions de base en OTcl

Structures de contrle :

Condition :

If {$a == $b} { ... }

Boucle for :

for { set i 0 } { $i <= 10 } { incr i } { ... }

Dfinir une fonction :


proc myfunction {arg1 arg2 ...} { global a b ... return [expr $value] } set c [myfunction $param1 $param2 ...]

Quelques instructions de base en OTcl

Crer un objet d'une classe :


set myobj [new Class1]

Appeler une mthode d'un objet sans retour :


$myobj method param1 param2 ...

Et avec retour :
set a [$myobj method param1 param2 ..]

Assigner une valeur un attribut d'un objet :


$myobj set attrib $var

Lire le contenu d'un attribut d'un objet :


set a [$myobj set attrib]

Cration d'un scnario de simulation

Il faut d'abord crer une instance de la classe OTcl Simulator :


set ns [new Simulator]

Cration des nuds :


set n_(0) [$ns node] set n_(1) [$ns node]

Les liens entre les nuds :


$ns duplex-link $n_(0) $n_(1) Bandwidth Delay Qtype

La file d'attente (buffer) l'entre du lien :


$ns queue-limit $n_(0) $n_(1) limit-in-pkts

Cration d'un scnario de simulation

Cration des agents des protocoles de transport et attachement aux nuds :


set $ns set $ns udp1 [new Agent/UDP] attach-agent $n_(0) $udp1 nul1 [new Agent/Null] attach-agent $n_(1) $nul1

Cration d'un trafique CBR et attachement l'agent UDP:


set cbr1 [new Application/Traffic/CBR] $cbr1 attach-agent $udp1

Cration d'un scnario de simulation

Paramtrage du trafic CBR


$cbr1 set packetSize_ size-in-bytes $cbr1 set rate_ rate

Connections des agents :


$ns connect $udp1 $nul1

Lancer le scheduler et excuter la simulation :


$ns $ns $ns $ns at 1.0 at 9.0 at 10.0 run "$cbr1 start" "$cbr1 stop" "exit 0"

Cration d'un scnario de simulation

On peut aussi changer les conditions du rseau la vole


$ns at 3.0 "$ns bandwidth $n_(0) $n_(1) 10Mb duplex" $ns at 6.0 "$ns bandwidth $n_(0) $n_(1) 5Mb duplex"

Ajouter un PLR :
set $em $em $ns em [new ErrorModel] set rate_ 0.01 drop-target [new Agent/Null] lossmodel $em $n_(0) $n_(1)

Quelques paramtres de quelques objets

UDP
set udp [new Agent/UDP] $udp set packetSize_ sz_in_bytes

CBR
set $e $e $e e [new Application/Traffic/CBR] set packetSize_ 48 set rate_ 64Kb set random_ 1

Quelques paramtres de quelques objets

TCP
set tcp [new Agent/TCP (TCP/Reno) (TCP/Newreno) ... ] set sink [new Agent/TCPSink (TCPSink/DelAck)] $tcp set window_ in_pkts $tcp set ssthresh_ in_pkts $tcp set packetSize in_bytes

Quelques paramtres de quelques objets

RED
Queue/RED Queue/RED Queue/RED Queue/RED set set set set thresh_ maxthresh_ q_weight_ linterm_ Min Max weighting parameter InverseOfMaxProb

Les valeurs par dfaut des tous les objets (classes) se trouvent dans le fichier :
{ns-home}/tcl/lib/ns-default.tcl

Les traces ns-2

Si l'utilisateur dsire tracer les vnements produits pendant la simulation, les objets Trace du simulateur sont ncessaires. Ces objets s'associent aux objets du simulateur pour dtecter chaque vnement et l'crire vers un fichier. La classe Simulator dispose d'une methode trace-all qui associe des objets Trace tous les buffers et liens du rseau.
set f [open File w] $ns trace-all $f

Les traces ns-2

Format du fichier de trace


<evt> <time> <from> <to> <flags> <fid_> <src.port> <dest.port> <seqnum> <pkt_id> * evt = + (enque), - (deque), r (reception), d (drop)

Le fichier de trace peut tre trait avec awk, perl, etc. pour obtenir certains information statistiques :

Nombre de paquets jets dans un certain interval du temps. Dbit de la connexion vu par le rcepteur ou l'metteur.

Les traces ns-2

On peut tracer aussi la fentre de congestion au cours d'une simulation. Exemple :


set win [open tcp-cwnd.tr w] proc monitor-cwnd {tcp file} {
global ns set interval 1 set now [$ns now] puts $file "$now [$tcp set cwnd_]" $ns at [expr $now+$interval] "monitor-cwnd $tcp $file"

} $ns at 1.0 "monitor-cwnd $tcp $win"


Les traces ns-2

La classe Simulator peut galement associer un objet Trace un seul buffer (e.g. Entre n(0) et n(1)).
$ns trace-queue $n(0) $n(1) $f

Les moniteurs des buffers permettent d'avoir n'importe quel moment de la simulation des informations sur les buffers l'entre des liens su rseau.
set monitor [$ns monitor-queue $n(0) $n(1) stdout] puts [$monitor set parrivals_] puts [$monitor set bdrops_] ...

Programmer dans ns-2

2 mthodes existent pour l'extension du simulateur :

Travailler au niveau du code C++


Un peu complexe Cependant, plus facile accs aux attributs et mthodes de classes. Plus facile que codifier au niveau C++ Cependant, accs limits aux attributs et mthodes des classes C++. Bon connaissance du langage OTcl est requit.

Travailler au niveau du code OTcl


Visualisation avec nam

Nam prsente graphiquement votre topologie et les paquets circulant sur le rseau. Mise en place de nam

Gnration du fichier de trace


set nf [open out.nam w] $ns namtrace-all $nf

Exemple d'un script de simulation (pris du manuel de ns-2)


# 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

Exemple d'un script de simulation (pris du manuel de ns-2)


set set set set n0 n1 n2 n3 [$ns [$ns [$ns [$ns node] node] node] 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 agent; $cbr0 attach-agent $udp0 # attached to the UDP agent; $udp0 set class_ 0 # actually, the default, but\ldots; set null0 [new Agent/Null] $ns attach-agent $n3 $null0 $ns connect $udp0 $null0 $ns at 1.0 "$cbr0 start" # Its sink; # on node $n3;

Exemple d'un script de simulation (pris du manuel de ns-2)


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"

Exemple d'un script de simulation (pris du manuel de ns-2)


# 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

Vous aimerez peut-être aussi