2. Introduction
Une seule carte radio est composé de deux
interfaces TX et RX travaillant en alternance
o À l’instant T :
o À l’instant T + ∆T :
Communication entre deux cartes radios :
o À l’instant T :
o À l’instant T + ∆T :
Dés connectées, les deux cartes sont synchrones
TX RX
Carte radio
RX TX
Carte radio
TX RX
Carte radio
TX RX
Carte radio
Sens de transfert (upstream)
RX TX
Carte radio
RX TX
Carte radio
Sens de transfert (downstream)
3. Xtremesh
Xtremesh est basé sur trois composants :
• Carte mère exécutant OpenWRT :
• Deux cartes radios liées à la carte mère :
• Ensemble, ils forment un nœud avec quatre interfaces radio :
TX
RX
RX
TX
TX
RX TX
RX
Carte
mère
4. Problématique :
Développer un algorithme permettant de
joindre tous les nœuds ensemble, cette
algorithme doit assurer :
• Tous les nœuds dans la portée du réseau
doivent être connectés .
• Etablissement d’un schéma d'adressage des
nœuds .
• Etablissement des voies alternatifs en cas de
défaillance ou déconnexion .
• Reconnecter aux nœuds perdus dès qu'ils
sont à nouveau détectés .
• Etc.
Ceci doit se faire tout en considérant la
contrainte de synchronisation entre les
cartes radio .
TX
RX TX
RX
TX
RX TX
RX
TX
RX TX
RX
TX
RX TX
RX
Connection impossible
5. Fruitymesh
Offre une solution pour construire un graphe qui se base
uniquement sur la connaissance des nœuds environnants.
Permet un maillage automatique fonctionnel et construit
un arbre couvrant tous les nœuds accessibles.
Autoréparation en cas de perte ou défaillance d’un nœud.
Peut être optimisé, configuré pour plusieurs cas
d'utilisation.
6. Initialisation du nœud
Chaque nœud possède quatre interfaces (1 entrée
+ 3 sortie), une connexion est toujours établie
entre une interface de sortie et une interface
d’entrée.
Chaque nœud doit avoir un NODE ID et un
NETWORK ID qui permet à différents réseaux de coexister
dans le même espace.
Après démarrage chaque nœud génère un
CLUSTER ID avec un taille de cluster égale à 1.
7. Phase de découverte
Chaque nœud diffuse son NODE ID, NETWORK ID,
CLUSTER ID et la taille de la cluster dans un paquet
JOIN_ME. Le paquet doit être connectable si l’interface
l’interface d’entrée est encore libre, sinon il est non
connectable.
Chaque nœud collecte les paquets JOIN_ME diffusés par
les nœuds environnants qui seront utilisés
ultérieurement pour déterminer les meilleurs candidats
pour établir une connexion.
8. Établissement des connections
Chaque nœud calcul le score de chacun de
ces voisins en se basant sur quelques
caractéristiques (RSSI, taille de cluster,
CLUSTER ID, etc.).
Les nœuds qui appartiennent aux clusters
les plus grands peuvent toujours décider
quelles connexions sont établies et ainsi
dissoudre les clusters plus petits.
L’algorithme empêche la formation des
boucles, il n'y a donc pas de problème liée
à la synchronisation .
9. Résultat
la plupart des réseaux semblent
aléatoires au début, mais une fois
qu'un grand cluster est établi, il
commence à dissoudre les plus petits
clusters.
10. Auto-réparation
Une fois qu'un nœud est déconnecté, les
nœuds à gauche s'arrangent pour rejoindre le
cluster via un chemin différent.
Si un nœud précédemment déconnecté est
détecté, il est reconnecté au cluster, mais il
est gardé sur le bord. Cela se traduit par la
séparation des nœuds défaillants du cœur du
réseau et améliore donc la stabilité.
11. Un Plus
Code source disponible sur GitHub .
Code optimisé et de petite taille .
Simulation et développement rapide avec
CherrySim .