Tutoriel NS3
Eugen Dedu
M2 RIM
Université de Franche-Comté, Montbéliard, France
octobre 2009 (ns 3.6)
[Grands remerciements à Wassim Ramadan]
Introduction
●
Simulateur discret des réseaux informatiques
– basé événement
●
Toutes les couches du réseau
●
Beaucoup de protocoles réseau et de types de
liens
●
(Modèles de mobilité)
●
Site Web + doc : [Link]
2
Comparaison avec ns2
●
ns3 :
– écrit en C++
– supporte wi-fi beaucoup mieux
– (plusieurs fois) plus rapide en exécution (tout est
déjà compilé)
– scripts (scénarios) en C++ ou python
– en plein développement, le futur de ns2
●
ns2 :
– écrit en C++ et OTcl
– scripts (scénarios) en tcl
– beaucoup plus ancien => beaucoup plus de 3
protocoles etc.
Features de ns3
●
Génère des fichiers pcap
●
Exécution utilisant le temps réel (horloge de
simulation = horloge de la machine)
●
Framework de statistiques
●
Utilisation de la pile réseau de la machine
possible (linux au moins)
– ns3 sur 2 machines, réseau réel
– 2 ns3 sur une machine, pile réseau de la machine
4
Quelques fonctionnalités
actuellement manquantes en ns3
●
tcp : tahoe seulement
●
dccp, tfrc n'existent pas
●
red n'existe pas
●
Pas de visualisateur graphique
●
Erreurs difficiles à discerner
– ex. en C++ : [Link] (2) au lieu de [Link] (1)
=> Command exited with code -11
5
Comparaison avec d'autres
simulateurs réseau
●
Gratuit (GPL)
●
Fournit beaucoup de protocoles
●
ns2 est le plus utilisé en recherche sur les
réseaux
●
ns2 : pas très précis dans des cas précis (wi-fi,
application, topologie réseau, temps de
traitement des paquets etc.)
6
Installation
●
Télécharger depuis son site Web et
décompresser
●
Exécuter ./waf
– waf est un outil de configuration et compilation, un
des nouveaux outils qui veulent remplacer
autotools&make
– waf est écrit en python, qui doit être déjà installé
7
Exécution des scénarios
●
Script : C++ ou python, seul binding pour l'inst
●
Si fichier C++
– le fichier [Link] doit se trouver dans scratch
– ./waf --run scratch/test (compile [Link] et ns3 si
nécessaire + exécution)
●
./waf pour compiler seulement
●
Si fichier python
– [Link] se trouve n'importe où
– chemin/waf --pyrun [Link] --cwd `pwd`
●
[Link] se trouve dans le répertoire courant
●
crée les fichiers de sortie dans le répertoire courant 8
●
waf connaît les répertoires bibliothèque etc...
Composants de base
●
Application (SE inclus) (classe Application en
C++)
– ex. : UdpEchoClientApplication,
UdpEchoServerApplication
●
Nœud = hôte/routeur (classe Node en C++)
●
Device = carte réseau (matériel + driver)
(classe NetDevice en C++)
●
Canal = médium de communication (lien par
ex.) (classe Channel en C++)
●
Helper de topologie = facilite la connexion entre
nœud, device et canal (adresse IP, connexion 9
entre eux etc.)
Composants de base
Application Application
Nœud Nœud
Device Device
Canal
TopologyHelper
10
Applications disponibles
●
FIXME echoServer/Client - équivalent de CBR
(mais le serveur répond)
11
Exemple expliqué
●
Explications de [Link]
●
Exécution et affichage
– deux messages reçus ?
●
Modification du nombre de paquets
12
Programmation en python par
rapport à C++
●
import ns3 au lieu des #define
●
Ordre des instructions parfois légèrement
différent, par ex. x = y() au lieu de y x;
●
[Link] au lieu de Classe::methode
●
En général :
– quelques fonctions ne sont pas disponibles
●
log, fichier de traces .tr (mais pcap si)
– pas de compilation (voir plus haut)
– installation multi-utilisateur possible (en C++ il faut
avoir des droits d'écriture en scratch et build) 13
Analyse des résultats : fichiers de
trace
●
Trace : informations sur les paquets échangés
sur le réseau
●
Types de fichiers :
– pcap
●
un fichier par interface réseau
●
visualisables avec wireshark etc.
– tr (spécifique à ns3)
●
un pour toute la simulation
●
fichier texte, à déchiffrer soi-même
– l'en-tête IP et l'en-tête UDP/TCP complets (sauf somme
contrôle), pas de données, l'id de l'émetteur MAC
14
●
pas d'outil de visualisation pour l'instant
Visualiser avec nam du ns2
●
#include "fstream"
●
std::ofstream file;
●
[Link] ("[Link]");
●
Pour chaque liaison [Link] (n0n1)
– file << "l -t * -s " << [Link](0)->GetId() << " -d
" << [Link](1)->GetId() << " -S UP -r " <<
1000000 << " -D " << 0.01 << " -c black" <<
std::endl;
●
[Link] ();
●
[Link] -v fileName=[Link] <[Link] >out.nam15
Divers
●
Routage (OSPF) obligatoire si dans le cas réel
il est nécessaire (en ns2 s'était automatique)
●
Les fichiers pcap commencent toujours à t=0,
c'est normal, car sur une interface on ne
connaît pas le temps global de simulation
16