Protocole de routage

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.

Broadcast → Tous les voisins → Re-broadcast → Cible

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.

Message ID : 0x4A3F2B → Déjà vu → Ignoré

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

64

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.

flood.max

Sauts maximum

Nombre maximal configurable de sauts. Plus de sauts = plus de portée mais latence accrue et davantage de trafic réseau.

RF terrein

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.