Réparation locale sur des réseaux de capteurs

Transcription

Réparation locale sur des réseaux de capteurs
R´
eparation locale
sur des r´
eseaux de capteurs
Julien Coutinho
Rapport pr´esent´e dans le cadre de
l’Introduction a` la Recherche en Laboratoire
Tuteur en laboratoire :
Martin Heusse
[email protected]
´
Equipe
Drakkar
Laboratoire Informatique
de Grenoble
Responsable `
a l’´
ecole :
Marie-Paule Cani
[email protected]
Mai 2015
Remerciements
Je tiens a` remercier tout particuli`erement Martin Heusse et Henry-Joseph Aud´eoud
qui travaillent sur LRP et qui m’ont beaucoup aid´e durant mon IRL. N’ayant pas
suivi de formation plus pouss´e en r´eseau, beaucoup de concepts connus de la majorit´e des personnes dans le domaine m’´etaient inconnus (comme les protocoles de
r´ef´erences et leurs fonctionnement). Grˆace a` leurs connaissances et leurs disponibilit´es, j’ai pu comprendre les contraintes qui s’appliquent dans les r´eseaux de capteurs
et les solutions existantes. Je tiens aussi a` leur dire merci pour leur patience et le
temps qu’ils m’ont accord´e, durant leur travail et aussi pendant leur temps personnel.
Je souhaite aussi dire merci `a l’ensemble des personnes que j’ai pu cˆotoyer, qui
m’ont aid´e, conseill´e et avec qui j’ai ´echang´e sur des domaines tr`es int´eressants de
la recherche, `a savoir Baptiste Jonglez et Bernard Tourancheau.
Table des mati`
eres
1 Introduction
1
2 RPL
3
2.1
Cr´eation de l’arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2
Envoi de paquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3
Correction des liens . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.4
Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3 LOADng
7
4 TORA
9
4.1
Cr´eation de l’arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.2
R´eparation de l’arbre . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.3
Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5 LRP
5.1
5.2
11
Fonctionnement normal . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.1.1
Cr´eation de l’arbre . . . . . . . . . . . . . . . . . . . . . . . . 11
5.1.2
Envoi et r´eception d’un paquet . . . . . . . . . . . . . . . . . 12
Correction d’un lien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2.1
Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2.2
Simulations – R´esultat de mon travail . . . . . . . . . . . . . . 14
6 Conclusion
Bibliographie
19
21
Chapitre 1
Introduction
Depuis des ann´ees, les ´evolutions en ´electroniques ont permis de cr´eer des composants de plus en plus petits. Cela a permis de passer des ordinateurs fixes, aux
ordinateurs portables, puis aux notebooks et enfin aux smart-phones. A chacune
de ces pouss´ees technologiques, il a fallu adapter nos syst`emes de communications
(Wifi, 4G...) et bien que nous ayons des protocoles performants pour ces dispositifs,
des chercheurs continuent a` les perfectionner.
R´ecemment, bien que peu connus du grand public, de plus en plus les r´eseaux
de capteurs int´eressent les secteurs public comme priv´e. La recherche s’est pench´ee
sur le probl`eme, et des technologies se mettent en place, mˆeme si une grande partie
du travail reste encore a` faire. Cependant, un seul protocole ne peut pas convenir a`
toutes les utilisations, mais d´epend des contraintes inh´erentes au r´eseau lui-mˆeme.
Le protocole de routage distribu´e ´etudi´e durant mon travail s’int´eresse aux
r´eseaux qui sont :
— mobiles : les capteurs peuvent se d´eplacer au cours du temps ;
— a` multi-sauts : tous les capteurs ne sont pas reli´es directement au puits ;
— ad-hoc : ne n´ecessite pas une infrastructure pr´ealable (un capteur peut apparaˆıtre a` tout moment) ;
— sans-fil : les capteurs utilisent des ondes pour communiquer—pertes possibles ;
— a` faible puissance : la quantit´e d’´energie disponible est limit´ee.
Tous ces capteurs forment un arbre de collecte orient´e vers un sommet particulier,
appel´e le puits du r´eseau (sink ). Dans le cas ´etudi´e, l’arbre de collecte peut contenir
1
Chapitre 1. Introduction
2
plusieurs chemins vers le puits pour un mˆeme capteur. Il est appel´e graphe acyclique
orient´e vers une destination (en anglais DODAG : Destination-Oriented Directed
Acyclic Graphs).
Le protocole ´etudi´e, Lightweight Routing Protocol (LRP), s’inspire de protocoles
existants, a` savoir RPL 1 [1], LOADng 2 [3], TORA 3 [2], que je d´etaillerai dans ce
rapport en expliquant leurs limites et les concepts r´eutilis´es. Pour finir, j’expliquerai
les tests r´ealis´es comme preuve de concept et les r´esultats ainsi obtenus.
1. IPv6 Routing Protocol for Low-Power and Lossy Networks
2. Routing Protocol for Low-Power and Lossy Networks et The Lightweight On-demand Ad
hoc Distance-vector Routing Protocol - Next Generation
3. Temporally-Ordered Routing Algorithm
16 mai 2015
Chapitre 2
RPL
Dans ce chapitre, nous allons expliquer le fonctionnement de RPL. Ce protocole
a ´et´e d´evelopp´e pour des r´eseaux de capteurs mobiles, qui ont une ´energie limit´ee
(batterie) et qui ont un taux de pertes de paquets relativement ´elev´e. De plus, les
connexions sont instables, les liens entre les noeuds peuvent beaucoup changer. Donc
pour ´eviter que des boucles de routages ne se forment, RPL associe a` chaque noeud
un rang qui correspond `a la distance virtuelle de ce dernier au puits.
2.1
Cr´
eation de l’arbre
Comme tout protocole de communication, lors de l’envoi d’un paquet, il faut
que l’´emetteur sache `a qui envoyer son paquet. Dans le cas de RPL, le r´eseau forme
un arbre de collecte. Chaque noeud s’associe a` un successeur pr´ef´er´e (le prochain
saut—next hop), qui lui aussi a un successeur pr´ef´er´e, ainsi de suite, jusqu’`a arriver
au puits. Cependant, a priori, un successeur ne connaˆıt pas ses pr´ed´ecesseurs.
Pour ajouter un nouveau noeud au DODAG, le puits demande p´eriodiquement
a` tous noeuds d’envoyer un DODAG Information Object (DIO). D`es que le nouveau
noeud re¸coit un DIO, il analyse les informations de ce paquet. C’est-`a-dire notamment, le rang de l’´emetteur, la fonction objectif a` utiliser et l’identifiant du DODAG
construit. Il est donc possible qu’un noeud re¸coive plusieurs DIO. Cependant, le
r´eseau doit former un arbre de collecte. Il faut donc qu’il choisisse un noeud qui
minimise la fonction objectif. C’est `a cela que sert le rang de chaque noeud. Dans
3
2.2. Envoi de paquets
4
le cas o`
u la fonction objectif fournie est la distance au puits, un noeud va choisir
comme successeur pr´ef´er´e le noeud qui lui aura fourni un rang minimal. Parmi tous
les successeurs possibles, un seul va minimiser la fonction objectif, mais les autres
successeurs sont aussi gard´es. RPL consid`ere que tous les successeursont le mˆeme
rˆole et peuvent mˆeme ˆetre utilis´es simultan´ement.
Un noeud peut aussi solliciter l’envoi d’un DIO, par l’envoi en broadcast d’un
DODAG Information Solicitation (DIS). De cette fa¸con, un noeud, qui souhaiterait
se rattacher `a l’arbre, n’a pas a` attendre l’envoi d’un DIO (qui peut ˆetre plus ou
moins long, comme sa dur´ee augmente quand l’arbre ne change pas de topologie
pendant longtemps).
Pour ˆetre plus polyvalent (ˆetre applicable sur plus de r´eseaux), RPL permet
de choisir d’autres fonctions objectif. Comme par exemple, optimiser le graphe de
fa¸con `a ce qu’un noeud privil´egie ses communications avec le successeur qui a le plus
d’´energie r´esiduelle, peu importe si le chemin devient plus long. Cette fonction objectif permet de faire tenir plus longtemps certains capteurs qui seraient surcharg´es
(trop de pr´ed´ecesseurs) ou qui seraient tout simplement plus vieux.
2.2
Envoi de paquets
Tout d’abord, il est facile de se rendre compte de la fa¸con dont un noeud peut
communiquer avec le puits. Il transfert a` son successeur son paquet, qui remonte de
pr´ed´ecesseur en successeur jusqu’au puits. Dans ce cas, il n’y a pas de soucis et peu
de paquets sont envoy´es, ce qui n’utilise pas beaucoup d’´energie.
Par contre, concernant l’envoi de paquets a` partir d’un noeud vers un de ses
pr´ed´ecesseurs (direct ou non), le d´eroulement est plus compliqu´e et moins optimis´e.
Tout d’abord, RPL a deux modes, l’un o`
u les messages vers le bas sont autoris´es
et l’autre non. Si les messages descendants sont autoris´es, RPL a mis en place encore
deux autres modes.
Un premier mode o`
u chaque noeud peut contenir suffisamment d’entr´ees dans sa
table de routage pour se rappeler de l’adresse de tous ses pr´ed´ecesseurs. Pour que
tous les noeuds connaissent leurs pr´ed´ecesseurs, il faut que ces derniers envoient un
16 mai 2015
2.3. Correction des liens
5
paquet DAO (Destination Advertisement Object) a` destination du puits. A chaque
r´eception d’un DAO, la table de routage est mise `a jour. Cependant, dans ce mode,
si une table de routage est remplie, tous les noeuds qui viendraient a` se rajouter, endessous de ce noeud, seraient impossible a` atteindre (ce point devrait ˆetre am´elior´e
dans le futur d’apr`es la RFC sur RPL).
Dans l’autre mode de communication vers le bas, le puits se charge de sauvegarder toutes les tables de routage. A priori, ce dernier est moins limit´e et peut
conserver toutes les entr´ees.
Et enfin, il est impossible de m´elanger le mode o`
u chaque noeud a une table de
routage et celui o`
u le puits a toutes les entr´ees dans sa table de routage.
2.3
Correction des liens
Une fois le DODAG en place, chaque noeud continue d’envoyer de fa¸con p´eriodique
des DIOs (algorithme trickle, initi´e par le puits). Si un noeud re¸coit des informations
des autres DIOs qui sont synchronis´ees avec les siennes, par rapport a` ses informations de routage qu’il a d´ej`a, alors il double sa p´eriode d’envoi. Si par contre, les
informations sont d´esynchronis´ees (par exemple si son successeur change de rang),
alors ce noeud r´einitialise sa p´eriode d’envoi a` son minimum.
Cette correction consomme beaucoup, car les DIOs sont en broadcast, ce qui
coˆ
ute le plus en terme d’´energie utilis´ee. Avec une simulation sous ContikiMAC [6],
un broadcast coˆ
ute 7 fois plus que les autres envois (sauf pour le premier unicast).
Le protocole est aussi agressif dans le but de converger le plus vite possible. En
effet, l’arbre bien qu’il change souvent, ne change pas de topologie tout le temps.
Cependant, lorsqu’un noeud change de rang, tous ses pr´ed´ecesseurs vont re-´emettre
en mˆeme temps, leurs messages risquent d’entrer en collision et donc de devenir
incompr´ehensibles pour les noeuds qui sont a` leurs port´ees. Pour la mˆeme raison,
les capteurs peuvent, apr`es plusieurs ´echecs cons´ecutifs, abandonner l’envoi d’un
paquet.
Pour choisir son prochain successeur (apr`es la perte de l’ancien), un noeud peut
choisir un noeud avec un rang inf´erieur au sien. Cependant, il ne peut pas choisir un
16 mai 2015
2.4. Bilan
6
noeud qui a un rang sup´erieur au sien de MaxRankIncrease. Ce noeud risque donc
de choisir un de ses pr´ed´ecesseurs comme successeur. Cela risque donc de cr´eer une
boucle. Pour d´etecter cette boucle, les noeuds, incr´ementant leurs rangs d`es qu’ils
choisissent un pr´ed´ecesseur comme successeur, vont atteindre INFINITE RANK et
le premier a` l’atteindre va informer ses pr´ed´ecesseurs qu’il est d´etach´e de l’arbre.
Donc, aucun autre noeud ne le choisira comme successeur.
2.4
Bilan
Ce que nous pouvons retenir de RPL est la construction de l’arbre, qui permet
de choisir une m´etrique optimale pour diff´erents arbres et aussi de pr´evenir la formation de boucles. Concernant leur proc´ed´e pour communiquer de fa¸con descendante
dans l’arbre, nous ne retiendrons que le mode o`
u une table de routage limit´ee est
plac´ee dans chaque noeud. La solution o`
u le puits contient toutes les informations
de l’arbre n’est pas convenable en terme de communication. Chaque noeud devrait
faire remonter les informations concernant son pr´ed´ecesseur au puits. De plus, ce
mode n´ecessite l’encapsulation des paquets IP, ce qui augmente leurs tailles, alors
que dans ce type de r´eseaux le MTU (Maximum Transmission Unit) est limit´e.
L’envoi de DIO p´eriodique est aussi int´eressant, cela permet de prendre en
consid´eration les modifications de la topologie.
Pour la correction des liens, le fait de choisir un noeud en-dessous de soit peut
cr´eer des boucles. Il peut ˆetre int´eressant de prendre un MaxRankIncrease nul pour
pr´evenir la cr´eation de boucles de routage et d’avoir a` les corriger.
16 mai 2015
Chapitre 3
LOADng
Contrairement `a RPL, LOADng ne met pas en place de DODAG. A chaque
instant, si un noeud a besoin d’envoyer un paquet `a un autre noeud, il inonde
le r´eseau a` sa recherche. Le noeud ´emetteur envoie un Route Request (RREQ) en
broadcast autour de lui `a destination du noeud destinataire. Les noeuds qui re¸coivent
le RREQ, s’ils ne sont pas le noeud destinataire, vont `a leur tour envoyer `a tout
le monde autour d’eux ce RREQ. Si un noeud re¸coit plusieurs fois un RREQ pour
une mˆeme destination, il va analyser la m´etrique de chaque RREQ et choisir comme
route par d´efaut le noeud qui lui a fourni la m´etrique la plus petite (algorithme de
Bellman-Ford). Cependant, chaque noeud retient quand mˆeme une entr´ee pour la
source du paquet re¸cu.
Une fois que le message est arriv´e a` destination. Le noeud concern´e renvoie un
Route Reply (RREP) a` destination du noeud ´emetteur, en passant par le chemin
´etabli lors du RREQ.
Ce protocole est tr`es coˆ
uteux, car il ´emet toujours des broadcasts pour trouver
une route. Cependant, il fonctionne bien pour des r´eseaux avec peu de destinations
ou beaucoup mais qui bougent peu. En effet, un chemin bi-directionnel, `a direction de
tous les noeuds du r´eseau, n’est ´etabli que s’il y a du trafic. La route ainsi d´ecouverte
est maintenue tant qu’il y a des donn´ees envoy´ees par celle-ci. Un contrˆole du trafic
permet de r´eparer l’arbre seulement quand une nouvelle route est n´ecessaire ou
quand une route est perdue. Il n’y a donc pas besoin d’envois p´eriodiques.
Pour un DODAG, nous n’avons pas besoin de ce protocole pour communiquer
7
Chapitre 3. LOADng
8
d’un noeud jusqu’au puits. Cependant, pour communiquer du puits a` un noeud
de l’arbre cette solution, bien que tr`es gourmande, est n´ecessaire, comme il est
impossible de stocker toutes les entr´ees dans chaque noeud.
16 mai 2015
Chapitre 4
TORA
Nous allons maintenant voir comment fonctionne TORA et ses limites. Ce protocole, `a l’instar de RPL, cherche a` former un DODAG.
4.1
Cr´
eation de l’arbre
Un noeud, nouveau dans le r´eseau, doit ´emettre un paquet Query (QRY) en
broadcast, pour signaler aux noeuds voisins qu’il cherche a` se joindre au DODAG.
Les noeuds autour propagent le QRY, s’ils ne font pas partie du DODAG eux-aussi.
Une fois qu’un noeud qui fait partie du DODAG re¸coit un QRY, il r´epond au
noeud qui l’a sollicit´e avec un Update (UPD). Ce paquet contient la distance du
paquet ´emetteur au puits. Ainsi, si un noeud re¸coit plusieurs UPD, il peut, comme
pour l’algorithme de Bellman-Ford, changer de noeud pr´ed´ecesseur pour optimiser
sa route jusqu’au puits.
Apr`es avoir mis a` jour ses informations de routages et sa distance jusqu’au puits,
ce noeud renvoie un UPD en r´eponse au QRY qu’il avait re¸cu. Ainsi de suite, jusqu’au
noeud qui avait fait la requˆete de QRY en premier.
4.2
R´
eparation de l’arbre
La partie la plus importante de ce protocole, pour nous, est la r´eparation des
liens cass´es.
9
4.3. Bilan
10
TORA distingue 3 cas de liens cass´es.
Le premier concerne les liens qui ne changent rien au graphe. En effet, si un lien
est cass´e, mais que le noeud qui n’a plus de successeur a un autre noeud parmi ses
successeurs possibles, alors il va se contenter de le prendre comme next hop.
Le deuxi`eme cas se produit quand un noeud n’a plus d’autres successeurs possibles comme next hop. Dans ce cas, le noeud va d´etecter qu’il n’a que des arˆetes
entrantes, ce qui n’est pas normal comme il n’est pas le puits. Il va donc inverser ses
arˆetes, mettre sa distance jusqu’au puits ´egale a` 0 et envoyer un UPD `a ses nouveaux
pr´ed´ecesseurs. Chaque pr´ed´ecesseur va en faire de mˆeme (sauf pour l’arˆete qui le lie
a` son ancien successeur) et d´ecr´ementer la distance re¸cue de son ancien successeur.
Ce processus va donc s’arrˆeter quand un noeud, dont l’arˆete aura ´et´e invers´ee, est
reli´e au DODAG, ce dernier ne va pas changer sa m´etrique.
Dans le troisi`eme cas, si un lien cass´e isole une partie du graphe (le graphe n’est
plus connexe), alors une boucle est d´etect´ee dans l’envoi des UPD (les arˆetes sont
invers´ees sans arrˆet). Le noeud qui se sera rendu compte du probl`eme (bit reflect),
va arrˆeter de chercher `a r´eparer le graphe, comme cela est impossible, et va envoyer
un paquet Clear (CLR), qui se propagera au reste du graphe connexe d´etach´e du
reste. Un paquet CLR a pour but de supprimer le noeud ´emetteur dans la table
des routages des noeuds le recevant. Le protocole ne se remet pas en route, a` moins
qu’un des noeuds isol´es ait besoin d’´emettre un paquet.
4.3
Bilan
Pour TORA, ce sont toujours les nouveaux noeuds qui sollicitent les autres
noeuds du DODAG pour le rejoindre. Contrairement `a RPL o`
u les nouveaux noeuds
peuvent ˆetre sollicit´es par des noeuds d´ej`a pr´esents dans le DODAG.
La r´eparation locale du DODAG est aussi tr`es int´eressante, car elle limite l’envoi
de broadcasts. Le seul probl`eme de ce protocole est qu’il ne fonctionne plus dans le
cas o`
u un UPD, envoy´e lors du renversement d’une arˆete, est perdu. Dans ce cas, les
deux noeuds vont se prendre mutuellement comme successeur et les paquets vont
boucler.
16 mai 2015
Chapitre 5
LRP
Pour finir, nous allons voir comment les pr´ec´edents algorithmes ont ´et´e repris
et combin´es pour donner le Lightweight Routing Protocol (LRP), sur lequel j’ai
travaill´e.
5.1
Fonctionnement normal
Pour commencer, voyons le d´eroulement normal du protocole, c’est-`a-dire qu’aucun lien ne casse.
5.1.1
Cr´
eation de l’arbre
D`es son arriv´ee, un noeud se comporte comme le protocole TORA le d´efinit, ou
encore RPL avec les DIS. Il va envoyer un paquet Query (QRY) en broadcast, pour
signaler aux noeuds autour de lui qu’il souhaite rejoindre le DODAG. Les noeuds a`
port´ee vont r´epondre avec un DIO, ce paquet contient des informations semblable
a` celles contenues dans un paquet DIO de RPL. Et de la mˆeme fa¸con que RPL, le
noeud recevant plusieurs DIO choisit l’ensemble des noeuds qui peuvent ˆetre son
next hop et les stocke, cela correspond `a l’algorithme de Bellman-Ford distribu´e. Et
au fur et a` mesure que les DIOs sont re¸cus, il met a` jour son next hop. Si un DIO
re¸cu l’informe que le noeud, qui le lui a envoy´e, est un meilleur next hop que le next
hop courant, alors c’est ce dernier qui va devenir son pr´ed´ecesseur pr´ef´er´e. A noter
qu’un noeud choisit parmi les DIO disponibles, ceux qui ont le mˆeme num´ero de
11
5.1. Fonctionnement normal
12
s´equence d’arbre que lui, un num´ero de s´equence de noeud sup´erieur au sien et, si
´egal, une meilleure m´etrique que la sienne ou un plus petit nombre de saut que le
sien pour finir.
Pour la mise `a jour de l’arbre, une fois la topologie ´etablie, chaque noeud envoie
de fa¸con p´eriodique un DIO, pour informer ses voisins d’un possible changement de
topologie.
5.1.2
Envoi et r´
eception d’un paquet
L’envoi vers le puits de paquet est identique a` RPL. Il suffit qu’un noeud envoie
son paquet a` son successeur, qui lui aussi l’enverra a` son successeur. Ainsi de suite,
le paquet arrivera au puits.
Concernant l’envoi de paquet du puits a` un autre noeud, nous diff´erencions deux
cas.
Le premier cas se r´ealise quand le puits cherche a` envoyer un paquet `a un autre
noeud qui ne lui avait pas envoy´e de message auparavant. A ce moment, le protocole
se comporte comme LOADng, un message de Route Request (RREQ) inonde tout
l’arbre `a la recherche de la destination. D`es que la cible est atteinte, elle r´epond
avec un Route Reply et tous les noeuds en chemin mettent `a jour leur table de
routage pour se rappeler du chemin `a suivre pour atteindre la destination, que le
puits veut joindre. Une fois la route ´etablie, le puits renvoie un RACK pour acquitter
la r´eception du RREP.
Dans le deuxi`eme cas, un noeud peut envoyer des paquets `a destination du puits
sans que cela ne lui ait ´et´e demand´e. Avant de commencer a` transmettre, il envoie
un RREP `a destination du puits. C’est ce RREP qui permet aux noeuds en chemin
de savoir qu’ils doivent se rappeler du chemin vers le noeud source du trafic, en cas
de r´eponse. Ensuite, l’envoi se passe comme vu pr´ec´edemment, de pr´ed´ecesseur en
successeur . Ainsi, si le puits doit r´epondre a` ce paquet, il sait par o`
u passer et il n’y
a pas plus de travail. A savoir que comme pour RPL si l’entr´ee est ´ecras´ee, alors le
message ne sera pas d´elivr´e `a son destinataire. Dans ce cas le noeud interm´ediaire,
qui ne contient plus l’entr´ee dans sa table de routage et qui ne sait donc pas quoi
faire du paquet, va renvoyer un paquet RERR pour informer de l’´echec de l’envoi.
16 mai 2015
5.2. Correction d’un lien
13
Un paquet peut aussi ˆetre perdu, si l’arbre a chang´e de topologie, c’est-`a-dire que le
noeud s’est rattach´e ailleurs et n’est plus atteignable par son ancien successeur.
5.2
Correction d’un lien
Mon travail au laboratoire ´etait concentr´e sur ce point du protocole. Apr`es que
plusieurs liens de l’arbre aient cass´es, la r´eparation est-elle performante ? L’indice
de performance ´etudi´e ici est le nombre d’inversions produites.
5.2.1
Fonctionnement
La r´eparation est en deux phases QRY puis BRK. D’abord le noeud essaye de
trouver un nouveau successeur `a qui se relier, sinon il demande a` ses pr´ed´ecesseurs
de trouver un chemin.
Lorsqu’un noeud perd le lien qu’il a avec son successeur, il envoie en broadcast
un paquet QRY. Si parmi les DIOs re¸cus, une r´eponse vient d’un noeud avec un
num´ero de s´equence sup´erieur ou ´egal au sien, alors il le prend comme successeur
automatiquement.
Cependant, il n’y a pas forc´ement un autre noeud qui n’est pas potentiellement
son successeur, c’est-`a-dire qu’il ignore l’identit´e des noeuds de son sous-arbre. Apr`es
un certaine dur´ee, si aucun DIO ne lui convient, il envoie en broadcast, un message
Break (BRK), qui sera trait´e diff´eremment selon si le r´ecepteur est un successeur
de l’´emetteur ou non. Le message BRK permet d’informer les pr´ed´ecesseurs d’un
noeud qu’il ne trouve pas de chemin jusqu’au puits. Ainsi, chaque pr´ed´ecesseur
envoie en broadcast un BRK. Quand un noeud re¸coit un BRK qui ne vient pas de
son successeur, il le place dans son cache. A la r´eception d’un autre BRK qui a une
meilleure m´etrique ou un plus petit nombre de sauts (jusqu’au noeud d´econnect´e),
il remplace le BRK en cache par celui qu’il vient de recevoir.
Apr`es la r´eception d’un BRK qui ne vient pas de son successeur, un noeud va
envoyer, en direction du puits, le BRK qu’il a re¸cu. En effet, s’il ne vient pas de son
successeur, il va donc consid´erer que le BRK provient d’un noeud faisant partie du
sous-arbre d´etach´e et va donc essayer qu’il se rattache a` lui. Une fois que le puits
16 mai 2015
5.2. Correction d’un lien
14
l’a re¸cu, il r´epond en unicast (puisque tous les noeuds ont dans leur cache le BRK
qui rappelle le chemin `a suivre). Le puits r´epond avec un message Update (UPD),
qui incr´emente le num´ero de s´equence de chaque noeud en chemin. Cela permet
d’´eviter les boucles, de prendre un noeud qui se trouverait dans le sous-arbre comme
successeur.
Quand un noeud se rend compte que le UPD qu’il a re¸cu ne vient pas de son
pr´ed´ecesseur, il doit inverser son arˆete, car un plus court chemin jusqu’au puits vient
d’ˆetre trouv´e par un de ses pr´ed´ecesseurs. Pour cela, comme un noeud ne connaˆıt
pas ses pr´ed´ecesseurs, il lui suffit juste de changer de successeur apr`es avoir transmis
le UPD a` son ancien successeur, si ce n’est pas lui qui a propag´e le premier BRK.
5.2.2
Simulations – R´
esultat de mon travail
Mon travail a donc consist´e `a reprendre un programme ´ecrit en python par
Martin Heusse. Ce programme simulait le protocole de r´eparation locale d´ecrit cidessus et affichait les arbres avant et apr`es correction en utilisant igraph. Son objectif
est d’observer le fonctionnement de l’algorithme de r´eparation, principalement le
nombre d’inversions produites. Je n’ai que l´eg`erement modifi´e le code qui s’occupe
de cette partie.
Ce que j’ai mis au point, c’est tout le code de contrˆole, qui v´erifie que les arbre
form´es initialement et apr`es correction sont valides. Puis, sous forme de test unitaire,
qui fait varier les param`etres de la simulation, sauvegarde les arbres sous forme de
sch´ema et le bilan du test (principalement le nombre d’inversions).
Fonctionnement d’une simulation
Pour simuler l’algorithme de r´eparation locale de LRP, quelques simplifications
ont ´et´e r´ealis´ees. Il faut savoir que le syst`eme n’est pas simul´e dans son ensemble.
Par exemple, toute la gestion de tampons, de collisions de paquets... ne sont pas pris
en compte. L’envoi d’un paquet est r´ealis´e par l’ajout dans une liste d’une structure
repr´esentant un paquet. L’envoi est donc imm´ediat et sans perte. Il est important
de garder ces simplifications en m´emoire, car elles ne sont pas analys´es dans ce
rapport. Mon travail n’est qu’une preuve de concept, un premier jet, ayant pour but
16 mai 2015
5.2. Correction d’un lien
15
de voir si le principe de base de l’algorithme de r´eparation locale fonctionne dans
un environnement simplifi´e.
Voici les diff´erentes ´etapes d’une simulation :
1 - Tout d’abord, pour g´en´erer un arbre, il faut choisir (dans le code) un nombre
de noeuds initial, un rayon (port´ee des capteurs), une profondeur maximale pour les
noeuds et un nombre de noeuds a` supprimer.
2 - Une fois ces param`etres choisis, l’algorithme de Bellman-Ford est appliqu´e
une premi`ere fois pour cr´eer un arbre de collecte en direction d’un noeud.
3 - Un certains nombre de noeuds sont supprim´es de l’arbre, ce qui a pour
cons´equence d’isoler une ou plusieurs parties de l’arbre, qui n’est plus reli´e au puits.
4 - Finalement, l’algorithme d´ecrit dans la section pr´ec´edente est appliqu´e (envois
de paquets, r´eparation des liens...).
Cependant, a` chacune de ces ´etapes, comme les points sont plac´es al´eatoirement,
il est possible que des arbres ind´esirables soient g´en´er´es.
Validation d’un arbre g´
en´
er´
e
Tout au long de la simulation, diff´erents tests permettent d’arrˆeter la simulation
si l’arbre n’est pas satisfaisant. Ainsi, les tests unitaires tournent en boucle jusqu’`a
r´ealiser un nombre de simulation fix´e. D`es qu’un cas ind´esirable se produit, le programme de simulation va compter le nombre de fois que cette erreur se produit sur
un ensemble de simulations. Cela permet d’avoir un retour du le nombre d’erreurs
qui se sont produites sur l’ensemble des arbres g´en´er´es.
Un arbre est rejet´e s’il est :
— d´eg´en´er´e : l’arbre a` sa cr´eation n’est pas connexe ou est toujours connexe
apr`es suppression de certains noeuds ;
— trop profond : si un graphe d´epasse la profondeur maximale ;
— compos´e seulement de feuilles : apr`es suppression des noeuds, tous les noeuds
d´econnect´es sont des feuilles, cela ne peut donc pas produire d’inversions ;
— un ´echec : arbres dont aucune partie d´econnect´ee n’a pu ˆetre rattach´ee au
reste de l’arbre ;
Par exemple, voici la sortie d’une simulation de 1000 graphes :
16 mai 2015
5.2. Correction d’un lien
16
Time : 326.460144997
+Graphs : 15816
-Degenerates : 11422
-Only leafs : 3384
-Depth too high : 0
-Failures : 10
=Success : 1000
+Initial size : 40
-Nodes off : 3
=Real size : 37
Method radius : Distance between the two nodes lower than the radius.
Radius : 0.75
Inversions : 19
0 Inversion(s) : 983
1 Inversion(s) : 15
2 Inversion(s) : 2
Maximal depth : 8
Number of graph disconnected : 7
AVG degree : 10.163
16 mai 2015
5.2. Correction d’un lien
17
Analyse des simulations
Grˆace `a un test r´ealis´e en python, j’ai fait varier les param`etres du nombre de
noeuds, leurs rayons et la profondeur maximale. Le rayon a ´et´e vari´e de 0.5 `a 0.85
par pas de 0.5, le nombre de noeuds a pris les valeurs 20, 30 et 40, un nombre
constant de noeuds a ´et´e supprim´e (3) et la profondeur a pris les valeurs 4, 8 et 12.
Nous allons maintenant nous int´eresser `a ces r´esultats.
Pour commencer, dans 5.4 nous avons repr´esent´e le nombre moyen d’inversions
par graphe en fonction du rayon pour 17 (20 - 3 enlev´es), 27(30-3) et 37(40-3) noeuds.
Figure 5.1 – 17 Noeuds
Figure 5.2 – 27 Noeuds
Figure 5.3 – 37 Noeuds
Figure 5.4 – Nombre moyen d’inversions par graphe en fonction du rayon
Sur ces graphique 5.4, nous remarquons, qu’`a part les premi`eres valeurs du rayon
pour 17 noeuds, le nombre d’inversions par graphe d´ecroˆıt de fa¸con presque exponentielle plus le graphe est dense (nombre de noeuds et rayon grands).
Ce r´esultat s’explique par le fait que plus un graphe sera dense, plus les noeuds
auront la possibilit´e de se rattacher a` un autre noeud, qui a un rang inf´erieur au
´egal a` son ancien successeur. Il n’aura donc pas besoin de faire de BRK et donc il
n’y aura pas d’inversions.
Figure 5.5 – 17 Noeuds
Figure 5.6 – 27 Noeuds
Figure 5.7 – 37 Noeuds
Figure 5.8 – Nombre d’inversions en fonction du rayon
16 mai 2015
5.2. Correction d’un lien
18
Ces graphiques 5.8 mettent en ´evidence la forte majorit´e de graphes n’ayant
qu’une ou deux inversions. Cela est plutˆot encourageant quant a` l’efficacit´e de la
r´eparation locale de LRP. Cependant, cela ´etait pr´evisible. Dans la plus grande
partie des graphes g´en´er´es, les noeuds sont assez r´epartis dans l’espace 5.9. De cette
fa¸con, il est plus probable pour eux de trouver un autre chemin en 1 ou 2 inversion.
2
2
4
4
9
9
0
6
0
6
14
14
3
3
1
1
8
11
10
13
8
11
12
10
7
13
12
7
5
5
Figure 5.9 – Exemple d’un arbre r´epar´e
Nous remarquons sur cet exemple, figure 5.9, que l’arbre est d´ej`a tr`es favorable
au retournement d’arˆetes. Cependant, mˆeme dans ce cas il y a seulement deux
inversions. Sur les tests r´ealis´es, il y a tr`es peu de 4 ou 5 inversions, le r´eseau n’est
pas assez grand pour cela. Il faudrait r´ealiser des tests sur de plus grands nombres
de capteurs, avec un r´eseau moins dense (faible rayon ou plus grande surface). De
fa¸con, a` cr´eer des chaˆınes plus longues. Il faudra quand mˆeme s’assurer que ce n’est
pas trop exag´er´e, car en pratique les r´eseaux de capteurs ne sont pas toujours tr`es
grands, cela d´epend du r´eseau encore une fois.
Une limite de la simulation est la topologie des arbres. Les points sont toujours
plac´es de fa¸con al´eatoires. Or sur certaines topologies, nous pourrions remarquer un
grands nombre d’inversions et donc mettre en avant, ce qui pourrait ˆetre une limite
du protocole. Comme par exemple, une topologie sous forme de lignes parall`eles
(comme de longs couloirs qui ne se rejoignent que rarement. Lors de la perte d’un
lien dans un couloir, toutes les arˆetes s’inverseraient.
16 mai 2015
Chapitre 6
Conclusion
D’apr`es les r´esultats obtenus, le protocole LRP ne g´en`ere pas beaucoup d’inversions sur des graphes ayant la forme d’une ´etoile. Nous pouvons nous interroger sur
les r´esultats qu’il fournira sur certaines topologies (comme pour des benchmarks, des
topologies de r´eseau dans un immeuble...).
La r´eparation locale permet de ne g´en´erer que peu de trafic compar´e a` une
r´eparation globale de tout l’arbre. Seulement le sous-arbre d´econnect´e g´en`ere du
trafic en broadcast. Cela permet d’´economiser la batterie des noeuds qui n’ont pas
besoin de r´eparation. La propagation du BRK et sa r´eponse UPD ´etant en unicast,
le coup des communications que le sous-arbre fait supporter au reste est donc tr`es
faible.
Un autre point qu’il faudra prendre en compte, pour des simulations r´eelles (ce
sur quoi travaille Henry-Joseph Aud´eoud), est le nombre d’inversions au cours du
temps. Les simulations, r´ealis´ees durant mon IRL, ne suppriment que 3 noeuds, que
ce passe-t-il au bout d’un certains temps lorsque l’arbre subit plusieurs r´eparations ?
Une proposition des personnes qui travaillent dessus est de r´ealiser une r´eparation
globale avec une certaine fr´equence pour corriger certaines incoh´erences qui pourraient survenir (comme trickle).
Ayant travaill´e dessus durant mon IRL, je me suis rendu compte qu’il est tr`es difficile d’´evaluer l’efficacit´e d’un protocole en r´eseau. Beaucoup de param`etres entrent
en compte, comme le nombre de capteurs, leurs port´ees, la perte de paquets, la
topologie du r´eseau... Cependant, nous pouvons estimer que LRP a montr´e pour
19
Chapitre 6. Conclusion
20
l’instant de bon r´esultat concernant sa m´ethode de r´eparation locale.
16 mai 2015
Bibliographie
[1] T. Winter, P. Thubert, A. Brandt, J. Hui, R. Kelsey, P. Levis, K. Pister,
R. Struik, J-P. Vasseur, et R. Alexander, RPL : IPv6 Routing Protocol for
Low-Power and Lossy Networks, RFC 6550 (Proposed Standard), Internet
Engineering Task Force, Mar. 2012. [Online].
Disponible : https://tools.ietf.org/html/rfc6550
[2] Vincent D. Park and M. Scott Corson (1997), A Highly Adaptive Distributed
Routing Algorithm for Mobile Wireless Networks
[3] T. Clausen. (2013) The Lightweight On-demand Ad hoc Distance-vector Routing Protocol - Next Generation (LOADng). Internet draft.
[4] Fabrice Th´eoleyre (2014), it The Lightweight On-demand Ad hoc Distancevector Routing Protocol - Next Generation (LOADng)
[5] Martin Heusse, Henry-Joseph Aud´eoud (2015), The Lightweight Routing Protocol
[6] A. Dunkels (2011), The contikimac radio duty cycling protocol, Technical Report 5128, Swedish Institute of Computer Science.
21