Calcule de Perte Et de Débit Ns2
Calcule de Perte Et de Débit Ns2
Calcule de Perte Et de Débit Ns2
(Network Simulator)
Hervé THALMENSY
[email protected]
Objectif : Se familiariser avec le simulateur ns. Dans un premier temps, être capable de
réaliser une simulation réseau filaire. Puis des simulations de réseau sans fils.
Présentation du simulateur : ns-2 est un simulateur réseau à évènements discrets orienté objet
développé dans le cadre du projet VINT de l’Université de Berkeley en Californie. Ce projet a
été fondé par DARPA en collaboration avec le XEROX Palo Alto Research Center (PARC) et
le Lawrence Berkeley National Laboratory (LBNL).
Pour les travaux pratiques, il ne sera pas nécessaire de programmer en C++ directement,
puisqu'on ne prévoit pas la création de nouveaux protocoles. Cependant une connaissance
moyenne de tcl pourrait être nécessaire.
Travail à réaliser :
I. Prise en main
Vous pouvez écrire vos scripts dans n’importe quel éditeur de texte (kedit, kwrite, vi où
emacs).
Nous allons définir un modèle à utiliser pour tous les premiers scripts Tcl: (à récupérer ici)
Maintenant il va falloir définir un fichier dans lequel les données (résultats) vont être
écrites. Ces données seront utilisées par nam pour afficher les résultats. On en
reparlera dans la suite.
set nf [open out.nam w]
$ns namtrace-all $nf
Après avoir enregistré, vous pouvez exécuter votre fichier en tapant : ns exemple.tcl
Question :
1. Que remarquez vous lorsque vous lancez la simulation ?
II. Premiers scripts
Les liens sont full duplex et ont un temps de propagation de 5ms. Entre n1 et n2 le débit est de
5Mbits/s et entre n2 et n3 de 1Mbit/s.
Utiliser les options de positionnement spatial de nam pour obtenir une représentation
identique à celle proposée.
Exemple : si on veut que le lien entre n0 et n1 soit horizontal de gauche à droite on écrira :
$ns duplex-link-op $n0 $n1 orient right
Pour cela, il faut introduire la notion d’agent. Un agent peut être considéré comme une entité
de la couche Transport (modèle OSI). Dans ns les données sont toujours échangées d’un agent
à un autre.
Pour créer un agent qui va absorber les paquets qui lui parviennent
set trounoir [new Agent/TCPSink]
Tout agent doit être attaché à un nœud. La connexion logicielle entre 2 agents peut alors être
établie.
$ns attach-agent $n0 $transport
$ns attach-agent $n1 $trounoir
$ns connect $transport $trounoir
Les paquets émis par l’agent transport peuvent être coloré en rouge (nous avons définit 1
comme étant la couleur rouge)
$transport set class_ 1
La classe Source permet de décrire le niveau applicatif, elle ne comporte que les applications
telnet et ftp.
set transfert [new Source/FTP]
$transfert set agent_ $transport
Ceci permet d’associer la couche transport et l’application ftp.
Remarques :
- de la même façon, il est possible de définir un [Agent/CBR] : agent CBR (constant bit rate)
qui permet de reproduire un trafic constant. Il est associé à un [Agent/Null]
- certains agents (Agent/CBR par exemple) n’ont pas besoin d’être commandés par une
application.
Questions :
1. Reprendre la topologie précédente et créer un flux FTP entre n1 et n3.
2. Modifier les paramètres des liens.
3. Que remarquez-vous ?
4. Ajouter un 2ème flux FTP grâce à un 4ème nœud
5. Comment se comportent les 2 flux FTP ?
Ici, la taille des paquets est de 500 octets et un paquet sera envoyé toutes les 0.005 secondes
(ce qui est équivalent à 200 paquets/s).
500 kbit/s
50 ms
S2 D2
On dispose d’une source de trafic CBR de débit équivalent au goulot d’étranglement c'est-à-
dire 500kbit/s. Les paquets émis ont une taille fixe de 1000 octets.
Questions
1. Reproduire cette expérience avec ns
2. Comment se comportent les 2 flux ?
3. Modifier les paramètres pour mettre en évidence le comportement lorsqu’ils doivent
se partager de la bande passante.
Pour tracer un flux UDP, utiliser un agent monitor: set sink [new Agent/LossMonitor]
proc record {} {
global sink0 f0
#On instancie le simulateur
set ns [Simulator instance]
#Instant courant
set now [$ns now]
Question
1. Reprendre l’exemple précédent de flux TCP et UDP concurrents et tracer les bandes
passantes du flux TCP et du flux UDP.
2. Tracer également les bandes passantes pour 2 flux TCP concurrents, et pour 2 flux
UDP concurrents.
Au début d’une simulation sans fil, il faut définir le type de chaque composant réseau. De plus
il faut définir d’autres paramètres tels que : le type d’antenne, le modèle de propagation radio,
le type de protocole de routage ad-hoc utilisé par les nœuds mobiles.
Nous commençons notre script simple-wireless.tcl avec les différents paramètres suivants:
# ======================================================================
# Define options
# ======================================================================
set val(chan) Channel/WirelessChannel ;# channel type
set val(prop) Propagation/TwoRayGround ;# radio-propagation model
set val(ant) Antenna/OmniAntenna ;# Antenna type
set val(ll) LL ;# Link layer type
set val(ifq) Queue/DropTail/PriQueue ;# Interface queue type
set val(ifqlen) 50 ;# max packet in ifq
set val(netif) Phy/WirelessPhy ;# network interface type
set val(mac) Mac/802_11 ;# MAC type
set val(rp) DSDV ;# ad-hoc routing protocol
set val(nn) 2 ;# number of mobilenodes
On crée ensuite une instance du simulateur,
Ensuite il faut créer un objet God (General Operations Director). Il s’agit d’un objet utilisé
pour stocker les informations globales à propos de l’environnement.
create-god $val(nn)
Ensuite il faut créer et configurer les noeuds. Il s’agira de définir le type d’adressage, le type
de protocole de routage ad-hoc, Link Layer, MAC layer, IfQ, etc. L’API est la suivante :
(parameter examples)
# $ns_ node-config -addressingType flat or hierarchical or expanded
# -adhocRouting DSDV or DSR or TORA
# -llType LL
# -macType Mac/802_11
# -propType "Propagation/TwoRayGround"
# -ifqType "Queue/DropTail/PriQueue"
# -ifqLen 50
# -phyType "Phy/WirelessPhy"
# -antType "Antenna/OmniAntenna"
# -channelType "Channel/WirelessChannel"
# -topoInstance $topo
# -energyModel "EnergyModel"
# -initialEnergy (in Joules)
# -rxPower (in W)
# -txPower (in W)
# -agentTrace ON or OFF
# -routerTrace ON or OFF
# -macTrace ON or OFF
# -movementTrace ON or OFF
Toutes les valeurs par défaut pour ces options sont NULL à l’exception de :
addressingType: flat
Les noeuds ont été créés et ils vont être positionnés suivant les coordonnées :
#
# Provide initial (X,Y, for now Z=0) co-ordinates for node_(0) and node_(1)
#
$node_(0) set X_ 5.0
$node_(0) set Y_ 2.0
$node_(0) set Z_ 0.0
#
# Node_(1) starts to move towards node_(0)
#
$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"
$ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0"
#
# Tell nodes when the simulation ends
#
for {set i 0} {$i < $val(nn) } {incr i} {
$ns_ at 150.0 "$node_($i) reset";
}
$ns_ at 150.0001 "stop"
$ns_ at 150.0002 "puts \"NS EXITING...\" ; $ns_ halt"
proc stop {} {
global ns_ tracefd
close $tracefd
}
On lance la simulation,
Questions
1. Réaliser une simulation avec 2 noeuds fixes distants de 100m. Emettre du trafic UDP
entre ces 2 nœuds. Tracer les résultats avec xgraph.
a. Comment se comporte le trafic ?
b. Que déduisez-vous ?
2. Améliorer le réalisme
a. Se renseigner à l’adresse suivante : http://www-ece.rice.edu/~jpr/ns-
802_11b.html
b. Appliquer les modifications
3. Faire s’éloigner les nœuds progressivement et interpréter les résultats obtenus
4. Mettre en évidence l’impact de la concurrence entre 2 flux UDP, puis entre 2 flux
TCP.