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, 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
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 e - - e n ab l e - e x a m p l e s - - e n ab l e - t e s t s
Compilation de ns-3
. / w af b u il d
Nettoyage de la compilation
. / w af c l 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
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 n t a in e r n o de s ; n o de s . C r e a te ( 2 ) ; n o de s . G e t ( 0 ) ; n o de s . G e t ( 1 ) ;
// // // //
creation creation acces au acces au
d’une fabrique de noeuds de deux noeuds premier noeud deuxieme noeud
Python n o de s = n s . n e t wo r k . N o d e C on t a i ne r ( ) 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
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 o P o i nt H e l p er p o i n tT o P o in t ;
// definition du media PPP
// definition de la bande passante et du delai
p o i n tT o P o in t . S e t D e v i c e At t r i b ut e ( "DataRate" , S t ri n gV a lu e ( "5Mbps" ) ) ; p o i n tT o P o in t . S e t C h a n n e lA t t r i bu t e ( "Delay" , S t ri n gV a lu e ( "2ms" ) ) ; N e t D ev i c e C on t a i n er d e v ic e s ; // creation d’un conteneur d’interfaces reseau // creation et installation des interfaces reseau aux noeuds
d e v ic e s = p o i n tT o P o in t . I n s t a ll ( n o d es ) ;
Python
# definition du media PPP
p o i n tT o P o in t = n s . p o i n t_ t o _ p oi n t . P o i n t T o P oi n t H e lp e r ( ) # definition de la bande passante et du delai
pointToPoint.SetDeviceAttribute( "DataRate" , n s . c o re . S t r i n g V al u e ( "5Mbps" ) ) pointToPoint.SetChannelAttribute( " D e l a y ", n s . c o re . S t r i n g V al u e ( " 2 m s ") ) # creation et installation des interfaces reseau aux noeuds
d e v ic e s = p o i n tT o P o in t . I n s t a 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++
I n t e rn e t S t ac k H e l pe r s t ac k ; // declaration de la pile protocolaire IP s t ac k . I n s t al l ( n o d es ) ; // installation de la pile I p v 4 Ad d r e s sH e l p er a d d re s s ; // construction d’un espace d’adressage // definition de l’espace d’adressage
a d d re s s . S e t B as e ( "10.1.1.0" , "255.255.255.0" ) ; // assignation des adresses
I p v 4 I nt e r f a ce C o n t ai n e r i n t er f a c es = a d d re s s . A s s ig n ( d e v i ce s ) ;
Python
s t ac k = n s . i n t er n e t . I n t e r n et S t a c kH e l p e r ( ) # c re at io n d e l a p ile I P stack.Install(nodes) # installation de la pile # definition a d d re s s = n s . i n t er n e t . I p v 4 A dd r e s s He l p e r ( ) address.SetBase(ns.network.Ipv4Address( "10.1.1.0" ) , # d’un espace ns.network.Ipv4Mask( "255.255.255.0" ) ) # d’adressage
i n t e rf a c e s = a d d re s s . A s s i gn ( d e v i c es ) ; # assignation des adresses
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 ch o S e r ve r H e l pe r e c h oS e r v er ( 9) ; // installation
de l’application serveur sur le noeud 2
A p p l i ca t i o n Co n t a i ne r s e r v er A p p s = e c h o Se r v e r . I n s ta l l ( n o d es . G e t ( 1 ) ) ; s e r v er A p p s . S t ar t ( S e c o n ds ( 1 . 0) ) ; // demarrage du traffic a 1s s e r v er A p p s . S t op ( S e c o nd s ( 1 0 .0 ) ) ; // arret du traffic a 10s
Python
# declaration du serveur (ouverture du port 9)
e c h o Se r v e r = n s . a p p l ic a t i on s . U d p E c h o S e rv e r H e lp e r ( 9 ) # installation
de l’application serveur sur le noeud 2
s e r v er A p p s = e c h o Se r v e r . I n s ta l l ( n o d es . G e t ( 1 ) ) serverApps.Start(ns.core.Seconds(1.0))
# demarrage du traffic a 1s
serverApps.Stop(ns.core.Seconds(10.0))
# a rre t d u t ra ff ic a 1 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++
// declaration du client (adresse,numero de port)
U d p E ch o C l i en t H e l pe r e c h oC l i e nt ( i n t e r fa c e s . G e t A d dr e s s ( 1 ) , 9 ) ; // MaxPackets : nombre max de paquets envoyes
e c h o Cl i e n t . S e t A tt r i b ut e ( "MaxPackets" , U i nt e ge r Va l ue ( 1) ) ; e c h o Cl i e n t . S e t A tt r i b ut e ( "Interval" , T i me V al u e ( S e co n ds ( 1. 0) ) ) ; e c h o Cl i e n t . S e t A tt r i b ut e ( "PacketSize" , U i n t eg e r V al u e ( 1 02 4 ) ) ; // installation de l’application cliente
A p p l i ca t i o n Co n t a i ne r c l i e nt A p p s = e c h o Cl i e n t . I n s ta l l ( n o d es . G e t ( 0 ) ) ; c l i e nt A p p s . S t ar t ( S e c o n ds ( 2 . 0) ) ; // demarrage du traffic a 2s x c l i en t A p ps . S t o p ( S e c o n ds ( 1 0. 0 ) ) ; // arret du traffic a 10s
Python
e c h o Cl i e n t = n s . a p p l ic a t i on s . U d p E c h o C l ie n t H e lp e r ( i n t e r f ac e s . G e t A d d re s s ( 1 ) ,9 ) echoClient.SetAttribute( "MaxPackets" , n s . c or e . U i n t e g er V a l ue ( 1 ) ) echoClient.SetAttribute( "Interval" , n s . c o re . T i m e V a l ue ( n s . c o r e . S e c on d s (1.0))) echoClient.SetAttribute( "PacketSize" , n s . c or e . U i n t e g er V a l ue ( 1 0 24 ) ) c l i e nt A p p s = e c h o Cl i e n t . I n s ta l l ( n o d 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 t o r : : R un ( ) ; S i m u la t o r : : D e s 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 f - - ru n s cr ip t
Script en Python
. / w af - - p yr u n s c 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 build Lancez la commande ./waf –run scratch/myfirst
Résultat
At time 2 s cl ien t sent 1024 b yte s to 1 0. 1. 1. 2 port 9 A t t im e 2 .0 03 69 s s er ve r r ec ei ve d 1 02 4 b yt es f ro m 1 0 .1 . 1. 1 p or t 4 91 5 3 At t im e 2 .0 03 69 s s er ve r s en t 1 02 4 b yt es to 1 0. 1. 1. 1 p or t 4 9 15 3 A t t im e 2 .0 07 37 s c li en t r ec ei ve d 1 02 4 b yt es f ro m 1 0. 1. 1. 2 p 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 d L i ne c m d ; c m d . P ar s e ( a rg c , a r 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 e . C o m m a n 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
Pourquoi a t-on reçu 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
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
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 at i o n I nt e r f a ce a n 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 a c e H el p e r a s ci i ; p o i n tT o P o in t . E n a b l e A s ci i A l l ( a s c i i . C r e a te F i l e St 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 o P o in t . E n a b l e P c ap 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" // utilise pour Gnuplot
G n u pl o t p l ot ( g r a p h i c sF i l e Na m e ) ; // objet Gnuplot G n u p l ot 2 d D a ta s e t d a t as e t ; // donnees pour Gnuplot
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