Vous êtes sur la page 1sur 36

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Introduction à ns-3

Sébastien Bindel

10 décembre 2013

ns-3 Conclusion Introduction à ns-3 Sébastien Bindel 10 décembre 2013 Sébastien Bindel Introduction à ns-3 1

Plan

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

1 Introduction à la simulation

2 Présentation de ns-3

3 Les scripts sous ns-3

4 Conclusion

2 Présentation de ns-3 3 Les scripts sous ns-3 4 Conclusion Sébastien Bindel Introduction à ns-3

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Contexte Les outils Les apports de la simulation

sous ns-3 Conclusion Contexte Les outils Les apports de la simulation Sébastien Bindel Introduction à ns-3
sous ns-3 Conclusion Contexte Les outils Les apports de la simulation Sébastien Bindel Introduction à ns-3

Contexte

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Les réseaux

Contexte Les outils Les apports de la simulation

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

Analyser (e.g. performance) Problématique Coût Temps de mise en oeuvre Sébastien Bindel Introduction à ns-3 4

Les outils

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

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

réelle Contexte Les outils Les apports de la simulation Sébastien Bindel Introduction à ns-3 5 /

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

proche de la réalité Ne nécessite pas d’investissements particulier Sébastien Bindel Introduction à ns-3 6 /

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

de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Sébastien Bindel Introduction à ns-3 7
de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Sébastien Bindel Introduction à ns-3 7

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

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

de modules Ecrit en C ++ Scripts d’utilisation en C ++ ou Python Sébastien Bindel Introduction

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

A propos de ns-2 et ns-3

Dates importantes

Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3

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

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 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 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

Outils de traçage de traffic Fichier simple Fichier pour Gnuplot Sébastien Bindel Introduction à ns-3 10

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

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

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

de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3 Sébastien Bindel Introduction à ns-3 12

Compiler ns-3

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Configuration du builder

Présentation générale Outils Quelques possibilités de simulation dans ns-3 Modules présents dans ns-3 Compiler ns-3

 

 

./waf

configure

--enable -examples

--enable -tests

Compilation de ns-3

 
 

 

./waf

build

Nettoyage de la compilation

 
 

 

./waf

clean

    ✞ ☎   ./waf clean ✝ ✆ Sébastien Bindel Introduction à ns-3 13 /

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

base Etude d’un script de simulation pas à pas Etude des outils ns-3 Sébastien Bindel Introduction

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Les règles de base

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

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

physique et son driver Exemples disponible dans le dossier examples Sébastien Bindel Introduction à ns-3 15

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

La création de noeuds

C++

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

 

 

NodeContainer nodes . Create

nodes ;

//

creation

d’une

fabrique

de

noeuds

 

(2) ;

//

creation

de

deux

noeuds

 

nodes . Get nodes . Get

(0) ;

(1) ;

//

acces

au

premier

noeud

//

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) nodes . Get (1)

 

#

acces

au

premier

noeud

#

acces

au

deuxieme

noeud

noeud # acces au deuxieme noeud ✝ ✆ Sébastien Bindel 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++

 

 

PointToPointHelper

pointToPoint ;

//

definition

du

media

PPP

//

definition

de

la

bande

passante

et

du

delai

pointToPoint.SetDeviceAttribute

("DataRate",

StringValue

("5Mbps"));

 

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("5Mbps")) 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

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++

 

 

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

( devices ); # assignation des adresses ✝ ✆ Sébastien Bindel Introduction à ns-3 18 /

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Mise en place du serveur

C++

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

 

 

//

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) )

#

demarrage

du

 

traffic

a

1s

serverApps . Stop (ns. core . Seconds (10.0) )

#

arret

du

traffic

 

a

10s

(10.0) ) # arret du traffic   a 10s ✝ ✆ Sébastien Bindel Introduction à ns-3

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Installation du client

C++

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

✞ ☎ // declaration du client (adresse,numero de port) UdpEchoClientHelper echoClient (interfaces.GetAddress
//
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
xclientApps . Stop
( Seconds
(2.0) );
//
demarrage
du
traffic
a
2s
( 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))

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Démarrage de simulation

C++

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

 

 

Simulator::Run

();

Simulator::Destroy

();

Python

 
 

 

ns.core.Simulator.Run()

 

ns.core.Simulator.Destroy()

 

  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

✞ ☎   ./waf --pyrun script.py ✝ ✆ Sébastien Bindel Introduction à ns-3 22 / 33

Premier script

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

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

2s

client

sent

1024

bytes

to

10.1.1.2

port

9

At

time

2.00369s

server

received

1024

bytes

from

 

10.1.1.1

port

49153

 

At

time

2.00369s

server

sent

1024

bytes

to

10.1.1.1

 
 

port

49153

 
 

At

time

2.00737s

client

received

1024

bytes

from

 
 

10.1.1.2

port

9

bytes from     10.1.1.2 port 9 ✝ ✆ Sébastien Bindel Introduction à ns-3 23 /

PyViz

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

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

[

] = ns.core.CommandLine()

 

cmd

cmd.Parse(sys.argv)

 

[

]

ns.core.Simulator.Run()

 

  [ ] 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

Résultat de PyViz

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

script de simulation pas à pas Etude des outils ns-3 Pourquoi a t-on reçu 1054 octets

Pourquoi a t-on reçu 1054 octets ?

pas à pas Etude des outils ns-3 Pourquoi a t-on reçu 1054 octets ? Sébastien Bindel

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 Conclusion

Résultat de PyViz

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

script de simulation pas à pas Etude des outils ns-3 Pourquoi a t-on reçu 1054 octets

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

+ Header UDP (8 o) + Header IP (20 o) + Header PPP (2 o) =

Netanim

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

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");

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

Résultat de Netanim

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

Etude d’un script de simulation pas à pas Etude des outils ns-3 Sébastien Bindel Introduction à
Etude d’un script de simulation pas à pas Etude des outils ns-3 Sébastien Bindel Introduction à

Trace 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

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")

 

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 : :PointToPointNetDe- vice/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 : :PointToPointNetDe- vice/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)

ns3 : :UdpHeader (length : 1032 49153 > 9) Payload (size=1024) Sébastien Bindel Introduction à ns-3

Trace pcap

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

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/doxygen-

release/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")

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

Rendu des traces pcap

Les règles de base Etude d’un script de simulation pas à pas Etude des outils ns-3

Etude d’un script de simulation pas à pas Etude des outils ns-3 Sébastien Bindel Introduction à
Etude d’un script de simulation pas à pas Etude des outils ns-3 Sébastien Bindel Introduction à

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

( graphicsFileName ); // objet Gnuplot

Gnuplot2dDataset

dataset ;

//

donnees

pour

Gnuplot

dataset ; // donnees pour Gnuplot ✝ ✆ Sébastien Bindel Introduction à ns-3 32 / 33

Conclusion

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 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

ns-3 et ses outils Comprendre l’écriture d’un script simple Sébastien Bindel Introduction à ns-3 33 /

Conclusion

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 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

Savoir appeler les outils de ns Ecrire et comprendre un script simple Sébastien Bindel Introduction à

Conclusion

Introduction à la simulation Présentation de ns-3 Les scripts sous ns-3 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

plus complexes Voir certains protocoles et leurs mécanismes associés Sébastien Bindel Introduction à ns-3 33 /