Professional Documents
Culture Documents
NS-2 est un logiciel de simulation de rseaux informatique dvelopp lors d'un projet de la DARPA. 1.1 Le langage de script TCL Le langage TCL est un langage de script puissant qui permet dutiliser ventuellement une approche de programmation orient objet. Il est facilement extensible par un certain nombre de modules. Dans notre cas, il est indispensable dutiliser le langage TCL pour pouvoir travailler avec les objets fournis par NS-2. II. Installer NsNs-2 La version de NS-2 la plus jour actuellement est la version 2.34 disponible en http://www.isi.edu/nsnsam/ns/ mais pour plus de confort pour l'utilisateur il est conseill d'installer la version all-in-one. La version all-in-one regroupe tous les utilitaires et les plugin ncessaire la compilation et au fonctionnement de NS. IIIIII- Premiers pas avec NS2 3.1. Commenter et excuter le script tcl suivant : # Ecrire une procdure appele "test" proc test {} { set a 43
set b 27 set c [expr $a + $b] set d [expr [expr $a - $b] * $c] for {set k 0} {$k < 10} {incr k} { if {$k < 5} { puts "k < 5, pow = [expr pow($d, $k)]" } else { puts "k >= 5, mod = [expr $d % $k]" } } } # Appeler la procdure "test" cre ci-dessus test Pour excuter ce programme taper 3.2. Premire simulation NsNs-2 A- Utilisation du protocole UDP Cet exemple est une simple simulation dun rseau minimal constitu de deux stations communiquant lune avec lautre via une liaison spcialise. : tcl <file-name>.tcl ou ns <file-name>
Dans la terminologie NS, ce que nous appelons machine sappelle un noeud. Un noeud peut contenir des agents qui reprsentent des comportements, par exemple des applications. Une bibliothque assez complte de composants existe de faon standard. Une proprit intressante de ce systme est son extensibilit. En effet, il est assez facile dtendre la bibliothque des comportements, des types de liens, ou de tout autre lment du systme en programmant ses propres extensions qui deviennent alors intgres au systme. Pour traiter ce premier cas, nous allons donc crire un programme
simple. En voici le contenu. Les commentaires (introduits par le caractre #) expliquent le rle de chaque instruction ou partie de programme. # cration d'un simulateur set ns [new Simulator] # cration du fichier de trace utilis par lafficheur et indication ns de l'utiliser set nf [open out.nam w] $ns namtrace-all $nf # lorsque la simulation sera termine, cette procdure est appele pour lancer automatiquement lafficheur proc finish {} { global ns nf $ns flush-trace close $nf exec nam out.nam & exit 0 } # cration de deux noeuds set n0 [$ns node] set n1 [$ns node] # cration d'une ligne de communication full duplex entre les noeuds n0 et n1 $ns duplex-link $n0 $n1 1Mb 10ms DropTail # cration d'un agent UDP implant dans n0 set udp0 [new Agent/UDP] $ns attach-agent $n0 $udp0 # cration d'un trafic CBR pour le nud 0 gnrateur de paquets vitesse constante paquets de 500 octets, gnrs toutes les 5 ms. Ce trafic est attach au udp0 set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500 $cbr0 set interval_ 0.005
# cration d'un agent vide, destin recevoir les paquets implant dans n1 set null0 [new Agent/Null] $ns attach-agent $n1 $null0 # le trafic issus de l'agent udp0 est envoy vers null0 $ns connect $udp0 $null0 # scnario de dbut et de fin de gnration des paquets par cbr0 $ns at 0.5 "$cbr0 start" $ns at 4.5 "$cbr0 stop" # la simulation va durer 5 secondes de temps simul $ns at 5.0 "finish" # dbut de la simulation $ns run Lors de cette simulation, les rsultats sont consigns dans un fichier de trace que loutil de visualisation nam va permettre de traiter. Dans notre programme, loutil de visualisation est appel directement la fin de la simulation. Deux lments intressants sont proposs la visualisation : un dessin de la topologie du rseau tudi, et une visualisation dynamique du droulement du programme dans le temps. B- Utilisation du protocole TCP Afin de vous familiariser avec ce langage, nous avons dtaill le script correspondant au fichier fenetre.tcl. L'excution de NS prsente une interface o vous pouvez taper une suite de commandes interprtes. Vous devez taper source fenetre.tcl pour simuler le rseau dcrit par le script fenetre.tcl. # Les instructions suivies du caractre # sont des commentaires # Initialisation du simulateur set ns [new Simulator] # Cration de fichiers de traces set ftrace [open fout.tr w] set nf [open out.nam w]
# traces animes $ns namtrace-all $nf # Procdure fermant les fichiers de traces proc finish {} { global ns ftrace nf $ns flush-trace close $nf close $ftrace exit 0 } # Procdure permettant d'obtenir la taille de la fentre de congestion # toutes les 0.01s proc tracefenetre {} { global tcp0 ftrace set ns [Simulator instance] set time 0.01 set now [$ns now] puts $ftrace "$now [$tcp0 set cwnd_]" $ns at [expr $now+$time] "tracefenetre" } # Initialisation de certains paramtres TCP # Taille des paquets TCP, en octets Agent/TCP set packetSize_ 1500 # Taille maximale de la fentre de congestion, en paquets Agent/TCP set maxcwnd_ 30 Agent/TCPSink/DelAck set interval_ 0.00001 # Cration du noeud n0 et de ses caractristiques # les connexions TCP tant unidirectionnelles, il y a une source et un puits par connexion # Cration du noeud n0 set n0 [$ns node] # Cration de la couche TCP (agent TCP), ct source set tcp0 [new Agent/TCP] # Attachement de la couche TCP au noeud $ns attach-agent $n0 $tcp0 # Cration de la couche applicative FTP
set ftp [new Application/FTP] # Attachement de la couche applicative la couche TCP $ftp attach-agent $tcp0 # Cration du noeud n1 set n1 [$ns node] # Cration de la couche TCP, ct puits set tcp1 [new Agent/TCPSink/DelAck] # Attachement de la couche TCP au noeud $ns attach-agent $n1 $tcp1 # Cration du lien point point bidirectionnel entre les deux noeuds # Le dbit du lien est de 10Mb/s et le dlai de propagation est de 10ms $ns duplex-link $n0 $n1 10Mb 10ms DropTail # Cration de la connexion entre les deux couches TCP $ns connect $tcp0 $tcp1 # Dpart de la source FTP la date 0.0 s $ns at 0.0 "$ftp start"" # Arrt de la source FTP la date 0.7 s $ns at 0.7 "$ftp stop" # Excution de la procdure tracefenetre $ns at 0.0 "tracefenetre" # Excution de la procdure finish la date 0.8 s $ns at 0.8 "finish" # Excution de la simulation $ns run Dcrire la topologie simule par le script fenetre.tcl ci-dessus. Interprter les rsultats de simulations
Le noeud n0 gnre un traffic UDP de type CBR vers le noeud n3. Un paquet de taille 500 octets est envoy vers le noeud n3 chaque 0,005s. Le noeud n1 gnre un traffic UDP de type CBR vers le noeud n3. Un paquet de taille 500 octets est envoy vers le noeud n3 chaque 0,005s. Pour sparer les flux au niveau de nam, on peut rajouter le code suivant. $udp0 set class_ 1 $udp1 set class_ 2 $ns color 1 Blue $ns color 2 Red
Changer la mthode de gestion des files d'attente . Vous remarquez quoi? Changer le code pour avoir des pertes uniquement au niveau des sources.
3.4. Exercice Afin d'tudier le comportement du partage des ressources de TCP, nous allons simuler le rseau reprsent dans la figure ci-aprs. Il est constitu de 4 stations (A, A', B et B') relis par un lien 10 Mb/s. Les dlais de propagation sparant les stations au lien sont ngligeables, par contre le dlai de propagation sur le lien est de 4 ms. Dans cette configuration, la ressource partage est le lien principal.
1) la date t = 0 s, une connexion TCP est ouverte entre A et B pour transporter un flux FTP continu. Ensuite, une connexion TCP est ouverte entre A' et B' pour transporter un flux FTP qui stoppera avant la fin de simulation (la dure totale de simulation est de 10 s). Simulez ce rseau en sinspirant du fichier fenetre.tcl que vous devrez modifier. 2) Visualisez le comportement de cette topologie avec le NAM 3) Quelles sont les modifications introduire ce dernier script si on compte utiliser un agent UDP