Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion
Introduction à ns-3 Sébastien Bindel
10 décembre 2013
Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion
Plan
1
Introduction Introducti on à la simulat simulation ion
2
Présentation Présen tation de ns-3 ns-3
3
Les scrip scripts ts sous sous ns-3
4
Conclusion
Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion
Contexte Les outils Les apports de la simulation
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
Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion
Les outils
Les outils mathématiques Les graphes Loi d’Erlang
Les outils de simulation ns omnet++
Implémentation réelle
Contexte Les outils Les apports de la simulation
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
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
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 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
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
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
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, TCP, UDP, UDP, IPv4, IPv6, OLSR, OLSR, AODV ODV . . .
Simulation de médias Ethe Ethern rnet et,, WIFI, WIFI, WiMAX 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
Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion
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
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
. / w a f c o n f i g ur u r e - - e n ab ab l e - e x a m p l e s - - e n ab ab l e - t e s t s
Compilation de ns-3
. / w af a f b u il il d
Nettoyage de la compilation
. / w af a f c l ea ea n
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
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 dossier examples
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++ N o d e Co Co n t a in i n e r n o de de s ; n o de de s . C r e a te te ( 2 ) ; n o de de s . G e t ( 0 ) ; n o de de s . G e t ( 1 ) ;
// // // //
creatio creat ion n creati crea tion on acce ac ces s au acce ac ces s au
d’une fa d’une fabr briq ique ue de no noeu euds ds de deux de deux noe noeud uds s prem pr emie ier r no noeu eud d deux de uxie ieme me no noeu eud d
Python n o de de s = n s . n e t wo wo r k . N o d e C on o n t a i ne ne r ( ) nodes.Create(2) nodes.Get(0) nodes.Get(1)
# # # #
creati crea tion on crea cr eati tion on acce ac ces s au acce ac ces s au
d’une fa d’une fabr briq ique ue de no noeu euds ds de de deux ux no noeu euds ds prem pr emie ier r no noeu eud d deuxi deu xiem eme e no noeu eud d
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 tT tT o P o i nt nt H e l p er e r p o i n tT tT o P o in in t ;
// de defin finit itio ion n du media media PP PPP P
// de defi fini niti tion on de la ba band nde e pa pass ssan ante te et du de dela lai i
p o i n tT tT o P o in in t . S e t D e v i c e At A t t r i b ut u t e ( "DataRate" , S t ri ri n gV gV a lu l u e ( "5Mbps" ) ) ; p o i n tT tT o P o in in t . S e t C h a n n e lA l A t t r i bu b u t e ( "Delay" , S t ri r i n gV gV a lu lu e ( "2ms" ) ) ; N e t D ev ev i c e C on on t a i n er e r d e v ic ic e s ; // cre creati ation on d’un con contene teneur ur d’in d’inter terfac faces es res reseau eau // cr crea eati tion on et in insta stall llati ation on de des s int inter erfa face ces s re rese seau au au aux x no noeu euds ds
d e v ic ic e s = p o i n tT tT o P o in in t . I n s t a ll l l ( n o d es es ) ;
Python
# def defin init itio ion n du me medi dia a PP PPP P
p o i n tT tT o P o in i n t = n s . p o i n t_ t _ t o _ p oi oi n t . P o i n t T o P oi o i n t H e lp lp e r ( ) # de defi fini niti tion on de la ba band nde e pa pass ssan ante te et du de dela lai i
pointToPoint.SetDeviceAttribute( "DataRate" , n s . c o re re . S t r i n g V al a l u e ( "5Mbps" ) ) pointToPoint.SetChannelAttribute( " D e l a y ", " , n s . c o re re . S t r i n g V al a l u e ( " 2 m s ") ")) # cr crea eatio tion n et in inst stall allat atio ion n de des s in inte terfa rface ces s re rese seau au au aux x no noeu euds ds
d e v ic ic e s = p o i n tT tT o P o in in t . I n s t a ll ll ( n o d e s )
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++
decl clar arati ation on de la pi pile le pr proto otoco cola laire ire IP I n t e rn rn e t S t ac ac k H e l pe p e r s t ac ac k ; // de insta stall llati ation on de la pile pile s t ac ac k . I n s t al a l l ( n o d es e s ) ; // in constru structi ction on d’un esp espace ace d’ad d’adres ressag sage e I p v 4 Ad Ad d r e s sH sH e l p er er a d d re re s s ; // con // def defini inition tion de l’es l’espac pace e d’ad d’adres ressage sage
a d d re re s s . S e t B as a s e ( "10.1.1.0" , "255.255.255.0" ) ; // ass assign ignatio ation n des adre adresse sses s
I p v 4 I nt nt e r f a ce ce C o n t ai a i n e r i n t er er f a c es es = a d d re re s s . A s s ig i g n ( d e v i ce ce s ) ;
Python
s t ac ac k = n s . i n t er er n e t . I n t e r n et e t S t a c kH kH e l p e r ( ) # c re re at at io io n d e l a p il ile I P stack.Install(nodes) # in insta stall llat ation ion de la pi pile le # definit definition ion a d d re re s s = n s . i n t er er n e t . I p v 4 A dd d d r e s s He He l p e r ( ) address.SetBase(ns.network.Ipv4Address( "10.1.1.0" ) , # d’un d’un e esp spac ace e d’adres ressage sage ns.network.Ipv4Mask( "255.255.255.0" ) ) # d’ad
i n t e rf rf a c e s = a d d re re s s . A s s i gn gn ( d e v i c es es ) ; # ass assign ignatio ation n des adre adresse sses s
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++
// de decl clar arati ation on du se serv rveu eur r (ou (ouve vert rtur ure e du po port rt 9)
U d p E ch ch o S e r ve ve r H e l pe p e r e c h oS oS e r v er er ( 9) 9) ; // install installat atio ion n
de l’appl l’applica icati tion on se serv rveu eur r su sur r le noeud noeud 2
A p p l i ca ca t i o n Co Co n t a i ne n e r s e r v er er A p p s = e c h o Se Se r v e r . I n s ta ta l l ( n o d es es . G e t ( 1 ) ) ; dema marr rrag age e du tr traf affi fic c a 1s s e r v er er A p p s . S t ar a r t ( S e c o n ds ds ( 1 . 0) 0) ) ; // de
s e r v er er A p p s . S t op op ( S e c o nd n d s ( 1 0 .0 .0 ) ) ; // ar arre ret t du tr traf affi fic c a 10 10s s
Python
# dec decla lara ratio tion n du se serv rveu eur r (ou (ouve vertu rture re du po port rt 9)
e c h o Se Se r v e r = n s . a p p l ic i c a t i on on s . U d p E c h o S e rv r v e r H e lp lp e r ( 9 ) # in inst stal alla lati tion on
de l’ l’ap appl plic icat atio ion n se serv rveu eur r su sur r le no noeu eud d 2
s e r v er er A p p s = e c h o Se Se r v e r . I n s ta ta l l ( n o d es es . G e t ( 1 ) ) serverApps.Start(ns.core.Seconds(1.0))
# de dema marr rrag age e du traff traffic ic a 1s
serverApps.Stop(ns.core.Seconds(10.0))
# a rr rre t d u t ra ra ff ff ic ic a 1 0s 0s
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++
// de decl clar arati ation on du cl clie ient nt (a (adr dres esse,n se,num umer ero o de po port) rt)
U d p E ch ch o C l i en en t H e l pe p e r e c h oC oC l i e nt nt ( i n t e r fa fa c e s . G e t A d dr dr e s s ( 1 ) , 9 ) ; // Ma MaxP xPac acket kets s : no nomb mbre re ma max x de paq paque uets ts en envo voyes yes
e c h o Cl Cl i e n t . S e t A tt t t r i b ut u t e ( "MaxPackets" , U i nt nt e ge g e r Va Va l ue u e ( 1) 1) ) ; e c h o Cl Cl i e n t . S e t A tt t t r i b ut u t e ( "Interval" , T i me me V al al u e ( S e co c o n ds ds ( 1. 1 . 0) 0) ) ) ; e c h o Cl Cl i e n t . S e t A tt t t r i b ut u t e ( "PacketSize" , U i n t eg eg e r V al a l u e ( 1 02 02 4 ) ) ; // ins install tallati ation on de l’app l’applic licati ation on cli client ente e
A p p l i ca ca t i o n Co Co n t a i ne n e r c l i e nt nt A p p s = e c h o Cl Cl i e n t . I n s ta ta l l ( n o d es es . G e t ( 0 ) ) ; dema marr rrag age e du tr traf affi fic c a 2s c l i e nt nt A p p s . S t ar a r t ( S e c o n ds ds ( 2 . 0) 0) ) ; // de x c l i en en t A p ps ps . S t o p ( S e c o n ds ds ( 1 0. 0. 0 ) ) ; // ar arre ret t du tr traf affi fic c a 10 10s s
Python
e c h o Cl Cl i e n t = n s . a p p l ic i c a t i on on s . U d p E c h o C l ie i e n t H e lp lp e r ( i n t e r f ac a c e s . G e t A d d re re s s ( 1 ) ,9 ) echoClient.SetAttribute( "MaxPackets" , n s . c or or e . U i n t e g er e r V a l ue ue ( 1 ) ) echoClient.SetAttribute( "Interval" , n s . c o re re . T i m e V a l ue ue ( n s . c o r e . S e c on on d s (1.0))) echoClient.SetAttribute( "PacketSize" , n s . c or or e . U i n t e g er e r V a l ue u e ( 1 0 24 24 ) ) c l i e nt nt A p p s = e c h o Cl Cl i e n t . I n s ta ta l l ( n o d es es . G e t ( 0 ) ) clientApps.Start(ns.core.Seconds(2.0)) clientApps.Stop(ns.core.Seconds(10.0))
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++
S i m u la la t o r : : R un un ( ) ; S i m u la la t o r : : D e s tr tr o y ( ) ;
Python
ns.core.Simulator.Run() ns.core.Simulator.Destroy()
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++
. / wa w a f - - ru r u n s cr c r ip ip t
Script en Python
. / w af a f - - p yr y r u n s c ri ri p t . p y
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 commande ./waf build Lancez la commande ./waf commande ./waf –run scratch/myfirst
Résultat
A t t i m e 2 s c l ie i e n t s e n t 1 0 2 4 b yt y t e s t o 1 0. 0 . 1. 1 . 1. 1. 2 p o r t 9 A t t im i m e 2 .0 . 0 03 0 3 69 6 9 s s er e r ve v e r r ec e c ei e i ve v e d 1 02 0 2 4 b yt y t es e s f ro ro m 1 0 .1 . 1 . 1. 1 . 1 p or o r t 4 91 91 5 3 A t t im i m e 2 .0 . 0 03 0 3 69 6 9 s s er e r ve v e r s en e n t 1 02 0 2 4 b yt y t es e s t o 1 0. 0 . 1. 1 . 1. 1. 1 p or o r t 4 9 15 15 3 A t t im i m e 2 .0 . 0 07 0 7 37 3 7 s c li l i en e n t r ec e c ei e i ve v e d 1 02 0 2 4 b yt y t es e s f ro ro m 1 0. 0 . 1. 1 . 1. 1 . 2 p or or t 9
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 ++)
C o m m an an d L i ne ne c m d ; c m d . P ar a r s e ( a rg rg c , a r gv gv ) ;
Ajoutez dans le script (Python)
i m p o r t ns.core i m p o r t ns.visualizer
[...] c m d = n s . c or or e . C o m m a n dL dL i n e ( ) cmd.Parse(sys.argv) [...] ns.core.Simulator.Run()
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
Pourq ourquo uoii a t-on t-on reçu reçu 10 1054 54 octet octetss ?
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
Pourq ourquo uoii a t-on t-on reçu reçu 10 1054 54 octet octetss ? Données (1024 o) + Header UDP (8 o) + Header IP (20 o) + Header PPP (2 o) = 1054 octets
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" // in incl clur ure e le he head ader er
.. . // genera generation tion du fic fichie hier r animat animation.x ion.xml ml // a in incl clur ure e ju just ste e av avan ant t Si Simu mula lato tor:: r::Ru Run n () (); ;
A n i m at at i o n I nt nt e r f a ce c e a n im im ( "animation.xml" ) ;
Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion
Résultat de Netanim
Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3
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 i i Tr Tr a c e H el el p e r a s ci ci i ; p o i n tT tT o P o in in t . E n a b l e A s ci c i i A l l ( a s c i i . C r e a te t e F i l e St S t r e a m ( "myfirst.tr" ) ) ;
Ajoutez dans le script (Python)
pointToPoint.EnableAsciiAll( "ascii" )
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)
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 ++)
p o i n tT tT o P o in in t . E n a b l e P c ap a p A l l ( "trace-files" ) ;
Ajoutez dans le script (Python)
pointToPoint.EnablePcapAll( "trace-files" )
Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion
Rendu des traces pcap
Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3
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" // ut util ilis ise e po pour ur Gn Gnup uplo lot t
objet et Gnuplo Gnuplot t G n u pl pl o t p l ot ot ( g r a p h i c sF s F i l e Na Na m e ) ; // obj G n u p l ot ot 2 d D a ta ta s e t d a t as as e t ; // do donn nnee ees s po pour ur Gn Gnup uplo lot t
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
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
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