Introduction à ns-3
Transcription
Introduction à ns-3
Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Introduction à ns-3 Sébastien Bindel 10 décembre 2013 Sébastien Bindel Introduction à ns-3 1 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Plan 1 Introduction à la simulation 2 Présentation de ns-3 3 Les scripts sous ns-3 4 Conclusion Sébastien Bindel Introduction à ns-3 2 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Sébastien Bindel Contexte Les outils Les apports de la simulation Introduction à ns-3 3 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Contexte Les outils Les apports de la simulation 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Sébastien Bindel Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Introduction à ns-3 7 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Présentation générale NS acronyme pour Network Simulator Simulation à évènements discrets 3eme 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 A propos de ns-2 et 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Outils 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Modules présents dans ns-3 Sébastien Bindel Introduction à ns-3 12 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Sébastien Bindel Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Introduction à ns-3 14 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Les règles de base 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 La création de noeuds C++ NodeContainer nodes ; nodes . Create (2) ; nodes . Get (0) ; nodes . Get (1) ; // // // // creation creation acces au acces au d’une fabrique de noeuds de deux noeuds premier noeud deuxieme noeud Python nodes = ns . network . NodeContainer () nodes . Create (2) nodes . Get (0) nodes . Get (1) Sébastien Bindel # # # # creation creation acces au acces au d’une fabrique de noeuds de deux noeuds premier noeud deuxieme noeud Introduction à ns-3 16 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Définition et installation du média de communication C++ P o i n t To P oi n t He l pe r pointToPoint ; // definition du media PPP // definition de la bande passante et du delai pointToPoint . Se t De v ic e A tt r ib u t e ( " DataRate " , StringValue ( " 5 Mbps " ) ) ; pointToPoint . S e t C h a n n e l A t t r i b u t e ( " Delay " , StringValue ( " 2 ms " ) ) ; N e t D e vi c eC o n ta i ne r 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 . P oi n t To P oi n tH e l pe r () # definition de la bande passante et du delai pointToPoint . Se t De v ic e A tt r ib u t e ( " DataRate " , ns . core . StringValue ( " 5 Mbps " ) ) pointToPoint . S e t C h a n n e l A t t r i b u t e ( " Delay " , ns . core . StringValue ( " 2 ms " ) ) # creation et installation des interfaces reseau aux noeuds devices = pointToPoint . Install ( nodes ) Sébastien Bindel Introduction à ns-3 17 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Installation du protocole IP C++ I n t e r n e t S t a c k H e l p e r stack ; // declaration de la pile protocolaire IP stack . Install ( nodes ) ; // installation de la pile I p v 4 Add re ssH el per 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 I p v 4 I n t e r f a c e C o n t a i n e r interfaces = address . Assign ( devices ) ; Python stack = ns . internet . I n t e r n e t S t a c k H e l p e r () # creation de la pile IP stack . Install ( nodes ) # installation de la pile address = ns . internet . I pv 4Ad dr ess He lpe r () # 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Mise en place du serveur C++ // declaration du serveur (ouverture du port 9) U d p E c h o S e r v e r H e l p e r echoServer (9) ; // installation de l’application serveur sur le noeud 2 A p p l i c a t i o n C o n t a i n e r 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 . U d p Ec h o S e r v e r H e l p e r (9) # installation de l’application serveur sur le noeud 2 serverApps = echoServer . Install ( nodes . Get (1) ) serverApps . Start ( ns . core . Seconds (1.0) ) # demarrage du traffic a 1s serverApps . Stop ( ns . core . Seconds (10.0) ) # arret du traffic a 10s Sébastien Bindel Introduction à ns-3 19 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Installation du client C++ // declaration du client (adresse,numero de port) U d p E c h o C l i e n t H e l p e r 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 A p p l i c a t i o n C o n t a i n e r 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 . U d p Ec h o C l i e n t H e l p e r ( 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Premier script Copiez le fichier examples/tutorial/first.cc dans le dossier scratch Lancez la commande ./waf build Lancez la commande ./waf –run scratch/myfirst Résultat At time 2 s 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 PyViz 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) i m p o r t ns . core i m p o r t ns . visualizer [...] cmd = ns . core . CommandLine () cmd . Parse ( sys . argv ) [...] ns . core . Simulator . Run () Sébastien Bindel Introduction à ns-3 24 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Résultat de PyViz Pourquoi a t-on reçu 1054 octets ? Sébastien Bindel Introduction à ns-3 25 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Résultat de PyViz 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Netanim 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 (); A n i m a ti o nI n t er f ac e anim ( " animation . xml " ) ; Sébastien Bindel Introduction à ns-3 26 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Résultat de Netanim Sébastien Bindel Introduction à ns-3 27 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Trace ASCII 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++) A s c iiTrac eHelper ascii ; pointToPoint . EnableAsciiAll ( ascii . CreateFileStream ( " myfirst . tr " ) ) ; Ajoutez dans le script (Python) pointToPoint . EnableAsciiAll ( " ascii " ) Sébastien Bindel Introduction à ns-3 28 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Trace pcap 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 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 Rendu des traces pcap Sébastien Bindel Introduction à ns-3 31 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3 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 ( graphicsFileNam e ) ; // objet Gnuplot G n u plot2d Dataset dataset ; // donnees pour Gnuplot Sébastien Bindel Introduction à ns-3 32 / 33 Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion Conclusion 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 Présentation de ns-3 Les scripts sous ns-3 Conclusion Conclusion 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 Présentation de ns-3 Les scripts sous ns-3 Conclusion Conclusion 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