Algorithmes de routage MeshCore
Découvrez comment les messages MeshCore trouvent automatiquement la meilleure route à travers le réseau mesh. Explication technique du flooding, hop limiting et route discovery.
Comment un message trouve-t-il son chemin dans le réseau mesh ?
Dans un réseau mesh, il n'y a pas de routeur central qui dicte la route d'un message. MeshCore utilise à la place des algorithmes de routage intelligents qui permettent aux messages de trouver automatiquement la route la plus efficace vers leur destination.
Le protocole de routage MeshCore repose sur le flooding avec optimisations. Les messages sont diffusés dans plusieurs directions, mais avec des mécanismes astucieux pour éviter la congestion réseau et économiser la batterie.
Ce guide technique explique comment fonctionne l'algorithme de routage MeshCore, quelles optimisations sont appliquées et comment configurer le routage pour votre cas d'utilisation spécifique.
Mécanismes de base du protocole de routage
MeshCore repose sur quatre mécanismes fondamentaux pour le routage :
Routage par inondation (flood routing)
Le premier envoi peut utiliser un flood discovery via répéteurs. Ensuite, MeshCore peut utiliser un chemin appris pour le trafic suivant.
Détection de doublons
Chaque message possède un identifiant unique. Les nœuds mémorisent les messages récemment reçus et ignorent les doublons pour éviter les boucles infinies.
Limitation du nombre de sauts
Le contrôle des sauts limite la propagation non maîtrisée. MeshCore indique un plafond protocolaire élevé (jusqu'à 64), et le comportement pratique se règle sur les répéteurs (ex. flood.max).
Évaluation de la puissance du signal
Les nœuds évaluent la puissance du signal (RSSI) des messages entrants. Les signaux faibles sont retransmis avec une priorité plus basse pour améliorer l'efficacité du réseau.
Comment fonctionne le routage par inondation
L'algorithme de flooding est au cœur du routage MeshCore. Voici son fonctionnement étape par étape :
Étape 1 : Le message est envoyé
Le nœud A envoie un message vers une destination sans chemin connu. Le paquet est émis via LoRa.
Étape 2 : Premier saut - les voisins reçoivent
Les nœuds B, C et D reçoivent le message. Ils vérifient : « Ai-je déjà vu ce message ? » Si oui → ignorer. Si non → stocker dans le cache des messages récents et retransmettre. Le compteur passe à 1.
Étape 3 : Deuxième saut - propagation
Les nœuds E, F, G reçoivent le message de B, C, D. Ils effectuent la même vérification. Certains nœuds peuvent recevoir des doublons de différents voisins – ceux-ci sont ignorés. Le compteur passe à 2.
Étape 4 : Destination atteinte ou max de sauts
Après livraison, les messages suivants peuvent passer par le chemin appris, ce qui réduit la propagation inutile.
Optimisations du flooding
Pour éviter la surcharge réseau, MeshCore applique ces optimisations :
- • Déduplication des messages : Les messages déjà vus ne sont pas retransmis, même s'ils arrivent par une autre route.
- • ACK implicite : Si un nœud entend son voisin retransmettre le message, il sait que la transmission a réussi.
- • Délai aléatoire : Les nœuds attendent un court délai aléatoire avant de retransmettre pour éviter les tempêtes de collisions.
- • Priorisation par RSSI : Les nœuds avec un signal plus fort sont prioritaires pour la retransmission.
Mécanisme de limitation des sauts
Sauts par défaut
Nombre maximal de sauts par défaut dans la configuration MeshCore. Adapté aux réseaux locaux de 3-5 km de portée.
Sauts maximum
Nombre maximal configurable de sauts. Plus de sauts = plus de portée mais latence accrue et davantage de trafic réseau.
Portée par saut
La portée par saut dépend du terrain, des antennes, du bruit RF et du placement des répéteurs.
Comment fonctionne le comptage des sauts
Chaque paquet contient un champ hop_limit dans l'en-tête. Chaque nœud qui retransmet le paquet incrémente le compteur de sauts de 1 :
Message envoyé : hop_count = 0 Premier relais : hop_count = 1 Deuxième relais : hop_count = 2 Troisième relais : hop_count = 3 → Maximum atteint, arrêt de la retransmission
Cela évite que les messages circulent indéfiniment dans le réseau et économise la précieuse énergie de batterie et l'airtime.
Atouts du routage MeshCore
Auto-organisé
Aucune configuration nécessaire. Les nœuds trouvent automatiquement les meilleures routes sans pilotage central.
Économe en énergie
Des optimisations intelligentes font que seuls les nœuds nécessaires retransmettent les messages, économisant la batterie.
Résistant aux pannes
Si une route tombe, les messages trouvent automatiquement un chemin alternatif à travers le réseau.
Portée évolutive
En ajoutant des nœuds, la portée augmente exponentiellement sans configuration supplémentaire.
Protocole simple
Le protocole basé sur le flooding est simple à implémenter et à déboguer comparé aux tables de routage complexes.
Aucun point unique de défaillance
Pas de routeur central signifie qu'aucun point unique ne peut faire tomber l'ensemble du réseau.
Exemples de configuration du routage
Vous pouvez ajuster le comportement du routage via la CLI MeshCore ou l'API Python :
CLI : Configurer la limite de sauts
Augmentez la limite de sauts pour une portée accrue (attention : plus de consommation batterie et de latence) :
meshcore --set router.hop_limit 5 meshcore --set router.rebroadcast_mode ALL_SKIP_DECODING
API Python : Configuration du routage
Configurez le routage via Python pour des déploiements automatisés :
import meshcore
interface = meshcore.SerialInterface()
node = interface.getNode("^local")
# Définir les paramètres de routage
node.router.hop_limit = 4
node.router.rebroadcast_mode = meshcore.Router.ALL_SKIP_DECODING
node.writeConfig()
Avancé : Seuil RSSI
Définissez un RSSI minimum pour la retransmission afin d'ignorer les liaisons faibles :
meshcore --set router.rebroadcast_min_rssi -120 # -120 dBm = signal très faible # -100 dBm = signal moyen (recommandé) # -80 dBm = signal fort
Questions fréquentes sur le routage
Pourquoi MeshCore préfère-t-il le flooding au routage par tables ?
Le flooding est bien plus simple et robuste dans les réseaux mobiles où les nœuds s'allument et s'éteignent constamment. Le routage par tables nécessite la découverte de routes et la maintenance de tables de routage, ce qui est complexe et énergivore pour les appareils LoRa.
Que se passe-t-il si deux nœuds retransmettent en même temps ?
MeshCore utilise des délais de backoff aléatoires pour minimiser les collisions. Si une collision survient malgré tout, d'autres nœuds du réseau retransmettent le message avec succès grâce au principe de flooding.
Peut-on définir des limites de sauts différentes par type de message ?
Oui, via la configuration du routage, vous pouvez définir des limites de sauts distinctes pour les mises à jour de position, les messages texte et la télémétrie. Vous optimisez ainsi le trafic réseau par type de message.
Comment MeshCore évite-t-il les boucles de routage ?
Par une combinaison de limitation des sauts et de déduplication des messages. Chaque nœud mémorise les identifiants de messages récents et ne retransmet pas les doublons, même s'ils arrivent par une autre route.
Quelle latence faut-il attendre ?
La latence dépend des conditions RF, du spreading factor, de la charge réseau et des réglages des répéteurs. Le meilleur indicateur reste la mesure terrain.
Peut-on désactiver le routage pour mon nœud ?
Oui, vous pouvez désactiver le routage en configurant rebroadcast_mode sur « NONE ». Votre nœud recevra toujours les messages mais ne les retransmettra pas. Pratique pour les appareils mobiles afin d'économiser la batterie.
Lancez-vous dans le développement du routage MeshCore
L'algorithme de routage MeshCore offre une méthode robuste et économe en énergie pour acheminer les messages sans infrastructure centrale. Idéal pour les communications d'urgence et les réseaux hors réseau.