Académique Documents
Professionnel Documents
Culture Documents
1) Avant propos
Les réseaux de télécommunications, et en particulier les réseaux informatiques connaissent
une expansion sans précédent.. Devant l'évolution des techniques et de la technologie, de
nombreuses solutions sont envisageable pour un même problème. La simulation permet ainsi
de tester sans aucun coût ces nouvelles technologies, les nouveaux protocoles mais aussi
d'anticiper les problèmes qui pourront se poser dans le futur.
2) NS et NAM
NS est un Network Simulator : il permet à l'utilisateur de définir un réseau et de simuler des
communications entre les noeuds de ce réseau. NS v2 utilise le language OTcl (Object Tools
Command Language) dérivé de TCL. A travers ce language, l'utilisateur décrit les conditions
de la simulation : la topologie du réseau, les caractéristiques des liens physique, les protocoles
utilisés, les communications qui ont lieu...
La simulation doit d'abord être saisie sous forme de fichier texte que NS va utiliser pour
produire un fichier trace contenant les résultats.
Ensuite, on utilise le programme NAM pour interpréter ces données et en donner un rendu
graphique. Voici un exemple de simulation que nous visionnons avec NAM :
Mais l'utilisation de l'OTcl permet aussi à l'utilisateur de créer ses propres procédures (par
exemple si il souhaite enregistrer dans un fichier l'évolution d'une variable caractéristique du
réseau au cours du temps).
Dans ce TP, vous devez effectuer un transfer FTP entre deux noeuds du réseau. Pour cela, il
va falloir au préalable, définir les noeuds du réseau, les liens entre chaque noeud, définir des
agents TCP adéquats pour les deux noeuds qui vont communiqués et enfin définir la couche
applicative FTP de ces deux noeuds. Pour pouvoir faire ce TP, téléchargez (par SHIFT +
Click) le fichier tp1.tcl
Definissez cinq autres noeuds dans le fichier TP1.tcl que vous appelerez n1, n2, n3, n4, n5.
Une fois les Noeuds définis, on peut déclarer les liens. Nous voulons obtenir la topologie
suivante :
Définissez les autres liaisons pour pour avoir la topologie souhaitée. Toutes les autres liaisons
ont les même caracteristiques que la liaison definie ci-dessus.
Le fichier tp1.nam sera généré par ns. Pour l'ouvrir avec NAM, tapez :
nam tp1.nam
Le but de ce TP est d'observer le principe du routage dynamique : nous allons simuler un transfert
FTP entre deux noeuds du réseau et rendre momentanément inutilisable le lien utiliser par le
transfert. Ainsi, les tables de routages vont être recalculées grâce à des échanges de paquets de
signalisation entre les noeuds. D'autre part, ce calcul des tables de routages aura aussi lieu au début
de la simulation.
Pour faire ce TP, téléchargez le fichier tp2.tcl par (Shift + Click) et travaillez dessus.
1. Le réseau
2. La déclaration du routage dynamique
3. Disfonctionnement d'un lien
4. Résultats
1. Le réseau
Nous allons donc visualiser le routage dynamique sur la topologie suivante :
Comme dans le Tp1, definissez correctement les noeuds et les liens (on gardera le même type
de lien), les agents TCP et l'application FTP. Le transfert FTP a lieu entre le noeud n°0 et le
n°5 :
$ns rtproto DV
Il n'y a rien d'autre a ajouter ! Cela revient à assigner la valeur DV à la variable "rtproto" du
simulateur.
Ensuite, il reste à faire "tomber" le lien entre le noeud n°1 et le n°2 à l'instant t=1,0s et à le
rétablir à t=1,2s. La syntaxe est la suivante :
4. Résultats
Lancer alors la simulation et observez le résultat... (tp2.nam)
TP3 : Multicast
L'objectif de ce TP est de se familiariser avec le multicast, tel qu'il est implémenté dans NS. Nous
allons voir les quelques protocoles directement utilisables, et dont le résultat est rapidement
visualisable sous NAM. Après ce TP, vous aurez une bonne vue d'ensemble des différentes
possibilités de Multicast qu'offre NS.
1. La topologie du réseau
2. Premier contact avec pimDM
3. Les fonctions join-groupe et leave-groupe
4. Un protocle plus probant : DM
5. L'algorithme de routage par arbre recouvrant
6. Multicast avec routage dynamique
1. La topologie du réseau
Pour ce TP, nous allons utiliser le même réseau pour chaque question. Voici la topologie du réseau :
Vous créerez donc cette topologie, soit à la main, soit avec l'utilitaire convertisseur. Nous ne nous
interessons pas au temps de propagation, ni au débit, vous pourrez prendre les mêmes pour chaque
lien.
Dès que vous utilisez des adresses de diffusion, il faut mettre une variable booléenne à 1 pour
avertir NS. Il a aussi besoin de la variable NumberInterfaces à 1. Tout fichier contiendra donc
les lignes suivantes (que l'on peut mettre après la déclaration de l'objet Simulator) :
Ensuite, il faudra déclarer quel protocole nous allons utiliser. Pour cela, il faut utiliser la
méthode mrtproto de l'objet Simulator. La méthode mrtproto nécessite deux arguments : le
nom du protocole, la liste des noeuds concernés par ce protocole (par défaut tous les noeuds
déjà déclarés). Pour cette question, nous utiliserons le protocole pimDM. Nous allons donc
ajouter la ligne suivante :
Pour toutes les questions, nous définirons un flux CBR (Constant Bit Rate) partant de la
machine 0. Il faut donc créer un agent CBR que l'on attachera au noeud n0. L'agent capable de
"récupérer" les flux CBR (comme l'agent TCPSink pour un flux TCP) est LossMonitor.
Pour cette question, nous allons générer un flux CBR depuis le noeud n0 vers une adresse de
diffusion. Les adresses de diffusion doivent être comprises entre 0x8000 et 0xFFFF, sinon NS
ne comprendra pas. Pour indiquer que le destinataire du flux CBR est une adresse de
diffusion, nous mettons dans la variable dest_ de l'agent CBR le numéro de la liste de
diffusion.
Vous ferez commencer ce flux à l'instant 0.5. Vous étudierez le résultat sous NAM et
trouverez une explication.
Remarque : vous pourrez utiliser une couleur particulière pour le flux CBR (ce qui permettra
de comprendre mieux le mécanisme).
L'agent agent est ajouté à la liste de diffusion group, et l'agent est attaché au noeud
node.
La même syntaxe est utilisé pour leave-group.
Vous ferez commencer le flux CBR partant du noeud 0 à l'instant 0.5, vous ajouterez le noeud
4 à la liste de diffusion (l'agent à attacher est ici l'agent qui peut récupérer le flux CBR) à
l'instant 0.6, le noeud 3 à l'instant 0.7, vous supprimerez le noeud 4 à l'instant 0.8 et le
remettrez à l'instant 0.9.
Vous étudierez une nouvelle fois le résultat sous NAM.
Fichier nam du TP :
tp3_3.nam correspond au fichier nam de la question 3 (qui permet aussi de visualiser les
questions précédentes)
tp3_5.nam correspond au fichier nam de la question 5
tp3_6.nam correspond au fichier nam de la question 6.
TP4 : modélisation d'un réseau plus
complexe
Nous allons, pour ce dernier TP, réaliser un réseau plus complexe et simuler trois flux FTP
qui vont devoir se partager la bande passante. Nous allons ensuite visualiser le résultat à l'aide
de graphes.
Vous devrez d'abord contruire la topologie suivante (vous pouvez utiliser le convertisseur)
(chaque lien aura la même capacité):
Cette topologie peut simuler différents LANs reliés entre eux par un "backbone". (Ce
backbone devrait permettre des débits plus élevés pour être réaliste, mais il faudrait alors
générer de nombreux flux pour obtenir quelque chose d'exploitable).
Pour simuler les congestions, nous utiliserons les files d'attente de chaque noeud. Pour cela,
vous mettrez deux lignes supplémentaires pour configurer ces iles d'attente que nous
choisissons toujours avec une politique de service FIFO.
Nous allons faire tomber des liens, donc nous allons utiliser le protocole DV pour le routage
dynamique.
Vous définirez quatre connexions FTP entre 6 et 9, puis entre 7 et 4 et enfin entre 8 et 5.
(Penser à appliquer trois couleurs différentes aux connexions)
Pour visualiser le trafic, nous pourrons utiliser les variables d'état de chaque connexion tcp
"ack_" qui donne le numéro le plus élevé des paquets acquittés. Pour construire les fichiers de
trace, nous définirons une fonction traceack :
proc traceack {} {
global tcp ackt
set ns [Simulator instance]
set time 0.01
set now [$ns now]
puts $ackt "$now [$tcp set ack_]"
$ns at [expr $now+$time] "traceack"
}
Ns va écrire dans le fichier défini par la variable ackt (fichier que nous avons préalablement
ouvert en écriture) toutes les 10 ms le temps plus le nombre de paquet acquitté par le flux
nommé tcp. Il faut la lancer manuellement la première fois par la ligne habituelle :
Vous améliorerez cette fonction pour faire la trace des trois flux FTP dans trois fichiers
différents.
Pour visualiser les traces, vous pourrez utiliser le logiciel GNUplot (par exemple).
Enfin, vous lancerez le premier FTP à l'instant 0.3, le deuxième à 0.5, le troisième à 1.0.
Vous ferez tomber le lien du noeud 0 au noeud 3 à l'instant 2.0 et remettrez en marche le lien
à l'instant 2.5.
Voici le fichier nam de la simulation, ainsi que les trois fichiers de trace : ackt1, ackt2 et ackt3
Utilisation du Convertisseur
Téléchargez ici convertisseur.c ou bien le programme convertisseur compilé pour Unix.
Le Convertisseur permet de créer une topologie utilisable pour NSet NAM de façon très
simple. Il prend en entrée un fichier texte contenant la matrice du réseau et renvoit un fichier
contenant l'ossature du fichier pour NS avec la procédure de fin, la déclaration des fichiers
traces etc...
1. Exemple d'utilisation
4
0 0 1 1 1 2 0 0
0 0 0 0 0 0 1 1
0 0 0 0 0 0 2 2
le premier nombre est le nombre de noeud du réseau, la matrice contient les liens du réseau.
Par exemple, ici, le noeud 0 a un lien vers le noeud 1 et le noeud 2, les noeuds 1 et 2 ont un
lien vers le noeud 3.
Code créé :
set ns [new Simulator]
set f [open out.tr w]
$ns trace-all $f
set nf [open out.nam w]
$ns namtrace-all $nf
proc finish {} {
global ns f nf
$ns flush-trace
close $f
close $nf
exit 0
}
$ns run
Et la topologie obtenue est :
Convertisseur prend deux arguments : le nom du fichier texte dans lequel se trouve la matrice
du réseau, et le nom du fichier dans lequel écrire le source pour ns.
2. Remarques
Le convertisseur ne fait que des liens duplex, il ne tient pas compte du triangle inférieur de la
matrice. (une version future pourra prendre en compte les liens simplex)
Attention, le fichier de sortie pour nam est par défaut out.nam, il faut penser à le renommer.
Le débit du lien peut être conservé en flottant, le temps de propagation est par contre
forcément conservé en entier.
# include <stdio.h>
# include <stdlib.h>