Tutoriel NS3 Eugen Dedu M2 RIM Université de Franche-Comté, Montbéliard, France octobre 2009 (ns 3.6) [Grands remerciements à Wassim Ramadan]
2 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 :
3 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 protocoles etc.
4 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
5 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++ : n1n2.Get (2) au lieu de n1n2.Get (1) => Command exited with code -11
6 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.)
7 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é
8 Exécution des scénarios ● Script : C++ ou python, seul binding pour l'inst ● Si fichier C++ – le fichier test.cc doit se trouver dans scratch –./waf --run scratch/test (compile test.cc et ns3 si nécessaire + exécution) ●./waf pour compiler seulement ● Si fichier python – test.py se trouve n'importe où – chemin/waf --pyrun test.py --cwd `pwd` ● test.py se trouve dans le répertoire courant ● crée les fichiers de sortie dans le répertoire courant ● waf connaît les répertoires bibliothèque etc...
9 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 entre eux etc.)
10 Composants de base Application Nœud Device Application Nœud Device Canal TopologyHelper
11 Applications disponibles ● FIXME echoServer/Client - équivalent de CBR (mais le serveur répond)
12 Exemple expliqué ● Explications de first.cc ● Exécution et affichage – deux messages reçus ? ● Modification du nombre de paquets
13 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; ● Classe.methode 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)
14 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 ● pas d'outil de visualisation pour l'instant
15 Visualiser avec nam du ns2 ● #include "fstream" ● std::ofstream file; ● file.open ("links.info"); ● Pour chaque liaison pointToPoint.install (n0n1) – file GetId() GetId() << " -S UP -r " << << " - D " << 0.01 << " -c black" << std::endl; ● file.close (); ● tr2nam.awk -v fileName=out.tr out.nam
16 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