Introduction à ns-3 Sébastien Bindel 10 décembre 2013 Sébastien Bindel Introduction à ns-3 1 / 33
Plan Introduction à la simulation 1 Introduction à la simulation 2 3 4 Sébastien Bindel Introduction à ns-3 2 / 33
Contexte Les outils Les apports de la simulation Sébastien Bindel Introduction à ns-3 3 / 33
Contexte Les outils Les apports de la simulation Contexte Les réseaux Réseau -> communication (du niveau physique au niveau applicatif) Evolution des communications Mise en place de nouvelles communications Besoins Tester (e.g. comportement) Analyser (e.g. performance) Problématique Coût Temps de mise en oeuvre Sébastien Bindel Introduction à ns-3 4 / 33
Contexte Les outils Les apports de la simulation Les outils Les outils mathématiques Les graphes Loi d Erlang Les outils de simulation ns omnet++ Implémentation réelle Sébastien Bindel Introduction à ns-3 5 / 33
Les apports de la simulation Contexte Les outils Les apports de la simulation Simuler le réseau Simuler l activité du réseau Outils de visualisation et d analyse Possibilité d être proche de la réalité Ne nécessite pas d investissements particulier Sébastien Bindel Introduction à ns-3 6 / 33
Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Sébastien Bindel Introduction à ns-3 7 / 33
Présentation générale Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 NS acronyme pour Network Simulator Simulation à évènements discrets 3 eme génération (annoncé le 2/7/2006) Existe en version stable (3.18) et développement Composé de modules Ecrit en C++ Scripts d utilisation en C++ ou Python Sébastien Bindel Introduction à ns-3 8 / 33
A propos de ns-2 et ns-3 Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Dates importantes début du projet ns-2 (6/11/1996) : fin du projet (4/11/2011) ns-3 annoncé le 2/07/2006 : première version 3.1 (06/2008) Programmation des scripts OTcl pour ns-2 C++ et Python pour ns-3 Apports plus nombreux dans ns-2 ns-3 n est pas rétro compatible avec ns-2 ns-3 est amélioré continuellement Amélioration du développement dans ns-3 Sébastien Bindel Introduction à ns-3 9 / 33
Outils Introduction à la simulation Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Outils de visualisation du scénario de simulation PyViz (visualisation en temps réel) NetAnim (visualisation basée sur un fichier traçant le scénario) Outils de traçages d information Fichier ASCII Fichier pcap (wireshark) Outils de traçage de traffic Fichier simple Fichier pour Gnuplot Sébastien Bindel Introduction à ns-3 10 / 33
Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Quelques possibilités de simulation dans ns-3 Simulation de protocoles TCP, UDP, IPv4, IPv6, OLSR, AODV... Simulation de médias Ethernet, WIFI, WiMAX... Définition de la topologie du réseau Statique ou dynamique (modèles de mobilité) Possibilité d émulation Execution d une implémentation d un protocole dans ns-3 Sébastien Bindel Introduction à ns-3 11 / 33
Modules présents dans ns-3 Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Sébastien Bindel Introduction à ns-3 12 / 33
Compiler ns-3 Introduction à la simulation Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Configuration du builder./ waf configure -- enable - examples -- enable - tests Compilation de ns-3./ waf build Nettoyage de la compilation./ waf clean Sébastien Bindel Introduction à ns-3 13 / 33
Sébastien Bindel Introduction à ns-3 14 / 33
Introduction à la simulation Scripts en C++ ou Python (Plus de OTcl) Les noeuds représentent les entités (e.g. PC) L application génère sa propore activité réseau (e.g. echo UDP) Le channel représente le cannal (e.g. WIFI, PPP, Ethernet) Le Net Device représente la carte physique et son driver Exemples disponible dans le dossier examples Sébastien Bindel Introduction à ns-3 15 / 33
La création de noeuds C++ NodeContainer nodes ; // creation d une fabrique de noeuds nodes. Create (2) ; // creation de deux noeuds nodes. Get (0) ; // acces au premier noeud nodes. Get (1) ; // acces au deuxieme noeud Python nodes = ns. network. NodeContainer () # creation d une fabrique de noeuds nodes. Create (2) # creation de deux noeuds nodes. Get (0) # acces au premier noeud nodes. Get (1) # acces au deuxieme noeud Sébastien Bindel Introduction à ns-3 16 / 33
Définition et installation du média de communication C++ PointToPointHelper pointtopoint ; // definition du media PPP // definition de la bande passante et du delai pointtopoint. SetDeviceAttribute (" DataRate ", StringValue ("5 Mbps ")); pointtopoint. SetChannelAttribute (" Delay ", StringValue ("2ms")); NetDeviceContainer devices ; // creation d un conteneur d interfaces reseau // creation et installation des interfaces reseau aux noeuds devices = pointtopoint. Install ( nodes ); Python # definition du media PPP pointtopoint = ns. point_to_point. PointToPointHelper () # definition de la bande passante et du delai pointtopoint. SetDeviceAttribute (" DataRate ", ns.core. StringValue ("5 Mbps ")) pointtopoint. SetChannelAttribute (" Delay ", ns.core. StringValue ("2ms")) # creation et installation des interfaces reseau aux noeuds devices = pointtopoint. Install ( nodes ) Sébastien Bindel Introduction à ns-3 17 / 33
Installation du protocole IP C++ InternetStackHelper stack ; // declaration de la pile protocolaire IP stack. Install ( nodes ); // installation de la pile Ipv4AddressHelper address ; // construction d un espace d adressage // definition de l espace d adressage address. SetBase (" 10.1.1.0 ", " 255.255.255.0 "); // assignation des adresses Ipv4InterfaceContainer interfaces = address. Assign ( devices ); Python stack = ns. internet. InternetStackHelper () # creation de la pile IP stack. Install ( nodes ) # installation de la pile address = ns. internet. Ipv4AddressHelper () # definition address. SetBase (ns. network. Ipv4Address (" 10.1.1.0 "), # d un espace ns. network. Ipv4Mask (" 255.255.255.0 ")) # d adressage interfaces = address. Assign ( devices ); # assignation des adresses Sébastien Bindel Introduction à ns-3 18 / 33
Mise en place du serveur C++ // declaration du serveur (ouverture du port 9) UdpEchoServerHelper echoserver (9) ; // installation de l application serveur sur le noeud 2 ApplicationContainer serverapps = echoserver. Install ( nodes.get (1) ); serverapps. Start ( Seconds (1.0) ); // demarrage du traffic a 1s serverapps.stop ( Seconds (10.0) ); // arret du traffic a 10s Python # declaration du serveur (ouverture du port 9) echoserver = ns. applications. UdpEchoServerHelper (9) # installation de l application serveur sur le noeud 2 serverapps = echoserver. Install ( nodes.get (1) ) serverapps. Start (ns.core. Seconds (1.0) ) serverapps.stop (ns.core. Seconds (10.0) ) # demarrage du traffic a 1s # arret du traffic a 10s Sébastien Bindel Introduction à ns-3 19 / 33
Installation du client Introduction à la simulation C++ // declaration du client (adresse,numero de port) UdpEchoClientHelper echoclient ( interfaces. GetAddress (1), 9); // MaxPackets : nombre max de paquets envoyes echoclient. SetAttribute (" MaxPackets ", UintegerValue (1) ); echoclient. SetAttribute (" Interval ", TimeValue ( Seconds (1.0) )); echoclient. SetAttribute (" PacketSize ", UintegerValue (1024) ); // installation de l application cliente ApplicationContainer clientapps = echoclient. Install ( nodes.get (0) ); clientapps. Start ( Seconds (2.0) ); // demarrage du traffic a 2s xclientapps.stop ( Seconds (10.0) ); // arret du traffic a 10s Python echoclient = ns. applications. UdpEchoClientHelper ( interfaces. GetAddress (1),9) echoclient. SetAttribute (" MaxPackets ", ns.core. UintegerValue (1) ) echoclient. SetAttribute (" Interval ", ns.core. TimeValue (ns.core. Seconds (1.0) )) echoclient. SetAttribute (" PacketSize ", ns.core. UintegerValue (1024) ) clientapps = echoclient. Install ( nodes.get (0) ) clientapps. Start (ns.core. Seconds (2.0) ) clientapps.stop (ns.core. Seconds (10.0) ) Sébastien Bindel Introduction à ns-3 20 / 33
Démarrage de simulation C++ Simulator :: Run (); Simulator :: Destroy (); Python ns.core. Simulator.Run () ns.core. Simulator. Destroy () Sébastien Bindel Introduction à ns-3 21 / 33
Execution d un script de simulation Script en C++./ waf -- run script Script en Python./ waf -- pyrun script. py Sébastien Bindel Introduction à ns-3 22 / 33
Premier script Introduction à la simulation Copiez le fichier examples/tutorial/first.cc dans le dossier scratch Résultat Lancez la commande./waf build Lancez la commande./waf run scratch/myfirst At time 2s client sent 1024 bytes to 10.1.1.2 port 9 At time 2.00369 s server received 1024 bytes from 10.1.1.1 port 49153 At time 2.00369 s server sent 1024 bytes to 10.1.1.1 port 49153 At time 2.00737 s client received 1024 bytes from 10.1.1.2 port 9 Sébastien Bindel Introduction à ns-3 23 / 33
PyViz Introduction à la simulation Permet de visualiser le scénario de simulation N utilise pas de fichiers traces Le script doit pouvoir parser les arguments donnés (argc,argv) Aucun ajout de code supplémentaire Ajoutez dans le script (C++) CommandLine cmd ; cmd. Parse (argc, argv ); Ajoutez dans le script (Python) import ns. core import ns. visualizer [...] cmd = ns.core. CommandLine () cmd. Parse (sys.argv ) [...] ns.core. Simulator.Run () Sébastien Bindel Introduction à ns-3 24 / 33
Résultat de PyViz Introduction à la simulation Pourquoi a t-on reçu 1054 octets? Sébastien Bindel Introduction à ns-3 25 / 33
Résultat de PyViz Introduction à la simulation Pourquoi a t-on reçu 1054 octets? Données (1024 o) + Header UDP (8 o) + Header IP (20 o) + Header PPP (2 o) = 1054 octets Sébastien Bindel Introduction à ns-3 25 / 33
Netanim Introduction à la simulation Permet de visualiser le scénario de simulation offline Utilise un fichier trace Fichier trace => xml Ajout de codes supplémentaires Non disponible sous les scripts Python Ajoutez dans le script (C++) #i n c l u d e "ns3 /netanim - module.h" // inclure le header... // generation du fichier animation.xml // a inclure juste avant Simulator::Run (); AnimationInterface anim (" animation.xml "); Sébastien Bindel Introduction à ns-3 26 / 33
Résultat de Netanim Introduction à la simulation Sébastien Bindel Introduction à ns-3 27 / 33
Trace ASCII Introduction à la simulation Permet de visualiser les informations véhiculées Similaire aux traces pcap S active sur le channel pour que les interfaces puissent capturer le trafic Ajoutez dans le script (C++) AsciiTraceHelper ascii ; pointtopoint. EnableAsciiAll ( ascii. CreateFileStream (" myfirst.tr")); Ajoutez dans le script (Python) pointtopoint. EnableAsciiAll (" ascii ") Sébastien Bindel Introduction à ns-3 28 / 33
Rendu partiel des traces ascii + 2 /NodeList/0/DeviceList/0/$ns3 : :PointToPointNetDevice/TxQueue/Enqueue ns3 : :PppHeader (Point-to-Point Protocol : IP (0x0021)) ns3 : :Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length : 1052 10.1.1.1 > 10.1.1.2) ns3 : :UdpHeader (length : 1032 49153 > 9) Payload (size=1024) - 2 /NodeList/0/DeviceList/0/$ns3 : :PointToPointNetDevice/TxQueue/Dequeue ns3 : :PppHeader (Point-to-Point Protocol : IP (0x0021)) ns3 : :Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length : 1052 10.1.1.1 > 10.1.1.2) ns3 : :UdpHeader (length : 1032 49153 > 9) Payload (size=1024) Sébastien Bindel Introduction à ns-3 29 / 33
Trace pcap Introduction à la simulation Permet de visualiser les informations véhiculées Utilisé par tcpdump ou wireshark S active sur le channel pour que les interfaces puissent capturer le trafic Documentation www.nsnam.org/doxygenrelease/classns3_1_1_pcap_helper_for_device.html Ajoutez dans le script (C++) pointtopoint. EnablePcapAll ("trace - files "); Ajoutez dans le script (Python) pointtopoint. EnablePcapAll ("trace - files ") Sébastien Bindel Introduction à ns-3 30 / 33
Rendu des traces pcap Sébastien Bindel Introduction à ns-3 31 / 33
Traçage de graphiques avec Gnuplot Permet de tracer des graphiques Utilisable de deux façons Création de fichier de contrôle : commandes Gnuplot Création de fichier de données : données à afficher Outil très utilisé Example (C++) #i n c l u d e "ns3 /stats - module.h" // utilise pour Gnuplot Gnuplot plot ( graphicsfilename ); // objet Gnuplot Gnuplot2dDataset dataset ; // donnees pour Gnuplot Sébastien Bindel Introduction à ns-3 32 / 33
Introduction à la simulation Les points abordés durant ce cours Les outils d étude des réseaux Le simulateur ns-3 et ses outils Comprendre l écriture d un script simple Sébastien Bindel Introduction à ns-3 33 / 33
Introduction à la simulation Les points abordés durant ce cours Les outils d étude des réseaux Le simulateur ns-3 et ses outils Comprendre l écriture d un script simple Les points importants Scripts ns-3 en C++ ou Python Savoir appeler les outils de ns Ecrire et comprendre un script simple Sébastien Bindel Introduction à ns-3 33 / 33
Introduction à la simulation Les points abordés durant ce cours Les outils d étude des réseaux Le simulateur ns-3 et ses outils Comprendre l écriture d un script simple Les points importants Scripts ns-3 en C++ ou Python Savoir appeler les outils de ns Ecrire et comprendre un script simple Les points restant à aborder en TD Ecriture de scripts plus complexes Voir certains protocoles et leurs mécanismes associés Sébastien Bindel Introduction à ns-3 33 / 33