Vous êtes sur la page 1sur 16

 

 
 

 
 
 
 
 
 
 
 
 

TRAVAUX PRATIQUES : NS‐2 
SIMULATION DE RESEAUX 
 
 

 
 
 
 
 
BENJAMIN GHIS 
MATTHIEU CHARPENTIER 
 
T2 ‐ TELECOM, S4, MARS 2008, ENSEIRB 
 
 
 

Professeur : N. MBAREK 
 
ghis@enseirb.fr | charpenm@enseirb.fr
Sommaire des figures 
Figure 1 : Réseau à simuler................................................................................................................. 3 
Figure 2 : Trafic CBR entre N0 et N1 ................................................................................................... 4 
Figure 3 : Lien Full‐duplex entre les nœuds N1 et N2......................................................................... 5 
Figure 4 : Utilisation de NAM ............................................................................................................. 5 
Figure 5 : Figure à simuler .................................................................................................................. 6 
Figure 6 : Traffic CBR et TCP ............................................................................................................... 8 
Figure 7 : Perte de paquet lors de l’émission de paquets .................................................................. 8 
Figure 8 : Trafic TCP avec accusé de réception................................................................................... 9 
Figure 9 : Réseau à simuler................................................................................................................. 9 
Figure 10 : perte de trafic entre les nœuds N2, N4 et N7 ................................................................ 11 
Figure 11 : Redirection du flux.......................................................................................................... 11 
Figure 12 : Flux normal du trafic....................................................................................................... 12 
Figure 13 : Rupture du lien entre les nœuds N4 et N7 ..................................................................... 12 
Figure 14 : Reprise du cours normal du trafic................................................................................... 13 
Figure 15 : Réseau à simuler............................................................................................................. 13 
Figure 16 : Temps d’enregistrement de 0.1 seconde ....................................................................... 15 
Figure 17 : Temps d’enregistrement de 0.5 seconde ....................................................................... 15 
Figure 18 : Temps d’enregistrement de 1 seconde .......................................................................... 16 

TP NS‐2  Page 2 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
But du TP :  

Se  familiariser  avec  le  simulateur  de  réseaux  NS‐2  en  découvrant  les  fonctionnalités 
qu’offre ce dernier à travers l’étude et l’élaboration de scripts qui font appel à des outils comme 
« nam » qui visualise la simulation ou encore « xgraph » qui permet de représenter les traces de la 
simulation sous forme de courbes.  

I. Exercice 1 : 
I.1. Enoncé : 
Dans cet exercice on se propose de simuler le réseau suivant :  

 
Figure 1 : Réseau à simuler 

I.2. Réalisation 
#creation d'un instance de l'objet simulator 
set ns [new Simulator] 
 
#ouvrir le fichier trace pour nam 
set nf [open out.nam w] 
$ns namtrace‐all $nf 
 
#definir la procedure de terminaison de la simulation 
proc finish {} { 
  global ns nf 
  $ns flush‐trace 
     #fermer le fichier trace 
  close $nf 
     #executer le nam avec en entree le fichier trace 
  exec nam out.nam & 
  exit 0 

 
#creation des neouds n0 et n1 
set n0 [$ns node] 
set n1 [$ns node] 
 
#link des noeuds 

TP NS‐2  Page 3 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
$ns duplex‐link $n0 $n1 1Mb 10ms DropTail 
 
#creation des agents 
set transp0 [new Agent/UDP] 
$ns attach‐agent $n0 $transp0 
 
#source de traffic 
set cbr [new Application/Traffic/CBR] 
$cbr set packetSize_ 500 
$cbr set interval_ 0.005 
 
#connection de CBR avec UDP 
$cbr attach‐agent $transp0 
 
#creation de l'agent NULL 
set transp1 [new Agent/Null] 
$ns attach‐agent $n1 $transp1 
 
#connexion NULL et UDP 
$ns connect $transp0 $transp1 
 
#debut de simulation 
$ns at 1 "$cbr start" 
 
#fin de simulation 
$ns at 4.5 "$cbr stop"  
 
#appeler la procedure de terminaison apres un temps t 
$ns at 5.0 "finish" 
 
#executer la simulation 
$ns run 

I.3. Observation 
A 1 seconde, le trafic CBR apparait entre le nœud N0 et N1. 

 
Figure 2 : Trafic CBR entre N0 et N1 

On  observe  un  trafic  sans  perte  entre  les  deux  nœuds.  La  simulation  se  termine 
normalement après 5 secondes. 

TP NS‐2  Page 4 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
I.4. Explication 
On utilise un lien duplex de capacité 1Mb et on fait transiter des paquets de 500 octets. 

 
Figure 3 : Lien Full‐duplex entre les nœuds N1 et N2 

Il n’y a donc pas de problème de congestion dans le réseau simulé. L’utilisation de l’outil 
« nam » est assez intuitive, le logiciel se lance par la commande « ns » : 

 
Figure 4 : Utilisation de NAM 

Pour  construire  le  scénario  sans  utiliser  de  script,  il  a  fallu  utiliser  les  outils  offerts  par 
« nam » : Construction de nœuds, de liens, d’agents … Les paramètres sont entrés à l’aide d’un clic 
droit  directement  sur  les  objets.  A  noter,  que  ce  logiciel  est  assez  bugée  malgré  que  son 
maniement soit assez intuitif. 

TP NS‐2  Page 5 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
II. Exercice 2 : 
II.1. Enoncé : 
Dans cet exercice on se propose de simuler le réseau suivant :  

 
Figure 5 : Figure à simuler 

II.2. Réalisation 
#creation d'un instance de l'objet simulator 
set ns [new Simulator] 
 
#ouvrir le fichier trace pour nam 
set nf [open out.nam w] 
$ns namtrace‐all $nf 
 
#definir la procedure de terminaison de la simulation 
proc finish {} { 
  global ns nf 
  $ns flush‐trace 
     #fermer le fichier trace 
  close $nf 
     #executer le nam avec en entree le fichier trace 
  exec nam out.nam & 
  exit 0 

 
#creation des noeuds n0 a n3 
set NodeNb 3 
set i 0 
for {set i 0} {$i <= $NodeNb} {set i [expr $i+1]} {set n($i) [$ns node]} 
 
#link des noeuds 
$ns duplex‐link $n(0) $n(2) 2Mb 10ms DropTail 
$ns duplex‐link $n(1) $n(2) 2Mb 10ms DropTail 
$ns duplex‐link $n(2) $n(3) 1.7Mb 20ms DropTail 
 
#creation des agents 
set transp0 [new Agent/TCP] 
$ns attach‐agent $n(0) $transp0 
 
set transp1 [new Agent/UDP] 
$ns attach‐agent $n(1) $transp1 
 
set transp31 [new Agent/TCPSink] 
$ns attach‐agent $n(3) $transp31 
 

TP NS‐2  Page 6 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
set transp32 [new Agent/Null] 
$ns attach‐agent $n(3) $transp32 
 
#source de traffic 
set cbr [new Application/Traffic/CBR] 
$cbr set packetSize_ 1000 
$cbr set rate_ 1Mb 
 
set ftp [new Application/FTP] 
 
#connection de CBR avec UDP 
$cbr attach‐agent $transp1 
 
#connection de FTP avec TCP 
$ftp attach‐agent $transp0 
 
#connexion NULL et UDP 
$ns connect $transp32 $transp1 
 
#connexion TCP et Sink 
$ns connect $transp0 $transp31 
 
#taille de buffer entre n2 et n3 
$ns queue‐limit $n(2) $n(3) 10 
 
#Positionnement des noeuds 
$ns duplex‐link‐op $n(0) $n(2) orient right‐down  
$ns duplex‐link‐op $n(2) $n(1) orient left‐down  
$ns duplex‐link‐op $n(2) $n(3) orient right 
 
#Coloration des flux 
$ns color 1 Blue 
$transp1 set class_ 1 
 
$ns color 2 Red 
$transp0 set class_ 2 
 
#debut de simulation 
$ns at 0.1 "$cbr start" 
 
#fin de simulation 
$ns at 4.5 "$cbr stop"  
 
#debut de simulation 
$ns at 1 "$ftp start" 
 
#fin de simulation 
$ns at 4.0 "$ftp stop"  
 
#appeler la procedure de terminaison apres un temps t 
$ns at 5.0 "finish" 
 
#executer la simulation 
$ns run 

TP NS‐2  Page 7 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
II.3. Observation 
A 0.1 seconde, le trafic CBR apparait entre le nœud N1 et le nœud N3. Puis au bout de 1s, 
c’est le trafic du ftp qui apparait.  

 
Figure 6 : Traffic CBR et TCP 

Cependant, on remarque une perte de paquets à un instant donné quand les deux trafics 
ont lieu simultanément. 

 
Figure 7 : Perte de paquet lors de l’émission de paquets 

Puis  le  trafic  reprend  normalement  avant  de  s’interrompre  définitivement  au  bout  de  4 
secondes puis de 4.5 secondes. 

TP NS‐2  Page 8 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
II.4. Explication 
On utilise un trafic de type TCP Sink entre les nœuds N0 et N3. Il y a donc régulièrement 
des accusés de réception.  

 
Figure 8 : Trafic TCP avec accusé de réception 

Dans  le  protocole  TCP,  une  fenêtre  d’émission  est  utilisée.  Quand  les  paquets  sont  reçus 
correctement, la taille de cette fenêtre est multipliée par deux. Lorsqu’un acquittement n’est pas 
réceptionné, la taille de la fenêtre revient à celle de départ : l’algorithme‘’ Slow Start ‘’ est utilisé 
ici. On observe bien ce phénomène dans notre exercice. A un instant donné, il n’y a plus réception 
des paquets à cause d’un problème de congestion. Les paquets alors sur le réseau sont perdus et 
on revient alors à une fenêtre d’émission moins importante.  

III. Exercice 3 : 
III.1. Enoncé : 
Dans cet exercice on se propose de créer le réseau suivant : 
 

 
Figure 9 : Réseau à simuler 

TP NS‐2  Page 9 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
 
 

III.2. Réalisation :  
set ns [new Simulator] 
set nf [ open out.nam w] 
$ns namtrace‐all $nf  
 
proc finish {} { 
global ns nf 
$ns flush‐trace 
close $nf 
exec nam out.nam & 
exit 0 

 
set n0 [$ns node] 
set n1 [$ns node] 
set n2 [$ns node] 
set n3 [$ns node] 
set n4 [$ns node] 
set n5 [$ns node] 
set n6 [$ns node] 
set n7 [$ns node] 
 
$ns duplex‐link $n0 $n2  10Mb 10ms DropTail 
$ns duplex‐link $n1 $n2  10Mb 10ms DropTail 
$ns duplex‐link $n2 $n4  10Mb 10ms DropTail 
$ns duplex‐link $n2 $n3  10Mb 10ms DropTail 
$ns duplex‐link $n3 $n5  10Mb 10ms DropTail 
$ns duplex‐link $n5 $n6  10Mb 10ms DropTail 
$ns duplex‐link $n6 $n7  10Mb 10ms DropTail 
$ns duplex‐link $n7 $n4  10Mb 10ms DropTail 
 
set transp0  [new Agent/UDP] 
$ns attach‐agent $n0 $transp0 
set cbr0 [new Application/Traffic/CBR] 
$cbr0 set packetSize_ 500 
$cbr0 set  interval_ 0.005 
$cbr0 attach‐agent $transp0 
 
set transp1  [new Agent/UDP] 
$ns attach‐agent $n1 $transp1 
set cbr1 [new Application/Traffic/CBR] 
$cbr1 set packetSize_ 500 
$cbr1 set  interval_ 0.005 
$cbr1 attach‐agent $transp1 
 
set transpnul  [new Agent/Null] 
$ns attach‐agent $n7 $transpnul 
 
$ns connect $transp1 $transpnul 
$ns connect $transp0 $transpnul 
 
$ns color 0 Blue 
$ns color 1 Red 
$transp0 set class_ 0 
$transp1 set class_ 1 
 
$ns rtproto DV  
 
$ns rtmodel‐at 4.0 down $n4 $n7 
$ns rtmodel‐at 5.0 up $n4 $n7 
 
$ns at 1 "$cbr0 start" 
$ns at 7 "$cbr0 stop" 
$ns at 2 "$cbr1 start" 
$ns at 6 "$cbr1 stop" 

TP NS‐2  Page 10 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
$ns at 8 "finish" 
 
$ns run 

III.3. Observation : 
Au départ apparait le trafic entre le nœud N0 et N7 à 1s, puis le trafic entre les nœuds N1 
et N7apparait. Le trafic des paquets passe au départ entre le nœud N4. Cependant, on remarque 
une perte de paquets lors de la rupture du lien entre les nœuds N4 et N7. 

 
Figure 10 : perte de trafic entre les nœuds N2, N4 et N7 

Le flux des paquets va alors passer par les nœuds N3, N5, N6 et N7. 

 
Figure 11 : Redirection du flux 

On retrouvera ensuite un flux passant par le nœud N4 lors du rétablissement du lien entre 
les nœuds N4 et N7. 

TP NS‐2  Page 11 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
III.4. Explication  
Le  routage  utilisé  dans  cet  exercice  est  un  routage  dynamique.  Il  y  a  donc  diffusion 
périodique  sur  le  réseau  des  informations  de  routage.  Les  équipements  échangent  leurs 
informations de routage et les tables de routage sont constamment misent à jour. Au départ, le 
trafic passe par le nœud N4 car c’est le plus court chemin pour arriver à destination du nœud N7.  

   
Figure 12 : Flux normal du trafic 

Lors  de  la  rupture  du  lien  entre  les  nœuds  N4  et  N7,  l’information  sur  la  rupture  est 
transmise à tous les nœuds et donc il y a changement de chemin du trafic. 

 
Figure 13 : Rupture du lien entre les nœuds N4 et N7 

Seuls les paquets qui se trouvaient déjà entre les nœuds N2, N4 et N7 seront perdus. Enfin 
au rétablissement  du lien, l’information est de nouveau transmise est le trafic reprend son court 
normal par le nœud N4. 

TP NS‐2  Page 12 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
 
Figure 14 : Reprise du cours normal du trafic 

IV. Exercice 4 : 
IV.1. Enoncé : 
Dans cet exercice on se propose de créer le réseau suivant : 

 
Figure 15 : Réseau à simuler 

IV.2. Réalisation 
set ns [new Simulator] 
 
set f0 [open out0.tr w] 
set f1 [open out1.tr w] 
set f2 [open out2.tr w] 
 
 
set nf [open out.nam w] 
$ns namtrace‐all $nf 
 
set n0 [$ns node] 
set n1 [$ns node] 
set n2 [$ns node] 
set n3 [$ns node] 
set n4 [$ns node] 

TP NS‐2  Page 13 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
 
$ns duplex‐link $n0 $n3 1Mb 100ms DropTail 
$ns duplex‐link $n1 $n3 1Mb 100ms DropTail 
$ns duplex‐link $n2 $n3 1Mb 100ms DropTail 
$ns duplex‐link $n3 $n4 1Mb 100ms DropTail 
 
 
proc finish {} { 
global f0 f1 f2 nf ns 
 
$ns flush‐trace 
 
close $nf 
close $f0 
close $f1 
close $f2 
 
exec nam out.nam & 
exit 0 

 
 
 
proc attach‐expoo‐traffic { node sink size burst idle rate } { 
set ns [Simulator instance] 
 
set source [new Agent/UDP] 
$ns attach‐agent $node $source 
 
set traffic [new Application/Traffic/Exponential] 
$traffic set packetSize_ $size 
$traffic set burst_time_ $burst 
$traffic set idle_time_ $idle 
$traffic set rate_ $rate 
 
$traffic attach‐agent $source 
$ns connect $source $sink 
return $traffic 
 

 
proc record {} { 
global sink0 sink1 sink2 f0 f1 f2 
set ns [Simulator instance] 
set time 0.5 
set bw0 [$sink0 set bytes_] 
set bw1 [$sink1 set bytes_] 
set bw2 [$sink2 set bytes_] 
set now [$ns now] 
puts $f0 "$now [expr $bw0/$time*8/1000000]" 
puts $f1 "$now [expr $bw1/$time*8/1000000]" 
puts $f2 "$now [expr $bw2/$time*8/1000000]" 
$sink0 set bytes_ 0 
$sink1 set bytes_ 0 
$sink2 set bytes_ 0 
$ns at [expr $now+$time] "record" 

 
set sink0 [new Agent/LossMonitor] 
set sink1 [new Agent/LossMonitor] 
set sink2 [new Agent/LossMonitor] 
$ns attach‐agent $n4 $sink0 
$ns attach‐agent $n4 $sink1 
$ns attach‐agent $n4 $sink2 
 
$ns color 0 Blue 
$sink0 set class_ 0 
 
$ns color 1 Red 
$sink1 set class_ 1 
 

TP NS‐2  Page 14 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
$ns color 2 Green 
$sink2 set class_ 2 
 
set source0 [attach‐expoo‐traffic $n0 $sink0 200 2s 1s 100k] 
set source1 [attach‐expoo‐traffic $n1 $sink1 200 2s 1s 200k] 
set source2 [attach‐expoo‐traffic $n2 $sink2 200 2s 1s 300k] 
 
$ns at 0.0 "record" 
 
$ns at 10.0 "$source0 start" 
$ns at 10.0 "$source1 start" 
$ns at 10.0 "$source2 start" 
$ns at 50.0 "$source0 stop" 
$ns at 50.0 "$source1 stop" 
$ns at 50.0 "$source2 stop" 
$ns at 60.0 "finish" 
 
$ns run 
 

IV.3. Observation  
Un  trafic  apparait  au  bout  de  10s  entre  les  nœuds  N0,  N1,  N2  et  N4.  A  l’aide  du  logiciel 
« xgraph », on remarque des retours à zéro plus fréquent quand on a un temps d’enregistrement 
de 0.1s par rapport à des temps d’enregistrement de 1s. De plus le tracé du graphe est plus précis 
pour des faibles temps d’enregistrement. 

 
Figure 16 : Temps d’enregistrement de 0.1 seconde 

 
Figure 17 : Temps d’enregistrement de 0.5 seconde 

TP NS‐2  Page 15 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

 
 
Figure 18 : Temps d’enregistrement de 1 seconde 

IV.4. Explication du code 
Trois fonctions sont définies : « finish », « attach‐expoo‐traffic » et « record ». La première 
fonction sert à terminer le programme. La deuxième sert à créer des agents UDP sur les nœuds 
N0, N1 et N2 et de les paramétrer avec : packetSize_ la taille des paquets, burst_time_ le temps 
moyen d’envoi des paquets, idel_time_ le temps moyen durant lequel aucun paquet n’est envoyé, 
et rate pour le débit. Elle sert également à connecter les agents UDP et les agents LossMonitor. 
Enfin    la  dernière  fonction  «record«  sert  à  paramétrer  l’enregistrement  du  trafic  entre  les 
différents nœuds : « set time » est l’intervalle de temps entre chaque prise de mesure sur le trafic, 
[expr  $now+$time]  « record »  permet  de  rappeler  la  fonction  record  sur  l’intervalle  de  temps 
suivant et ainsi de suite. 
 La fin du programme correspond à un « main » du langage C en permettant d’appeler les 
fonctions précédemment mentionnées et de débuter la simulation. A noter qu’un agent de type 
« LossMonitor » est une sorte de moniteur paramétrable qui permet de mesurer le trafic. 
 

IV.5. Explication de l’observation 
Quand nous utilisons un intervalle de temps d’1 seconde, nous avons beaucoup moins de 
retour à zéro que dans le cas d’0.1 seconde. L’intervalle de temps entre chaque prise de mesure 
est très long et il peut y avoir eut une reprise de trafic sur le réseau entre temps, on ne voit alors 
pas le retour à zéro. Au contraire sur un intervalle d’0.1 seconde, on a le temps d’apercevoir les 
remises à zéros.  
La variable ‘’time’’ joue en fait sur la précision de la mesure. Celle‐ci sera plus précise pour 
une valeur de 0.1s qu’une valeur d’1s.  Pourtant avoir une précision très importante n’est pas très 
utile  car  elle  plus  longue  à  obtenir.  On  peut  donc  décider  de  prendre  le  juste  milieu  avec  une 
valeur de 0.5s par exemple. A noter que le temps de « burst » étant supérieur au temps d’idle, on 
obtient des intervalles de temps d’envoi de paquets plus important que des intervalles de silence 
sur le réseau. 
 

TP NS‐2  Page 16 / 16  Matthieu CHARPENTIER 


ENSEIRB ‐ Mars 2008  Benjamin GHIS 
 

Vous aimerez peut-être aussi