Documente Academic
Documente Profesional
Documente Cultură
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
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.
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.
Des nouveaux protocoles de transport et de contrle de congestion. Des nouveaux mdia de transmissions. Des nouvelles architectures QoS.
http://www.isi.edu/nsnam/ns/
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.
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_
link_
ttl_
n1 entry_
n0
n1
0
dmux_
0
dmux_
0 1
1 0
classifier_
classifier_
Link n1-n0
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.
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.
OTcl
pas compliqu
Ouvrir un fichier :
set f [open File w]
Operations arithmetiques
set a [expr $b * 10]
Structures de contrle :
Condition :
Boucle for :
Et avec retour :
set a [$myobj method param1 param2 ..]
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)
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
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
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
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
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.
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_] ...
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.
Nam prsente graphiquement votre topologie et les paquets circulant sur le rseau. Mise en place de nam
$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;