Académique Documents
Professionnel Documents
Culture Documents
fr/~badis/IR3/ns2/
INTRODUCTION
Dans le cadre des enseignements de modlisation des rseaux, nous avons simul plusieurs types de rseaux sans fil. Ce projet a pour objectif de comparer et d'tudier les performances de diffrents protocoles de routage dans diffrents scnarios. En utilisant le logiciel de simulation NS2 (Network Simulator 2), dont programment en TCL/TK, nous avons valu par la simulation fonctionnement, et plus particulirement les performances, des (Dynamic Source Routing), AODV (Ad-hoc On-demand Distance (Optimized Link State Routing Protocol) dans des rseaux ad-hoc. les simulations se les principes de algorithmes DSR Vector) et OLSR
Lobjectif de ce rapport est de prsenter notre dmarche, les scripts que nous avons mis en place pour valuer les trois algorithmes dans les diffrentes situations, et les analyses que nous avons tires de ces expriences.
TCL
TCL (Tool Command Language) est un langage de commande, comme le shell UNIX, mais qui sert contrler les applications. TCL offre des structures de programmation telles que les boucles, les procdures ou les notions de variables. Il y a deux principales faons de se servir de TCL : comme un langage autonome interprt ou comme une interface applicative d'un programme classique crit en C ou C++.
NAM
NAM est un outil de visualisation qui prsente deux intrts principaux : reprsenter la topologie dun rseau dcrit avec NS-2, et afficher temporellement les rsultats dune trace dexcution NS-2. Par exemple, il est capable de reprsenter des paquets TCP ou UDP, la rupture dun lien entre nuds, ou encore de reprsenter les paquets rejets dune file dattente pleine. Ce logiciel est souvent appel directement depuis les scripts TCL pour NS-2, afin de visualiser directement le rsultat de la simulation.
CONFIGURATION DE TRAVAIL
Nous effectuerons les manipulations sur une machine tournant sous GNU/Linux Debian ou une distribution drive (Ubuntu, etc...). Ainsi les installations de logiciels feront appel l'application Aptitude disponible pour grer les paquets et les dpendances sur ce type de systmes. La version de NS-2 la plus jour actuellement est la version 2.33 disponible en tlchargement sur le site officielle de NS mais pour plus de confort, nous utiliserons la version all-in-one 2.31 dj prsente sur nos machines. Celle-ci regroupe tous les utilitaires et les plugins ncessaires la compilation et au fonctionnement de de NS. NS nous permettra de compiler les scripts TCL que sur lesquels nous travaillerons. Sur nos postes de travail, NS-2 est excutable par la ligne de commande suivante : # /usr/local/apps/ns-allinone-2.31/ns-2.31/ns <arg>
Des fichiers d'exemples sont galement disponibles dans le rpertoire /usr/local/apps/ ns-allinone-2.31/ns-2.31/tcl/ex/.
Dpendances
Pralablement ces manipulations, il convient d'installer un certain nombre de paquets qui nous permettront de compiler les outils, grce la commande : # aptitude install libx11-dev tk8.5-dev libxt-dev libxmu-dev
NS
Il faut tlcharger le paquetage all-in-one accessible l'adresse : http://sourceforge.net/project/ showfiles.php?group_id=149743&package_id=169689&release_id=588643 On extrait ensuite les fichiers de l'archive et, dans le rpertoire nouvellement cr, on lance le script d'installation.
NAM
NAM tant inclus dans NS all-in-one, on se place dans le rpertoire nam-X.XX des fichiers de l'archive, et on excute les commandes : # ./configure # make
Patch UM-OLSR
Ce patch nous sera ncessaire car le protocole OLSR n'est pas inclus nativement dans l'outil NS. Il faut tout d'abord tlcharger le plugin : http://sourceforge.net/projects/um-olsr/ Il faut copier um-olsr-0.8.8.tgz (o "0.8.8" est la version du patch) dans le rpertoire nsallinone-2.31/ns-2.31/ (o "2.31" est la version de NS installe sur le systme). On excute ensuite les commandes : $ $ $ $ cd ns-allinone-2.29/ns-2.29/ tar zxvf um-olsr-0.8.8.tgz ln -s ./um-olsr-0.8.8 ./olsr patch -p1 < olsr/um-olsr_ns-2.31_v0.8.8.patch
Ensuite, pour que le patch soit pris en compte par NS : $ $ $ $ ./configure make distclean ./configure make
Des documentations pour ce patch sont accessibles aux adresses suivantes : http://masimum.inf.um.es/?Software:UM-OLSR http://masimum.inf.um.es/um-olsr/html/ /!\ Ce script est encore en dveloppement et les rsultats observs peuvent ne pas tre significatifs. Nous tenterons malgr tout cette simulation en tenant compte de ce point dans nos analyses.
Modle de simulation
Le modle de simulation est le suivant : le protocole IEEE 802.11 est utilis comme protocole daccs au mdium ; la capacit du mdium est de 2Mbit/s ; la puissance de transmission est de 0.28183815 dB ; la porte de communication (threshold RXThresh_) est de 250 m ; la port de dtection (threshold CSThresh_) est de 500 m ; le rseau se trouve sur une rgion carre de 1 km de ct ; 25 nuds sont utiliss ; la taille de la queue de chaque nud est de 50 paquets, et sa gestion est faite selon la discipline FIFO ; les paquets ont une taille de 512 octets et sont envoys toutes les 0,1 s. pendant 30 secondes par le CRB ; la position initiale de chaque nud est alatoire, il peut utiliser ensuite le modle de mobilit random waypoint. Le modle random waypoint est couramment utilis dans lanalyse des performance d'un protocoles de routage. Chaque nud choisit alatoirement un point de destination et se dplace vers celui-ci une vitesse constante slectionne uniformment entre 0 et 10 m/s. Une fois la destination atteinte, le nud marque un pause de 5s.
Scnarios d'tude
Ltude que nous allons faire se divise en deux tapes. Tout d'abord, nous simulerons le fonctionnement de chacun des trois protocoles dans le cas d'un rseau statique, dont les nuds sont placs alatoirement dans la zone de couverture de ltude. Ensuite nous effectuerons nouveau ces simulations en affectant chaque nud le modle de mobilit alatoire dfini plus haut. Pour chacune des configurations tudies, nous ferons varier le nombre de nuds metteurs (le CBR) de 1 12 nuds (la moiti des nuds).
Chaque valeur obtenue exprimentalement est issue de la moyenne des rsultats de 20 simulations utilisant les mmes paramtres, et avec une valeur de seed diffrente. /!\ Afin d'obtenir un rsultat parfaitement satisfaisant, nous aurions du faire la moyenne de 100 valeurs. Toutefois, les simulations tant particulirement lentes sur notre matriel personnel, nous rduirons ce chiffre afin de pouvoir traiter l'ensemble des cas dans les dlais qui nous sont impartis.
Traitements automatiss
tant donn le nombre de simulations effectuer et le temps que prennent celles-ci avec notre matriel, nous effectuerons donc des simulation par lots, en faisant appel diffrents scripts. Un script start.sh a pour rle d'excuter les diffrentes simulations : pour chacun des 3 protocoles ; pour chacun des 2 scnarios ; pour chacune des valeurs de CBR (nombre d'metteurs) ; il effectue la simulation 20 fois ; il excute pour chaque simulation les scripts awk permettant d'extraire les valeurs attendues (bande passante, dlai bout-en-bout et perte des paquets) ; il excute un script awk permettant de calculer une valeur moyenne partir de ces 20 simulations pour chacune des valeurs tudies et exporte celles-ci dans un fichier qui sera ensuite trait par gnuplot. Ce script est retranscrit ci-dessous. start.sh #!/bin/bash # # # # # # Projet MdR DELAUNOY Yann - CORNILLEAU Kevin IR 3me anne - 2008/09 http://www-igm.univ-mlv.fr/~badis/IR3/ns2/ Script de lancement des diffrentes simulation
# Config. des chemins TCL=simulations AWK=scripts_awk RESULT_DIR=results RESULT=./results.tr NS=../ns-allinone-2.33/ns-2.33/ns # set -x rm $RESULT_DIR/* # On effectue l'ensemble des simulation contenues dans le rpertoire for f in ./$TCL/*.tcl ; do echo "*** Operate $f"
TCL_FILE=${f%.*} TCL_FILE=${TCL_FILE##*/} j=1 # On fait varier le CRB de 1 12 while [ $j -lt 13 ] ; do echo "*** CBR=$j" i=0 # On fait 20 simulations while [ $i -lt 20 ] ; do echo "****** Simulation #$i" $NS $f $j for x in ./$AWK/*.awk ; do echo "********* Operate $x" AWK_FILE=${x%.*} AWK_FILE=${AWK_FILE##*/} $x $RESULT >> "$RESULT_DIR/$TCL_FILE-$AWK_FILE-$j.csv" done i=$[$i+1] echo echo done # On fait la moyenne des valeurs, pr export en courbe echo "****** Calculate average for CBR=$j" for x in ./$AWK/*.awk ; do AWK_FILE=${x%.*} AWK_FILE=${AWK_FILE##*/} echo -n "$j " >> "$RESULT_DIR/curve-$TCL_FILE-$AWK_FILE.csv" ./calc_average.awk $RESULT_DIR/$TCL_FILE-$AWK_FILE-$j.csv >> "$RESULT_DIR/curve-$TCL_FILE-$AWK_FILE.csv" done j=$[$j+1] echo echo done done rm $RESULT rm *.nam
La ralisation des programme TCL est dtaille dans les paragraphes d'tude. Les scripts awk chargs du calcul des valeurs tudies sont inspirs de ce qui a t ralis pralablement durant les TD. La bande passante est calcule en convertissant le nombre de paquets reus pour avoir l'unit qui nous intresse. bande_passante.awk
#!/usr/bin/awk -f # # # # # # Projet MdR DELAUNOY Yann - CORNILLEAU Kevin IR 3me anne - 2008/09 http://www-igm.univ-mlv.fr/~badis/IR3/ns2/ Fichier AWK qui permet calculer la bande passante
BEGIN { size_packets = 0 current_node = 0 node_dest = 0 node_src = 0 id = 0 } { # Rcupration des valeurs current_node = $3 # nud courant id = $6 # ID du paquet node_src = $14 # nud source node_dest = $15 # nud destination # On rcupre le nud destination sub(/\:([0-9]*)/,"", node_dest) sub(/\[/,"", node_dest) # On rcupre le nud source sub(/\:([0-9]*)/,"", node_src) sub(/\[/,"", node_src) # On supprime les "_" contenus dans le nud courant gsub(/_/, "", current_node); # Le type du paquet est cbr if($7=="cbr") { # Il s'agit d'une rception de paquet if($1 == "r") { # Si le nud destination est le nud courant if( packet_dest[id] == current_node ) { size_packets = size_packets + $8; } } # Il s'agit d'un envoi de paquet else if($1 == "s") { if ( !(id in start) ) { start[id] = time; packet_dest[id] = node_dest; packet_src[id] = node_src } }
} END { # print "Bande passante : " (size_packets * 8) / (30 * 1e6) " Mbits/sec"; print (size_packets * 8) / (30 * 1e6); }
Le dlai de bout en bout est obtenu par simple soustraction. delai_bout_en_bout.awk #!/usr/bin/awk -f # # # # # # # Projet MdR DELAUNOY Yann - CORNILLEAU Kevin IR 3me anne - 2008/09 http://www-igm.univ-mlv.fr/~badis/IR3/ns2/ Fichier AWK qui permet de calculer le dlai de bout en bout des paquets envoys
BEGIN { nb_packets = 0 time = 0 current_node = 0 node_dest = 0 node_src = 0 id = 0 highest_packet_id = 0 } { # Rcupration des valeurs time = $2 # Temps current_node = $3 # nud courant id = $6 # ID du paquet node_src = $14 # nud source node_dest = $15 # nud destination # On rcupre le nud destination sub(/\:([0-9]*)/,"", node_dest) sub(/\[/,"", node_dest) # On rcupre le nud source sub(/\:([0-9]*)/,"", node_src) sub(/\[/,"", node_src) # On supprime les "_" contenus dans le nud courant gsub(/_/, "", current_node); # Le type du paquet est cbr if($7=="cbr") {
10
# Il s'agit d'une rception de paquet if($1 == "r") { # Si le nud destination est le nud courant if( packet_dest[id] == current_node ) end[id] = time; if( id > highest_packet_id ) highest_packet_id = id; } # Il s'agit d'un envoi de paquet else if($1 == "s") { if ( !(id in start) ) { start[id] = time; packet_dest[id] = node_dest; packet_src[id] = node_src } }
END { for ( id = 0; id <= highest_packet_id; id++ ) { if( ( id in start ) && ( id in end ) ) { if ( start[id] < end[id] ) { total_time = end[id] - start[id] + total_time; nb_packets++; }
# Calcul du dlai de bout en bout delay = total_time / (nb_packets * 512 * 8); # Affichage du rsultat print delay;
La probabilit de perte de paquets est obtenue par un rapport du nombre de paquets envoys sur le nombre de paquets rejets. perte_paquets.awk #!/usr/bin/awk -f # # # # # # # Projet MdR DELAUNOY Yann - CORNILLEAU Kevin IR 3me anne - 2008/09 http://www-igm.univ-mlv.fr/~badis/IR3/ns2/ Fichier AWK qui permet de calculer le nombre de paquets perdus
BEGIN{
11
} {
# Si le type du paquet est cbr if($7=="cbr"){ # Si il s'agit d'une rception de paquet if($1 == "r") packets_received++; # Si il s'agit d'un envoi ou d'un forward de paquet else if($1 == "s" || $1 =="f") packets_sent++; # Si il s'agit d'un paquet dropp else if($1 == "D") packets_dropped++;
Le calcul de la moyenne de chacune des simulations est obtenu trs simplement avec le script awk suivant. calc_average.awk #!/usr/bin/awk -f # # # # # # # Projet MdR DELAUNOY Yann - CORNILLEAU Kevin IR 3me anne - 2008/09 http://www-igm.univ-mlv.fr/~badis/IR3/ns2/ Fichier AWK qui permet calculer la moyenne des valeurs d'un fichier BEGIN { sum = 0; cpt = 0; } { } sum += $1; cpt++;
12
Le trac des courbes sous GNUPLOT est ensuite obtenu l'aide des commandes suivantes (ces commandes sont donnes ici pour le calcul de la bande passante, dans le cas de nud mobiles, et sera adapt pour chaque courbe) : set term png set output "../graphs/dynamique-bande_passante.png" set xlabel 'CBR' set ylabel 'Bande passante' set title 'nuds dynamiques' plot "../results/curve-aodv_dynamique-bande_passante.csv" using 1:2 with linespoints, "../results/curve-dsr_dynamique-bande_passante.csv" using 1:2 with linespoints, "../results/curve-olsr_dynamique-bande_passante.csv" using 1:2 with linespoints
Algorithmes tudis
Un rseau ad-hoc est un rseau cr par les liaisons de nuds mobiles. Il s'agit donc d'un rseau ne s'appuyant pas sur une infrastructure prexistante.
13
14
Scripts de simulation
Le script est inspir de ce qui a t fait lors des TD et de l'exemple qui est notre disposition sur le sujet du projet. Le voici comment.
# Dfinition des variables pour la simulation de notre rseau sans-fil set val(chan) Channel/WirelessChannel; # Type de canal set val(prop) Propagation/TwoRayGround; # Propagation radio set val(netif) Phy/WirelessPhy; # Type de l'interface rseau set val(mac) Mac/802_11; # Support du wireless set val(ifq) Queue/DropTail/PriQueue; # Priorit de la file set val(ll) LL; # Type de la couche de liaison set val(ant) Antenna/OmniAntenna; # Type de l'antenne set val(ifqlen) 50; # Taille de la queue set val(x) 1000; # X Largeur de la rgion (en mtres) set val(y) 1000; # Y Hauteur de la rgion (en mtres) set val(nn) 25; # Nombre de nuds set val(stop) 30; # Temps de la simulation (en secondes) set val(sources) [lindex $argv 0] # Nombre de sources pass en argument set val(packet_size) 512; # Taille des paquets envoys (en octets) set val(interval) 0.1; # Intervalle d'envoi de paquets (en secondes) set val(rp) AODV; # Protocole de routage
# Dfinition de la variable de Random pour le placement des nuds dans la rgion global defaultRNG $defaultRNG seed 0 set sizeRNG [new RNG] $sizeRNG next-substream set size_ [new RandomVariable/Uniform]; # Variable Random uniforme $size_ set min_ 1; # Valeur minimum $size_ set max_ 999; # Valeur maximum $size_ use-rng $sizeRNG
# Cration du simulateur NS
15
# Paramtrage de l'antenne Antenna/OmniAntenna Antenna/OmniAntenna de Y Antenna/OmniAntenna Antenna/OmniAntenna Antenna/OmniAntenna set X_ 0; # Direction de X set Y_ 0; set Z_ 1.5; set Gt_ 1.0; set Gr_ 1.0; # Direction de Z # Gain de transmission # Gain de rception # Direction
# Paramtrage de l'interface rseau Phy/WirelessPhy set CPThresh_ 10.0; # Collision Threshold Phy/WirelessPhy set CSThresh_ 1.559e-11;# Porte de dtection : 500 mtres Phy/WirelessPhy set RXThresh_ 0.652e-10; # Porte de communication : 250 mtres (-91,1db) Phy/WirelessPhy set bandwidth_ 2e6; # Capacit du mdium : 2Mbits Phy/WirelessPhy set Pt_ 0.28183815; # Puissance de transmission : 24.5dbm Phy/WirelessPhy set freq_ 914e+6; # Frquence : 914MHz Phy/WirelessPhy set L_ 1.0; # System Loss Factor
# Cration des fichiers de trace set f [open results.tr w] $ns trace-all $f $ns eventtrace-all set nf [open aodv_sim.nam w] $ns namtrace-all-wireless $nf $val(x) $val(y)
16
# Configuration du nud $ns node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channel $chan \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace ON \ -movementTrace OFF
# Cration des nuds pour la simulation for {set i 0} {$i < $val(nn)} {incr i} { set node_($i) [$ns node] $node_($i) random-motion 0 }
# Position des nuds dans la rgion de manire alatoire for {set i 0} {$i < $val(nn)} {incr i} { $node_($i) set X_ [expr round([$size_ value])]] $node_($i) set Y_ [expr round([$size_ value])]] $node_($i) set Z_ 0.0 }
# Cration des agents pour les nuds sources for {set i 0} {$i < $val(sources)} {incr i} { # Cration de l'agent UDP set udp_($i) [new Agent/UDP] $ns attach-agent $node_($i) $udp_($i) # Cration de l'agent Null
17
set null_($i) [new Agent/Null] $ns attach-agent $node_([expr [expr $val(nn) - 1] - $i]) $null_($i) $ns connect $udp_($i) $null_($i) # Cration et paramtrage du CBR set cbr_($i) [new Application/Traffic/CBR]; $cbr_($i) attach-agent $udp_($i) $cbr_($i) set type_ CBR; # Type du CBR $cbr_($i) set packet_size_ $val(packet_size); # Taille des paquets envoys $cbr_($i) set rate_ [expr $val(packet_size) * 8 / [$ns delay_parse $val(interval)]]; # Taux $cbr_($i) set random_ false # Dbut d'envoi de paquets pas en mme temps, sinon Erreur de segmentation $ns at [expr 0.1 * $i] "$cbr_($i) start"; # Dbut d'envoi de paquets $ns at $val(stop) "$cbr_($i) stop"; # Fin d'envoi de paquets }
# Positionne les nuds sur la grille for {set i 0} {$i < $val(nn)} {incr i} { $ns initial_node_pos $node_($i) 30; # 30 : taille du nud dans nam }
# Arrt de la simulation $ns at $val(stop) "finish" $ns at [expr $val(stop) + 0.1] "$ns halt"
# Fonction appele pour terminer la simulation proc finish {} { global ns f nf val $ns flush-trace close $f close $nf exit 0 } # Dbut de la simulation $ns run
18
Rsultats de simulation
On tudie ici les valeurs en faisant voluer le nombre de nuds metteurs de 1 12 selon le mode opratoire dfini prcdemment.
On s'aperoit la lecture de ces courbes que l'augmentation de la bande passante avec le nombre d'metteurs semble se faire de plus en plus rduite compter d'une dizaine d'metteurs. Cette observation serait confirmer avec un plus grand nombre de nuds. Il est possible que nous arrivions une saturation du rseau. DSR semble ici beaucoup plus performant que les autres protocoles pour un nombre limit d'metteurs. Cependant on semble observer qu'avec ce protocole galement, on a un phnomne de saturation, et que la bande passante maximale du rseau parat comparable quelque soit le protocole choisi. DSR et OLSR paraissent ici offrir des performances assez similaires.
19
Probabilit de perte
On observe assez logiquement que la probabilit de perte augmente avec le nombre de nuds metteurs. OLSR parat ici tre beaucoup moins performant que les deux autres protocoles. En effet ds le premier metteur nous avons un taux de perte de prs de 7%. Il semblerait que DSR soit lgrement plus performant qu'AODV au-dessus de 10 metteurs, mais cette hypothse serait confirmer avec une tude plus pousse. Une tude sur un plus grand nombre de nuds nous permettrait peut-tre d'observer des diffrences plus marques.
20
Dlai de bout-en-bout
L'tude des dlais de bout-en-bout parat plus intressante. On s'aperoit que le temps observ avec les diffrents protocoles est assez comparable (moins d'1/10000 de seconde) jusqu' 4 metteurs ; AODV se situant lgrement au dessus de DSR et OLSR. A partir de 5 metteurs, cette dure augmente de manire trs importante pour DSR et de manire beaucoup plus modre pour AODV et OLSR. OLSR et AODV restent assez comparables en terme de dure jusqu' 10 metteurs o la dure observe avec OLSR semble augmenter assez fortement.
21
Lorsque celui-ci augmente, DSR perd son avantage en terme de bande-passante et son taux de perte devient beaucoup plus lev. C'est alors AODV qui parat tre le plus performant.
22
Scripts de simulation
Les simulations utilises ici sont trs proches de celles pour les mesures statiques. Les scripts de simulation sont identiques ceux utilis pour les mesures statiques. Pour le dplacement des nuds, nous avons utilis une implmentation du Random Waypoint dans la procdure : proc setNewDest {node currentX currentY} { }
Voici un exemple comment. # Dfinition des variables pour la simulation de notre rseau sans-fil set val(chan) Channel/WirelessChannel; # Type de canal set val(prop) Propagation/TwoRayGround; # Propagation radio set val(netif) Phy/WirelessPhy; # Type de l'interface rseau set val(mac) Mac/802_11; # Support du wireless set val(ifq) Queue/DropTail/PriQueue; # Priorit de la file set val(ll) LL; # Type de la couche de liaison set val(ant) Antenna/OmniAntenna; # Type de l'antenne set val(ifqlen) 50; # Taille de la queue set val(x) 1000; # X Largeur de la rgion (en mtres) set val(y) 1000; # Y Hauteur de la rgion (en mtres) set val(nn) 25; # Nombre de nuds set val(stop) 30; # Temps de la simulation (en secondes) set val(sources) [lindex $argv 0] # Nombre de sources pass en argument set val(packet_size) 512; # Taille des paquets envoys (en octets) set val(interval) 0.1; # Intervalle d'envoi de paquets (en secondes) set val(rp) ## Mobilit # Dfinition de la variable de Random pour le placement des nuds dans la rgion global defaultRNG $defaultRNG seed 0 AODV; # Protocole de routage
23
set sizeRNG [new RNG] $sizeRNG next-substream # Variable de random utilise pour un point sur la grille set size_ [new RandomVariable/Uniform]; # Variable Random uniforme $size_ set min_ 1; # Valeur minimum $size_ set max_ 999; # Valeur maximum $size_ use-rng $sizeRNG # Variable de random utilise pour une vitesse de dplacement set sizespeed_ [new RandomVariable/Uniform]; # Variable Random uniforme $sizespeed_ set min_ 1; # Valeur minimum $sizespeed_ set max_ 10; # Valeur maximum $sizespeed_ use-rng $sizeRNG
# Cration du simulateur NS set ns [new Simulator] # Paramtrage de l'antenne Antenna/OmniAntenna Antenna/OmniAntenna Antenna/OmniAntenna Antenna/OmniAntenna Antenna/OmniAntenna set set set set set X_ 0; Y_ 0; Z_ 1.5; Gt_ 1.0; Gr_ 1.0; # Direction de X # Direction de Y # Direction de Z # Gain de transmission # Gain de rception
# Paramtrage de l'interface rseau Phy/WirelessPhy set CPThresh_ 10.0; # Collision Threshold Phy/WirelessPhy set CSThresh_ 1.559e-11;# Porte de dtection : 500 mtres Phy/WirelessPhy set RXThresh_ 0.652e-10; # Porte de communication : 250 mtres (-91,1db) Phy/WirelessPhy set bandwidth_ 2e6; # Capacit du mdium : 2Mbits Phy/WirelessPhy set Pt_ 0.28183815; # Puissance de transmission : 24.5dbm Phy/WirelessPhy set freq_ 914e+6; # Frquence : 914MHz Phy/WirelessPhy set L_ 1.0; # System Loss Factor
# Cration des fichiers de trace set f [open results.tr w] $ns trace-all $f $ns eventtrace-all set nf [open aodv_sim.nam w] $ns namtrace-all-wireless $nf $val(x) $val(y)
24
# Topographie de la simulation set topo [new Topography]; # Cration de la rgion pour la simulation $topo load_flatgrid $val(x) $val(y) # Cration du God create-god $val(nn) # Cration du canal set chan [new $val(chan)] # Configuration du nud $ns node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channel $chan \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace ON \ -movementTrace OFF
# Cration des nuds pour la simulation for {set i 0} {$i < $val(nn)} {incr i} { set node_($i) [$ns node] $node_($i) random-motion 0 } # Position des nuds dans la rgion de manire alatoire # Spcification des dplacements alatoires for {set i 0} {$i < $val(nn)} {incr i} { set X [expr round([$size_ value])]; # Position X en random sur la grille set Y [expr round([$size_ value])]; # Position Y en random sur la grille $node_($i) set X_ $X]; # Position X du nud sur la grille
25
set speed [expr round([$sizespeed_ value])]; # vitesse en random entre 1m/s et 10m/s set newX [expr round([$size_ value])]; # Position X en random sur la grille set newY [expr round([$size_ value])]; # Position Y en random sur la grille # Dfinition du premier mouvement $ns at [expr 0.1 * $i] "$node_($i) setdest $newX $newY $speed"; # Dfinition des mouvements suivants si la simulation n'est pas termine $ns at [expr 0.1 * $i] "setNewDest $node_($i) $newX $newY";
# Mthode qui permet de dfinir une nouvelle destination au nud mobile proc setNewDest {node currentX currentY} { global ns sizespeed_ size_; # Rcupre les variables du programme set speed [expr round([$sizespeed_ value])]; # Vitesse en random entre 1m/s et 10m/s set nextX [expr round([$size_ value])]; # Position X en random sur la grille set nextY [expr round([$size_ value])]; # Position Y en random sur la grille set now [$ns now]; # Date courante de la simulation set longX [expr $nextX-$currentX]; # Distance en X parcourir set longY [expr $nextY-$currentY]; # Distance en Y parcourir # Calcul de la longueur du chemin set distance [expr sqrt(($longX*$longX)+($longY*$longY))]; # Dtermination de la date d'arrive au point destination set arrivalDate [expr $now + [expr $distance/$speed]]; # Dtermination de la prochaine date de mouvement aprs 5 secondes de pause set nextMove [expr $arrivalDate + 5.0]; # Dfinition de la prochaine destination $ns at $now "$node setdest $nextX $nextY $speed"; # Dfinition du prochain mouvement si la simulation n'est pas termine $ns at $nextMove "setNewDest $node $nextX $nextY";
# Cration des agents pour les nuds sources for {set i 0} {$i < $val(sources)} {incr i} {
26
# Cration de l'agent UDP set udp_($i) [new Agent/UDP] $ns attach-agent $node_($i) $udp_($i) # Cration de l'agent Null set null_($i) [new Agent/Null] $ns attach-agent $node_([expr [expr $val(nn) - 1] - $i]) $null_($i) $ns connect $udp_($i) $null_($i) # Cration et paramtrage du CBR set cbr_($i) [new Application/Traffic/CBR]; $cbr_($i) attach-agent $udp_($i) $cbr_($i) set type_ CBR; # Type du CBR $cbr_($i) set packet_size_ $val(packet_size); # Taille des paquets envoys $cbr_($i) set rate_ [expr $val(packet_size) * 8 / [$ns delay_parse $val(interval)]]; # Taux $cbr_($i) set random_ false # Dbut d'envoi de paquets pas en mme temps, sinon Erreur de segmentation $ns at [expr 0.1 * $i] "$cbr_($i) start"; # Dbut d'envoi de paquets $ns at $val(stop) "$cbr_($i) stop"; # Fin d'envoi de paquets } # Positionne les nuds sur la grille for {set i 0} {$i < $val(nn)} {incr i} { $ns initial_node_pos $node_($i) 30; # 30 : taille du nud dans nam } # Arrt de la simulation $ns at $val(stop) "finish" $ns at [expr $val(stop) + 0.1] "$ns halt" # Fonction appele pour terminer la simulation proc finish {} { global ns f nf val $ns flush-trace close $f close $nf exit 0 } # Dbut de la simulation $ns run
27
Rsultats de simulation
On tudie galement ici les valeurs en faisant voluer le nombre de nuds metteurs de 1 12 selon le mode opratoire dfini prcdemment.
On observe l encore sans surprise que le dbit augmente avec le nombre de cellules mettrice jusqu' une valeur de saturation qui semble avoisiner les 10 cellules. Les trois protocoles semblent atteindre saturation un dbit similaire. On note ici aussi que le dbit augmente plus vite avec le nombre de nuds metteurs pour le protocole DSR, qui atteint donc plus rapidement le point de saturation. AODV et OLSR offrent des valeurs comparables. On remarque enfin que les valeurs releves ici sont trs proches de celles obtenues dans le cadre du rseau statique.
28
Probabilit de perte
On observe l encore que la mobilit des nuds ne permet pas de modifier les commentaires que nous avions relevs dans le cadre du rseau statique. AODV et DSR semblent offrir un taux de perte relativement comparable. Celui-ci augmentant avec le nombre de nuds metteurs. OLSR parat se trouver bien au dessus des 2 autres protocoles selon ce point de vue, mais suit toutefois une augmentation comparable. On observe nouveau que DSR parat lgrement plus performant qu'AODV au-dessus de 10 metteurs.
29
Dlai de bout-en-bout
L encore, l'analyse du scnario dynamique ne semble pas diffrer du scnario nuds statiques. On s'aperoit donc que le temps observ avec les diffrents protocoles est assez faible et comparable jusqu' 4 metteurs. La majoration de temps observe avec AODV parat ici un peu plus importante. partir de 5 metteurs, cette dure augmente de manire trs importante pour DSR et de manire beaucoup plus modre pour AODV et OLSR. OLSR et AODV restant assez comparables en terme de dure jusqu' 10 metteurs o la dure observe avec OLSR semble augmenter assez fortement.
30
OLSR quant lui prsente un taux de perte trs lev quand le dlai et le dbit relevs sont comparables aux autres.
31
32
33
Ces diffrentes courbes permettent bien de confirmer que le scnario choisi ne modifie ni les comportements observs ni les valeurs mesures. Cette observation est toutefois nuancer par 2 point noncs plus tt : Les valeurs utilises pour nos courbes sont les rsultats de la moyenne de 20 simulations. Ce chiffre est insuffisant pour obtenir des valeurs rellement satisfaisantes. Un plus grand nombre de simulations aurait permis des estimations plus exactes et peut-tre d'observer un dcalage plus franc. Notre tude se limite un parc de 25 nuds. Nous ne pouvons donc observer de phnomnes pouvant apparatre aprs 12 metteurs.
34
CONCLUSION
En conclusion, ce projet nous a permis au travers d'un exemple concret d'tude de dcouvrir l'intrt certain de la modlisation des rseaux et de l'utilisation d'outils tels que NS. Nous avons pu sans aucun matriel spcifique, et sans raliser aucune configuration rseau : tester les comportements de diffrents protocoles dans des scnarios particuliers ; analyser ceux-ci. Nous avons pu en extraire une tude chiffre et comparer les performances de chacun en fonction des configurations observes. Cette tude nous a donc permis d'observer que le protocole OLSR semblait moins intressant qu'AODV et DSR avec un taux de perte qui semble particulirement lev. DSR, avec un dbit qui augmente rapidement avec le nombre d'metteurs, semble plus efficace lorsque le nombre d'metteurs est faible. Toutefois, il devient bien moins intressant ds que le nombre d'metteurs augmente (>6), avec un taux de perte qui devient rapidement trs important. Ds que le nombre d'metteurs augmente, c'est AODV qui est le plus performant avec un dlai et un taux de perte limits, mais une bande-passante presque aussi leve que DSR. D'une manire plus gnrale et avec un nombre d'metteurs levs, si l'on choisit de privilgier le taux de perte, on sera peut-tre plus enclin choisir DSR, tandis qu'AODV parat beaucoup plus judicieux si c'est le dlai bout en bout qui est le facteur de dcision. Toutefois, comme nous l'avons soulign plusieurs fois dans ce rapport, il est bon de garder l'esprit que nos tudes doivent tre nuances : l'tude est limite par le faible nombre de simulations que nous avons ralises ; le primtre de l'tude a port 25 le nombre de nuds tudis, et donc 12 le nombre maximal d'metteurs ; l'implmentation utilise du protocole OLSR est fournie par un patch dont le dveloppement est encore en cours (l'implmentation n'est pas parfaite) : certains rsultats peuvent tre moins bons que ceux attendus, et ne sont pas rellement significatifs.
35