Deep Dive — Jede Schicht erklärt

Wie System 5 funktioniert

Eine vollständige technische Erklärung von MeshRoutes geo-geclustertem, Multi-Pfad, lastverteiltem Routing-Protokoll — vom Start bis zur Zustellung.

Das große Bild

Jedes Routing-Protokoll beantwortet eine Frage: Wenn Knoten A eine Nachricht an Knoten Z senden will, welche Zwischenknoten sollen sie weiterleiten?

Das aktuelle Meshtastic verwendet Managed Flooding: Jeder Knoten sendet jede Nachricht weiter, in der Hoffnung, dass sie das Ziel erreicht. Das funktioniert für kleine Netzwerke, erzeugt aber eine Bandbreitenexplosion bei Skalierung — 100 Knoten bedeuten ~100 Übertragungen pro Nachricht.

System 5 verfolgt einen grundlegend anderen Ansatz: Knoten organisieren sich selbst in geografische Cluster, entdecken Multi-Hop-Routen und senden jede Nachricht über einen spezifisch berechneten Pfad. Die Kosten pro Nachricht sind proportional zur Anzahl der Hops, nicht zur Anzahl der Knoten.

Managed Flooding (Meshtastic heute) A sendet → jeder Knoten sendet weiter → Z empfängt (irgendwann) Kosten: O(n) Übertragungen pro Nachricht — skaliert mit Netzwerkgröße System 5 (MeshRoute-Vorschlag) A sendet → B → D → G → Z (berechneter Pfad) Kosten: O(Hops) Übertragungen pro Nachricht — skaliert mit Entfernung, nicht Größe

Die folgenden Abschnitte erklären jeden Schritt im Detail.

Schritt 1: Start — Was passiert, wenn ein Knoten eingeschaltet wird

Wenn ein System 5-Knoten hochfährt, weiß er noch nichts über das Netzwerk. Hier ist die genaue Abfolge:

  1. Hardware-Initialisierung: Das LoRa-Funkmodul beginnt auf der konfigurierten Frequenz zu lauschen (EU 868MHz). Das GPS-Modul beginnt mit der Satellitenerfassung (falls vorhanden).
  2. Positionsbestimmung: Der Knoten versucht drei Methoden in dieser Reihenfolge:
    • Echtes GPS — beste Option, genau auf ~5m (T-Beam, RAK4631 mit GPS-Modul)
    • RSSI-Triangulation — falls kein GPS, aber 3+ Nachbarn mit bekannten Positionen, wird die Position aus der Signalstärke geschätzt
    • Cluster-Übernahme — falls beides nicht funktioniert, wird die Cluster-ID des stärksten Nachbarn übernommen
  3. Geohash-Berechnung: GPS-Koordinaten werden in einen Geohash-String umgewandelt (z.B. "u33d"). Die ersten 4 Zeichen definieren den Cluster des Knotens. Knoten mit dem gleichen 4-Zeichen-Präfix befinden sich im selben Cluster.
  4. OGM-Broadcast: Der Knoten sendet seine erste Originator Message (OGM) — ein kleines Paket das verkündet: „Ich existiere, hier sind meine Position, mein Batteriestand und meine Cluster-ID."
Was ist ein Geohash?

Ein Geohash kodiert eine GPS-Koordinate in einen String, bei dem gemeinsame Präfixe geografische Nähe bedeuten. Zwei Knoten mit Geohash "u33d8" und "u33d9" teilen das Präfix "u33d" — sie sind im selben Cluster. Ein Knoten mit "u33e1" ist in einem benachbarten Cluster. Bei 4-Zeichen-Genauigkeit deckt jeder Cluster ungefähr 40km × 20km ab.

Schritt 2: Nachbarerkennung via OGM

Alle 30 Sekunden sendet jeder Knoten eine OGM (Originator Message). Das ist ein kompaktes Paket (~20 Bytes) mit folgendem Inhalt:

FeldGrößeZweck
Node ID4 BytesEindeutige Kennung (abgeleitet von der Hardware-MAC)
Position8 BytesBreitengrad + Längengrad (oder Cluster-ID falls kein GPS)
Batterie1 ByteAktueller Ladestand (0–100%)
Cluster-ID4 BytesGeohash-Präfix des Clusters dieses Knotens
Nachbaranzahl1 ByteWie viele Nachbarn dieser Knoten aktuell hat
NHS1 ByteNetwork Health Score des Clusters dieses Knotens

Wenn ein Knoten eine OGM empfängt, geschieht Folgendes:

  1. RSSI/SNR messen des empfangenen Signals → bestimmt die Verbindungsqualität zum Sender
  2. Sender in die Nachbartabelle eintragen/aktualisieren (max. 16 Nachbarn pro Knoten)
  3. Cluster-ID vermerken — falls der Sender in einem anderen Cluster ist, könnte dieser Knoten ein Border Node sein
Warum maximal 16 Nachbarn?

Speicherbeschränkung. Jeder Nachbareintrag kostet ~80 Bytes. Auf nRF52-Geräten mit 256KB RAM bedeuten 16 Nachbarn × 80 Bytes = 1.280 Bytes — leistbar. Falls ein Knoten mehr als 16 Nachbarn hört, wird der mit der niedrigsten Verbindungsqualität entfernt. Das ist unproblematisch, da das Routing nur die besten Nachbarn braucht, nicht alle.

Verbindungsqualität ist asymmetrisch

Ein kritisches Detail: Die Verbindung von A→B kann eine andere Qualität haben als B→A. Ein Berggipfel-Knoten mit freier Sichtlinie sendet möglicherweise mit Qualität 0,95 zum Talknoten, aber der Talknoten (umgeben von Gebäuden) kann nur mit Qualität 0,3 zurücksenden. System 5 verfolgt beide Richtungen unabhängig.

Berggipfel (600m, Freiraum) ——— Qualität 0,95 ———→ Tal (50m, urban) Berggipfel ←—— Qualität 0,30 —————— Tal System 5 kennt beide Werte. Beim Routing ZUM Tal wird die 0,95-Verbindung genutzt. Beim Routing VOM Tal wird ein anderer Pfad gefunden (vielleicht über einen Hügelknoten).

Schritt 3: Geo-Clustering — Selbstorganisierende Geografie

Nach einigen OGM-Runden (~1–2 Minuten) haben die Knoten ihre Nachbarn entdeckt. Nun organisiert sich das Netzwerk selbst in geografische Cluster.

Wie Clustering funktioniert

Es gibt keinen zentralen Koordinator. Jeder Knoten handelt unabhängig:

  1. Berechnet seinen Geohash aus seiner GPS-Position
  2. Nimmt die ersten 4 Zeichen als seine Cluster-ID
  3. Knoten mit dem gleichen 4-Zeichen-Präfix sind automatisch im selben Cluster

Das ist komplett dezentral — kein Knoten muss das gesamte Netzwerk „kennen". Wenn ein neuer Knoten in München eingeschaltet wird, berechnet er seinen Geohash ("u281") und ist automatisch Teil des München-Clusters. Er braucht keine Genehmigung und keine Koordination.

Border Nodes — Die Brücken zwischen Clustern

Ein Border Node ist jeder Knoten, der Nachbarn in einem anderen Cluster hat. Border Nodes sind entscheidend — sie sind die Brücken für das clusterübergreifende Routing.

Cluster "u33d" Cluster "u33e" ┌──────────────┐ ┌──────────────┐ │ A B C │ │ F G H │ │ D │ │ I │ │ [E] ─┼── Link ──┼─ [J] │ └──────────────┘ └──────────────┘ [E] und [J] sind Border Nodes — sie haben Nachbarn über Clustergrenzen hinweg. Um von A nach H zu senden: A → D → EJ → G → H (innerhalb u33d) (Brücke) (innerhalb u33e)

System 5 begrenzt Brückenverbindungen auf 2 pro Clusterpaar, um eine Routenexplosion zu verhindern. Die zwei stärksten Verbindungen zwischen jedem Paar benachbarter Cluster werden ausgewählt.

Warum das skaliert

Jeder Knoten muss nur Folgendes kennen:

Ein Knoten in San Francisco muss nicht jeden einzelnen Knoten in Oakland kennen. Er muss nur wissen: „Um Oakland zu erreichen, route über Border Node #47 auf dem Bay Bridge-Kamm."

Schritt 4: Routenberechnung — Mehrere Pfade finden

Sobald Cluster und Border Nodes bekannt sind, berechnet jeder Knoten bis zu 5 Routen zu jedem Ziel, das er erreichen möchte.

Der Algorithmus: BFS mit progressivem Ausschluss

  1. Kürzesten Pfad finden via Breadth-First Search (BFS) von Quelle zu Ziel
  2. Zwischenknoten aufzeichnen dieses Pfades
  3. Diese Zwischenknoten ausschließen und den nächstkürzesten Pfad finden (erzwingt eine andere Route)
  4. Bis zu 5 Mal wiederholen — jeder neue Pfad muss mindestens einen anderen Zwischenknoten verwenden
Routenberechnung: A → Z Pfad 1 (BFS): A → B → D → G → Z (kürzester, Qualität 0,92) Ausschluss: B, D, G Pfad 2 (BFS\{B,D,G}): A → C → F → H → Z (zweitbester, Qualität 0,85) Ausschluss: B, D, G, C, F, H Pfad 3 (BFS\{...}): A → E → J → K → Z (dritter, Qualität 0,71) Ergebnis: 3 gecachte Routen mit unabhängigen Ausfalldomänen.

Routenqualitätsberechnung

Für jede Route ist die Qualität das Produkt aller Verbindungsqualitäten entlang des Pfades:

Routenqualität Q(route) = q(A→B) × q(B→D) × q(D→G) × q(G→Z)

Wenn eine einzelne Verbindung Qualität 0,5 hat, sinkt die Gesamtroutenqualität erheblich. Das bestraft natürlich lange Pfade und Pfade mit schwachen Verbindungen.

Lazy vs. Eager Berechnung

Schritt 5: Eine Nachricht senden — Gewichtete Routenauswahl

Wenn Knoten A eine Nachricht an Knoten Z senden will, ist dies der genaue Entscheidungsprozess:

1

QoS-Gate prüfen

Ist die Priorität dieser Nachricht hoch genug für den aktuellen Netzwerkzustand? (Siehe Schritt 6)

2

Gecachte Routen abrufen

Alle gecachten Routen zum Ziel Z nachschlagen. Typischerweise 2–5 Routen.

3

Tote Routen filtern

Routen entfernen, bei denen ein Zwischenknoten ausgefallen ist (Batterie = 0) oder eine Verbindung unterbrochen ist.

4

Gewichte berechnen

Für jede verbleibende Route wird ein Gewicht berechnet, das drei Faktoren ausbalanciert:

Routengewicht (die Kernformel) W(r) = 0.4 × Q(r) + 0.35 × (1 − Load(r)) + 0.25 × Batt(r)
FaktorGewichtWas er misstWarum er wichtig ist
Q(r) — Qualität0,4 (40%) Produkt aller Verbindungsqualitäten entlang des Pfades Höher = weniger Paketverluste, weniger Wiederholungen nötig
1−Load(r) — Freie Kapazität0,35 (35%) Durchschnittliche Warteschlangenauslastung der Zwischenknoten (invertiert) Vermeidet Routing durch überlastete Knoten
Batt(r) — Batterie0,25 (25%) Minimaler Batteriestand über alle Knoten im Pfad Knoten mit niedrigem Akku nicht entleeren; sie könnten solar sein und Reserven brauchen
5

Proportionale Auswahl (nicht nur die Beste!)

Dies ist eine kritische Designentscheidung. System 5 wählt nicht immer die beste Route. Es wählt Routen probabilistisch, proportional zu ihrem Gewicht:

Auswahlwahrscheinlichkeit P(route r) = W(r) / Σ W(alle Routen)

Beispiel: Wenn Route 1 Gewicht 0,8 und Route 2 Gewicht 0,4 hat:

Das hält sekundäre Routen „warm" — gelegentlich fließt Verkehr durch sie, sodass das Netzwerk weiß, dass sie noch funktionieren. Wenn Route 1 ausfällt, ist Route 2 sofort mit aktuellen Qualitätsdaten verfügbar.

6

Hop-by-Hop-Weiterleitung

Die Nachricht wird entlang des gewählten Pfades gesendet, ein Hop nach dem anderen:

  1. A sendet an B (erster Hop im Pfad)
  2. Wenn B empfängt → B leitet an D weiter (nächster Hop)
  3. Wenn B nicht empfängt → A wiederholt (bis zu 3 Mal bei guten Verbindungen, 5 bei schlechten)
  4. Wenn alle Wiederholungen scheitern → nächste gecachte Route versuchen (bis zu 5 Routenversuche)
  5. Wenn alle Routen scheitern → Fallback auf begrenztes Cluster-Flooding
Adaptive Wiederholungen

Verbindungen mit Qualität > 0,5 bekommen 3 Wiederholungen (werden wahrscheinlich schnell erfolgreich). Verbindungen mit Qualität ≤ 0,5 bekommen 5 Wiederholungen (brauchen mehr Versuche). Das balanciert Zustellwahrscheinlichkeit gegen Sendezeit-Kosten.

Backpressure — Automatische Stau-Vermeidung

Wenn die Warteschlange eines Zwischenknotens sich füllt, wendet System 5 graduellen Gegendruck an:

WarteschlangenlastAktion
< 80%Normaler Betrieb — Routengewicht unverändert
80–95%Routengewicht bestraft (× 0,8–0,95) — Verkehr verlagert sich auf Alternativen
> 95%Route vollständig blockiert — kein neuer Verkehr durch diesen Knoten

Das verhindert kaskadierende Überlastung: Wenn ein Knoten beginnt, überlastet zu werden, verteilt sich der Verkehr natürlich auf andere Pfade, bevor der Knoten Pakete verwirft.

Schritt 6: QoS — Priorisierung unter Druck

Nicht alle Nachrichten sind gleich. System 5 verwendet einen Network Health Score (NHS) pro Cluster, um niedrig priorisierten Verkehr zu drosseln, wenn das Netzwerk belastet ist.

NHS-Berechnung

NHS ist ein Wert von 0,0 bis 1,0, der den Gesundheitszustand des Clusters repräsentiert, basierend auf:

Prioritäts-Gating

NHS-BereichNetzwerkzustandErlaubte PrioritätenBeispiel
0,8 – 1,0GesundAlle (0–7)Alles kommt durch
0,6 – 0,8MäßigNur 0–5Niedrig priorisierte Telemetrie gedrosselt
0,4 – 0,6VerschlechtertNur 0–3Nur wichtige Nachrichten
0,2 – 0,4KritischNur 0–1Nur Notfall/SOS
< 0,2ZusammengebrochenNur 0Nur SOS-Nachrichten

Priorität 0 = SOS/Notfall — kommt immer durch, unabhängig vom Netzwerkzustand. Das stellt sicher, dass in einem Katastrophenszenario kritische Nachrichten niemals durch routinemäßige Telemetrie blockiert werden.

Schritt 7: Fallback — Wenn alle Routen versagen

Wenn alle 5 gecachten Routen versagen (nach Wiederholungen auf jeder einzelnen), gibt System 5 nicht auf. Es fällt zurück auf begrenztes Cluster-Flooding — eine gezielte Mini-Flut entlang des Korridors zwischen Quelle und Ziel.

Wie begrenztes Flooding funktioniert

  1. Cluster-Level-Pfad finden: BFS auf dem Cluster-Nachbarschaftsgraphen vom Quell-Cluster zum Ziel-Cluster
  2. Korridor definieren: Quell-Cluster + Ziel-Cluster + alle Border Nodes entlang des Cluster-Pfads
  3. Nur innerhalb des Korridors fluten: Nachricht wird nur an Knoten im Korridor gesendet — nicht ans gesamte Netzwerk
Gesamtes Netzwerk (Flooding würde alle 5 Cluster betreffen): ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ C1 │──│ C2 │──│ C3 │──│ C4 │──│ C5 │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ Quelle in C1, Ziel in C4. Cluster-Pfad: C1 → C2 → C3 → C4 Begrenzter Flood-Korridor (System 5 Fallback): ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ C1 │──│ B2 │──│ B3 │──│ C4 │ C5 wird NICHT geflutet └─────┘ └─────┘ └─────┘ └─────┘ C1 und C4: vollständiges Cluster-Flooding (alle Mitglieder) B2 und B3: nur Border Nodes + ihre direkten Nachbarn

Das ist dramatisch günstiger als netzwerkweites Flooding. In einem 500-Knoten-Netzwerk mit 10 Clustern betrifft ein vollständiges Flooding alle 500 Knoten. Ein begrenztes Korridor-Flooding betrifft ~100 Knoten (2 vollständige Cluster + Border Nodes).

Bekannte Einschränkung

Wenn das Korridor-Flooding häufig ausgelöst wird (wie im Bay Area Half-Duplex-Szenario), kann es dennoch hohe TX-Zahlen erzeugen. Dies ist das wichtigste Optimierungsziel: mehr alternative gerichtete Routen versuchen, bevor das Korridor-Flooding ausgelöst wird.

Schritt 8: Selbstwartung — Routen aktuell halten

Netzwerke ändern sich ständig: Knoten bewegen sich, Batterien entleeren sich, Verbindungen verschlechtern sich. System 5 wartet sich durch mehrere Mechanismen selbst:

Routenqualitäts-Abklingung (Pheromon-Modell)

Inspiriert von der Ameisenkolonie-Optimierung: Alle 30 Sekunden klingen alle gecachten Routenqualitäten um 5% ab:

Qualitätsabklingung (alle 30s) Q(route) = Q(route) × 0.95

Routen, die tatsächlich genutzt werden, erhalten ihre Qualität aktualisiert aus realen Verbindungsmessungen. Routen, die nie genutzt werden, verblassen allmählich auf null und werden schließlich ersetzt. Das stellt sicher, dass die Routing-Tabelle immer die aktuellen Netzwerkbedingungen widerspiegelt, nicht veraltete historische Daten.

Routen-Feedback

Nach jedem Nachrichtenzustellungsversuch:

Nachbar-Verdrängung

Wenn ein Knoten einen neuen Nachbarn entdeckt, aber seine Tabelle voll ist (16 Einträge), wird der Nachbar mit der niedrigsten Verbindungsqualität verdrängt. Das stellt sicher, dass die Routing-Tabelle immer die besten verfügbaren Verbindungen enthält.

Dynamisches Hop-Limit

Anders als Meshtastics festes 3–7 Hop-Limit verwendet System 5 ein dynamisches Limit, das mit der Netzwerkgröße skaliert:

Dynamisches Max-Hops max_hops = clamp(√n × 3, 15, 40)

Für ein 100-Knoten-Netzwerk: max_hops = √100 × 3 = 30. Für ein 1000-Knoten-Netzwerk: max_hops = 40 (gedeckelt). Das ermöglicht Nachrichten, große Netzwerke zu durchqueren, ohne künstliche Grenzen, und verhindert gleichzeitig Endlosschleifen.

Das Half-Duplex-Problem (Bay Area-Entdeckung)

Dies ist die wichtigste reale Beschränkung, die Simulatoren typischerweise ignorieren. LoRa-Funkmodule sind Half-Duplex: Ein Knoten kann nicht senden, während er empfängt.

Warum das für Flooding wichtig ist

Betrachten wir einen Berggipfel-Router auf 600m Höhe, der 100 Knoten hören kann. Wenn eine Nachricht durch das Netzwerk flutet:

  1. Knoten A sendet eine Nachricht. Der Berggipfel hört sie (jetzt im RX-Zustand).
  2. 10 Dachknoten nahe A hören sie ebenfalls und senden gleichzeitig weiter.
  3. Der Berggipfel empfängt noch diese 10 Weitersendungen — er kann nicht senden.
  4. 4 Langstrecken-Router senden ebenfalls weiter. Der Berggipfel steckt immer noch im RX-Zustand fest.
  5. Bis der Berggipfel senden kann, ist der Timer des Managed-Flooding-Algorithmus abgelaufen — er sendet entweder weiter (verursacht weitere Kollisionen) oder unterdrückt (Nachricht stirbt).

Ergebnis: 5% tatsächliche Nutzung wird zu 50% Kanalauslastung am Berggipfel, und Nachrichten schaffen es nicht über den ersten Hop hinaus.

Warum System 5 Half-Duplex überlebt

Mit gerichtetem Routing empfängt der Berggipfel-Knoten ein gezieltes Paket (nicht 14 gleichzeitige Weitersendungen). Er verarbeitet es, wartet auf ein freies TX-Fenster und leitet an den nächsten Hop weiter. Die Funk-Zustandsmaschine ist einfach:

Managed Flooding am Berggipfel: RX(A) → RX(B) → RX(C) → ... → RX(N) → TX-Fenster? ALLES BLOCKIERT Dauer: 10–20 Sekunden kontinuierlicher Empfang → Nachricht stirbt System 5 gerichtetes Routing: RX(Paket für uns) → TX(Weiterleitung an nächsten Hop) → IDLE Dauer: ~2 Sekunden gesamt → Nachricht geht weiter

Simulationsergebnisse

Wir haben eine Bay Area-artige Simulation mit 235 Knoten in 3 Höhenstufen und Half-Duplex-Funkmodellierung erstellt. Die Ergebnisse bestätigen die realen Beobachtungen:

SzenarioRouterZustellungGesamt-TX
Bay Area ohne Half-Duplex Managed Flood87,5%908.785
System 580,5%47.094
Bay Area mit Half-Duplex Managed Flood6,0%6.752
System 577,5%540.780

Half-Duplex lässt Flooding von 87,5% → 6% Zustellung zusammenbrechen. System 5 hält bei 77,5%. Probiere das Bay Area-Szenario im Live-Simulator →

Speicherbedarf — Läuft das auf dem nRF52?

Reale Mesh-Geräte haben enge Speichergrenzen. Der nRF52840 (verwendet im RAK4631 Solar-Router) hat 256KB RAM, mit ~64KB verfügbar nach BLE- und LoRa-Stacks.

Datenstrukturen

StrukturGrößeAnzahlGesamt
Nachbareintrag~80 Bytesmax. 161.280 Bytes
Routeneintrag (pro Ziel)~410 Bytes5 Routen × N Zielevariabel
Cluster-Metadaten~100 Bytes8 Cluster800 Bytes
Eigener Knotenzustand~100 Bytes1100 Bytes

Skalierung mit Netzwerkgröße

NetzwerkgrößeVerfolgte ZieleRouting-SpeicherPasst auf nRF52?
20 Knoten (lokal)20~10 KBJa
100 Knoten (Stadt)100~43 KBJa (knapp)
500 Knoten (regional)~70 (Cluster-Sicht)~30 KBJa
1000 Knoten~70 (Cluster-Sicht)~30 KBJa
10.000 Knoten~200 (Cluster + Grenzen)~84 KBBraucht reduzierte Parameter

Die Kernidee: Geo-Clustering bedeutet, dass ein Knoten nur seinen eigenen Cluster + Grenzrouten verfolgt. Ein 10.000-Knoten-Netzwerk bedeutet nicht 10.000 Routeneinträge — es bedeutet ~200 Einträge (eigene Cluster-Mitglieder + Border Nodes zu benachbarten Clustern).

nRF52-Optimierung

Für speicherbeschränkte Geräte können diese Firmware-Konstanten reduziert werden:

Bay Area-Topologie — Der Praxistest unter Extrembedingungen

Basierend auf Feedback von Bay Area Mesh-Betreibern haben wir eine Simulation erstellt, die die tatsächliche Netzwerkstruktur modelliert:

Drei-Stufen-Höhenmodell

StufeKnotenHöheReichweiteGeländeRolle
Berg7 (3%)600–1200m45kmFreiraum Backbone-Router (Mt Diablo, Mt Tam, etc.)
Hügel/Dach35 (15%)150–500m10kmVorstadt Brücke zwischen Berg und Tal
Tal/Innenraum193 (82%)0–100m0,75–2,5kmUrban/Innen Endnutzer-Handgeräte und Indoor-Knoten

Was dieses Szenario schwierig macht

Probiere dieses Szenario im Live-Simulator → — wähle „Bay Area Mesh (235 nodes, 3-tier elevation)" aus dem Dropdown.

Lies die vollständige Q&A mit der Bay Area Mesh-Community →

Node Silencing — Redundante Knoten stummschalten

Eines der wirkungsvollsten v2.0-Features, inspiriert durch Feedback der Bay Area Mesh-Community. Die Kernerkenntnis: In einem 235-Knoten-Netzwerk sind die meisten Talknoten redundant — ihre Nachbarn können alle über andere Pfade erreicht werden. Jedes Mal, wenn diese redundanten Knoten weitersenden, fügen sie Kollisionsrauschen an Berggipfel-Empfängern hinzu, ohne zur Nachrichtenzustellung beizutragen.

Wie es funktioniert

  1. Redundanz-Bewertung: Für jeden Knoten wird jeder Nachbar geprüft — kann dieser Nachbar von mindestens 2 anderen lebenden Knoten erreicht werden? Falls ja, ist diese Nachbarverbindung „redundant". Der Redundanzwert des Knotens = Anteil redundanter Nachbarverbindungen (0,0 = kritisch, 1,0 = vollständig ersetzbar).
  2. Schutz kritischer Brücken: Border Nodes mit wenigen Alternativen (≤3 andere Brücken zum selben Clusterpaar) werden stark abgewertet. Bergknoten und essentielle Hügelknoten werden nie stummgeschaltet.
  3. Batteriegewichtete Priorität: silence_priority = redundancy × 0.6 + (1 - battery) × 0.4. Knoten mit niedrigem Akkustand werden zuerst stummgeschaltet. Solarknoten (immer 100%) bleiben am längsten aktiv.
  4. Anwendung pro Cluster: Innerhalb jedes Clusters werden die oberen 60% der Kandidaten (nach Priorität) stummgeschaltet. Mindestens 2 Knoten bleiben pro Cluster immer aktiv.

Was stummgeschaltete Knoten tun (und nicht tun)

AktionStummgeschalteter KnotenAktiver Knoten
OGMs empfangenJa — bleibt über das Netzwerk informiertJa
Direkte Nachrichten empfangenJa — kann adressiert werdenJa
Eigene Nachrichten sendenJa — kann initiierenJa
Flooding weitersendenNein — bleibt stillJa
OGMs sendenNein — spart SendezeitJa
Gerichtete S5-Pakete weiterleitenJa — wenn auf dem berechneten PfadJa

Batteriefaire Rotation

Dieselben Knoten können nicht für immer stummgeschaltet sein — ihre Batterien würden länger halten, aber die aktiven Knoten würden schneller entladen. System 5 rotiert die stille Gruppe alle 10 Minuten:

  1. Alle abgelaufenen Stummschaltungen werden aufgehoben
  2. Redundanzwerte werden neu berechnet (Knoten können sich bewegt haben, ausgefallen sein oder ihre Last geändert haben)
  3. Eine neue Gruppe von Knoten wird zur Stummschaltung ausgewählt, gewichtet nach aktuellem Batteriestand

Ergebnis: Jeder Knoten verbringt ungefähr gleich viel Zeit aktiv und still. Der Batterieverbrauch wird gleichmäßig über das Netzwerk verteilt.

Ergebnisse

Bay Area-SzenarioS5-ZustellungS5-TXStummgeschaltete Knoten
Ohne Node Silencing77,5%540.7800
Mit Node Silencing74,5%267.927134 (57%)
128 Talknoten stummgeschaltet, 6 Hügelknoten stummgeschaltet, 0 Bergknoten stummgeschaltet

Notfall-Umleitung — Letzter Ausweg vor Flooding

Wenn alle 5 gecachten Routen versagen (jeder Hop wurde mit Wiederholungen versucht), löste das ursprüngliche System 5 sofort begrenztes Korridor-Flooding aus. Das war teuer — im Bay Area-Szenario lösten 73 von 200 Nachrichten Fallback-Floods aus.

Die v2.0-Verbesserung fügt einen weiteren Schritt vor dem Flooding hinzu:

  1. Alle Zwischenknoten der gescheiterten Routen in eine failed_nodes-Menge sammeln
  2. Eine neue BFS von Quelle zu Ziel durchführen, unter Ausschluss aller gescheiterten Knoten
  3. Wenn ein neuer Pfad gefunden wird, einmal versuchen (gerichtet, kein Flooding)
  4. Nur wenn auch dieser Notfallpfad scheitert → Korridor-Flooding auslösen

Das ist günstig (eine BFS-Berechnung, keine zusätzlichen TX außer der Pfad funktioniert) und oft erfolgreich, weil die gescheiterten Knoten das eigentliche Problem waren — der Rest des Netzwerks hat möglicherweise einwandfreie Pfade.

Sequenznummern — Fehlende Nachrichten erkennen

Multi-Pfad-Routing kann Nachrichten in falscher Reihenfolge zustellen. Wenn Nachrichten A, B, C über drei verschiedene Pfade mit unterschiedlichen Latenzen gesendet werden, könnte der Empfänger C, B, A sehen — oder schlimmer, C, A (B auf einem gescheiterten Pfad verloren).

Das v2.0-Übertragungsprotokoll fügt einen 2-Byte-Sequenzzähler (uint16_t seq) pro (Quelle, Ziel)-Paar hinzu:

Warum nicht erneut senden?

Erneutes Senden erfordert einen ACK + Wiederholungs-Zyklus. Bei LoRa benötigt jedes Paket 500ms–2s Sendezeit. Eine 5-Hop-Wiederholung kostet 5–10 Sekunden Kanalzeit — während derer der Berggipfel für allen anderen Verkehr blockiert ist. Sequenznummern bieten Lückenerkennung bei null TX-Kosten (nur 2 zusätzliche Bytes im Header). Die Anwendungsschicht kann entscheiden, ob eine Wiederholung angefordert wird oder einfach „1 Nachricht fehlt" angezeigt wird.

Die Sequenzzähler werden effizient in der Firmware gespeichert: Nachbar-indiziertes Array für bekannte Nachbarn (32 Bytes) + LRU-Cache für andere (96 Bytes) = insgesamt 128 Bytes, unabhängig von der Netzwerkgröße.

Paketformat — Was über den Äther geht

Jedes System 5-Paket hat einen 22-Byte-Header:

OffsetFeldGrößeBeschreibung
0Version1 ByteProtokollversion (aktuell 0x01)
1Typ1 ByteDATA (0x01), OGM (0x02), ACK (0x03), CLUSTER_ANNOUNCE (0x04)
2Quell-ID4 BytesUrsprungsknoten-ID
6Ziel-ID4 BytesZielknoten-ID (0xFFFFFFFF = Broadcast)
10Paket-ID4 BytesEindeutig pro Paket (zur Deduplizierung)
14Hop-Zähler1 ByteAktueller Hop-Zähler (wird bei jedem Hop erhöht)
15Max Hops1 ByteTTL — dynamisch, basierend auf √n × 3
16Priorität1 ByteQoS-Priorität (0 = SOS, 7 = niedrigste)
17Flags1 ByteFallback-Bit, Route-Request-Bit, etc.
18Nutzlastlänge2 BytesNutzlastgröße in Bytes
20Prüfsumme2 BytesCRC-16 von Header + Nutzlast
22+NutzlastvariabelAnwendungsdaten (max. ~230 Bytes für LoRa)

System 5 vs. alles andere

EigenschaftNaives FloodingManaged FloodingNext-HopSystem 5
TX-Kosten pro NachrichtO(n)O(n) × 0,5O(Hops)*O(Hops)
Funktioniert für BroadcastsJaJaNeinJa
Hop-Limit nötigJa (3–7)Ja (3–7)TeilweiseNein (dynamisch)
Multi-Pfad-FailoverNeinNeinNein5 Routen
LastverteilungNeinNeinNeinGewichtet
Stau-VermeidungNeinNeinNeinBackpressure
QoS-PrioritätNeinNeinNein8 Stufen + NHS-Gate
Half-Duplex-resistentNeinNeinTeilweiseJa
GPS erforderlichNeinNeinNeinJa**
Speicher-OverheadMinimalMinimalGeringModerat (~8–30KB)

* Next-Hop funktioniert nur für Direktnachrichten nach einem lernenden Flood. Die erste Nachricht flutet trotzdem.
** GPS erforderlich für Clustering, aber RSSI-Triangulation und Cluster-Übernahme bieten Fallbacks.

Zum Live-Simulator → ← Zurück zur Präsentation