EN

Payload-Format

Payload-Format

Payload-Format

Jedes MeshCore-Paket enthält eine Nutzlast (Payload), deren Typ im Paket-Header angegeben ist. Die Nutzlasttypen sind:

  • Knotenwerbung (Node advertisement).
  • Bestätigung (Acknowledgment).
  • Zurückgelegter Pfad (Returned path).
  • Anfrage (Request) (Ziel-/Quell-Hashes + MAC).
  • Antwort (Response) auf REQ oder ANON_REQ.
  • Klartextnachricht (Plain text message).
  • Anonyme Anfrage (Anonymous request).
  • Gruppen-Textnachricht (Group text message) (unverifiziert).
  • Gruppen-Datagramm (Group datagram) (unverifiziert).
  • Mehrteiliges Paket (Multi-part packet).
  • Kontrolldatenpaket (Control data packet).
  • Benutzerdefiniertes Paket (Custom packet) (Rohdaten, benutzerdefinierte Verschlüsselung).
Dieses Dokument definiert die Struktur jedes dieser Nutzlasttypen.

HINWEIS: Alle 16- und 32-Bit-Ganzzahlfelder sind Little Endian.

Wichtige Konzepte:

  • Knoten-Hash: Das erste Byte des öffentlichen Schlüssels (Public Key) des Knotens.

Knotenwerbung (Node advertisement)

Diese Nutzlast informiert Empfänger über die Existenz eines Knotens und liefert Informationen über ihn.
FeldGröße (Bytes)Beschreibung
public key32Ed25519 Public Key des Knotens
timestamp4Unix-Zeitstempel der Werbung
signature64Ed25519-Signatur des Public Keys, Zeitstempels und der App-Daten
appdataRest der NutzlastOptional, siehe unten

App-Daten (Appdata)

FeldGröße (Bytes)Beschreibung
flags1Gibt an, welche Felder vorhanden sind, siehe unten
latitude4 (optional)Dezimal-Breitengrad, multipliziert mit 1000000, Integer
longitude4 (optional)Dezimal-Längengrad, multipliziert mit 1000000, Integer
feature 12 (optional)Reserviert für zukünftige Verwendung
feature 22 (optional)Reserviert für zukünftige Verwendung
nameRest der App-DatenName des Knotens

App-Daten-Flags (Appdata Flags)

WertNameBeschreibung
0x01is chat nodeWerbung ist für einen Chat-Knoten
0x02is repeaterWerbung ist für einen Repeater
0x03is room serverWerbung ist für einen Raumserver
0x04is sensorWerbung ist für einen Sensor-Server
0x10has locationApp-Daten enthalten Breiten-/Längengrad-Informationen
0x20has feature 1Reserviert für zukünftige Verwendung.
0x40has feature 2Reserviert für zukünftige Verwendung.
0x80has nameApp-Daten enthalten einen Knotennamen

Bestätigung (Acknowledgement)

Eine Bestätigung, dass eine Nachricht empfangen wurde. Bei Nachrichten mit zurückgelegtem Pfad kann eine Bestätigung auch in der "Extra"-Nutzlast (siehe Returned Path) gesendet werden, anstatt als separates Bestätigungspaket. CLI-Befehle (Kommandozeilenbefehle) lösen keine Bestätigungsantworten aus, weder diskrete noch zusätzliche.

FeldGröße (Bytes)Beschreibung
checksum4CRC-Prüfsumme des Nachrichten-Zeitstempels, Textes und des Public Keys des Senders

Zurückgelegter Pfad (Returned path), Anfrage (request), Antwort (response) und Klartextnachricht (plain text message)

Nachrichten des Typs "Zurückgelegter Pfad", "Anfrage", "Antwort" und "Klartextnachricht" sind alle gleich formatiert. Weitere Details zur zugehörigen Klartextdarstellung des Chiffretextes finden Sie im Unterabschnitt.

FeldGröße (Bytes)Beschreibung
destination hash1Erstes Byte des Public Keys des Zielknotens
source hash1Erstes Byte des Public Keys des Quellknotens
cipher MAC2MAC für verschlüsselte Daten im nächsten Feld
ciphertextRest der NutzlastVerschlüsselte Nachricht, siehe Unterabschnitte unten für Details

Zurückgelegter Pfad (Returned path)

Nachrichten des Typs "Returned path" beschreiben den Weg, den ein Paket vom ursprünglichen Absender genommen hat. Empfänger senden "Returned path"-Nachrichten an den Autor der ursprünglichen Nachricht.

FeldGröße (Bytes)Beschreibung
path length1Länge des nächsten Feldes
pathsiehe obenEine Liste von Knoten-Hashes (jeweils ein Byte)
extra type1Extra, gebündelter Nutzlasttyp, z.B. Bestätigung oder Antwort. Dieselben Werte wie im Packet Format
extraRest der DatenExtra, gebündelter Nutzlastinhalt, folgt demselben Format wie der in diesem Dokument definierte Hauptinhalt

Anfrage (Request)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type1Anfrage-Untertyp
request dataRest der NutzlastAnwendungsdefinierter Nutzlastkörper der Anfrage

Für die gängigen Chat-/Server-Helfer in BaseChatMesh sind die aktuellen Anfrage-Typenwerte:

WertNameBeschreibung
0x01get statsStatistiken von Repeater oder Raumserver abrufen
0x02keepalive(veraltet)
0x03get telemetryKnotentelemetrie anfordern
0x04get min/max/avgSensor-Knotenstatistiken für Zeitreihendaten abrufen
0x05get aclKnoten-ACL-Abfrage
0x06get neighborsKnoten-Nachbarn-Abfrage
0x08subscribeTelemetrie-Push abonnieren
0x09unsubscribeTelemetrie-Push deabonnieren

Statistiken abrufen (Get stats)

Ruft Informationen über den Knoten ab, möglicherweise einschließlich der folgenden:

  • Batteriestand (Millivolt)
  • Aktuelle Länge der Sende-Warteschlange
  • Aktuelle Länge der freien Warteschlange
  • Letzter RSSI-Wert (Received Signal Strength Indicator)
  • Anzahl der empfangenen Pakete
  • Anzahl der gesendeten Pakete
  • Gesamte Sendezeit (Sekunden)
  • Gesamte Betriebszeit (Sekunden)
  • Anzahl der als Flood gesendeten Pakete
  • Anzahl der direkt gesendeten Pakete
  • Anzahl der als Flood empfangenen Pakete
  • Anzahl der direkt empfangenen Pakete
  • Fehler-Flags
  • Letzter SNR-Wert (Signal-Rausch-Verhältnis)
  • Anzahl direkter Routen-Duplikate
  • Anzahl Flood-Routen-Duplikate
  • Anzahl der geposteten (?)
  • Anzahl der Post-Pushes (?)

Telemetrie abrufen (Get Telemetry)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x03 (Anfrage-Untertyp)
permission mask1Bitweise inverse Maske zum UND der Berechtigungen (0 = ALLE Telemetriewerte abrufen)

Min/Max/Ave abrufen (Sensor-Knoten) (Get Min/Max/Ave (Sensor nodes))

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x04 (Anfrage-Untertyp)
start4Startzeit, Sekunden vor jetzt
end4Endzeit, Sekunden vor jetzt
reserved2Sollte Nullen sein

Telemetrie-Push abonnieren (Sensor-Knoten) (Subscribe to Telemetry push - (Sensor nodes))

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x08 (Anfrage-Untertyp)
push tag432-Bit-Tag, der in Telemetrie-Push- _REPLY_-Nutzlasten verwendet werden soll
timeout secs2Abonnement-Timeout (Sekunden)
reserved1Sollte Null sein
min deltas len1Bytelänge der LPP-kodierten min_deltas
min deltas(variabel)LPP-kodierte min_deltas

Telemetrie-Push deabonnieren (Sensor-Knoten) (Unsubscribe from Telemetry push - (Sensor nodes))

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x09 (Anfrage-Untertyp)

Zugriffsliste abrufen (Get Access List)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x05 (Anfrage-Untertyp)
reserved2Sollte Nullen sein

Nachbarn abrufen (Get Neighbors)

Nicht in BaseChatMesh definiert.

Besitzerinformationen abrufen (Get Owner Info)

Nicht in BaseChatMesh definiert.

Antwort (Response)

FeldGröße (Bytes)Beschreibung
contentRest der NutzlastAnwendungsdefinierter Antwortkörper

Antwortinhalte sind opake Anwendungsdaten. Es gibt keinen einzigen generischen Antwortumschlag, der über den oben gezeigten verschlüsselten Nutzlast-Wrapper hinausgeht.

Klartextnachricht (Plain text message)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
txt_type + attempt1Die oberen sechs Bits sind txt_type (siehe unten), die unteren zwei Bits sind die Versuchsanummer (0..3)
messageRest der NutzlastDer Nachrichteninhalt, siehe nächste Tabelle
txt_type
WertBeschreibungNachrichteninhalt
0x00KlartextnachrichtDer Klartext der Nachricht
0x01CLI-DatenCLI-Befehl ODER Antworttext
0x02Signierte KlartextnachrichtDie ersten vier Bytes sind das Sender-Public-Key-Präfix, gefolgt von der Klartextnachricht
0x03CLI-Befehl(seit v1.18+) CLI-Befehlstext (explizit)

Anonyme Anfrage (Anonymous request)

FeldGröße (Bytes)Beschreibung
destination hash1Erstes Byte des Public Keys des Zielknotens
public key32Ed25519 Public Key des Senders
cipher MAC2MAC für verschlüsselte Daten im nächsten Feld
ciphertextRest der NutzlastVerschlüsselte Nachricht, siehe unten für Details

Raumserver-Login (Room server login)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
sync timestamp4"Sync messages SINCE x"-Zeitstempel des Senders
passwordRest der NachrichtPasswort für den Raum

Repeater-/Sensor-Login (Repeater/Sensor login)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
passwordRest der NachrichtPasswort für Repeater/Sensor

Repeater - Regionen-Anfrage (Repeater - Regions request)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x01 (Anfrage-Untertyp)
reply path len1Pfadlänge für die Antwort
reply path(variabel)Antwortpfad

Repeater - Besitzerinformationen-Anfrage (Repeater - Owner info request)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x02 (Anfrage-Untertyp)
reply path len1Pfadlänge für die Antwort
reply path(variabel)Antwortpfad

Repeater - Uhrzeit- und Statusanfrage (Repeater - Clock and status request)

FeldGröße (Bytes)Beschreibung
timestamp4Sendezeit (Unix-Zeitstempel)
req type10x03 (Anfrage-Untertyp)
reply path len1Pfadlänge für die Antwort
reply path(variabel)Antwortpfad

Gruppen-Textnachricht (Group text message)

FeldGröße (Bytes)Beschreibung
channel hash1Erstes Byte des SHA256 des gemeinsamen Schlüssels des Kanals
cipher MAC2MAC für verschlüsselte Daten im nächsten Feld
ciphertextRest der NutzlastVerschlüsselte Nachricht, siehe unten für Details

Der Klartext im Chiffretext entspricht dem Format, das in Klartextnachricht beschrieben ist. Insbesondere besteht er aus einem vier Byte langen Zeitstempel, einem Flags-Byte und der Nachricht. Das Flags-Byte ist im Allgemeinen 0x00, da es sich um eine "Klartextnachricht" handelt. Die Nachricht hat die Form : (z.B. Benutzer123: Ich bin unterwegs).

Der Sendername ist unverifizierter Nachrichtentext. Gruppennachrichten enthalten keine Sendersignatur, daher kann jeder Inhaber eines Kanalschlüssels einen beliebigen Sendernamen wählen.

Gruppen-Datagramm (Group datagram)

FeldGröße (Bytes)Beschreibung
channel hash1Erstes Byte des SHA256 des gemeinsamen Schlüssels des Kanals
cipher MAC2MAC für verschlüsselte Daten im nächsten Feld
ciphertextRest der NutzlastVerschlüsselte Daten, siehe unten für Details

Die im Chiffretext enthaltenen Daten verwenden das unten stehende Format:

FeldGröße (Bytes)Beschreibung
data type2Identifier für den Datentyp. (Siehe number_allocations.md)
data len1Bytelänge der Daten
dataRest der Nutzlast(abhängig vom Datentyp)

Kontrolldaten (Control data)

FeldGröße (Bytes)Beschreibung
flags1Die oberen 4 Bits sind sub_type
dataRest der NutzlastTypischerweise unverschlüsselte Daten

DISCOVER_REQ (sub_type)

FeldGröße (Bytes)Beschreibung
flags10x8 (obere 4 Bits), prefix_only (unterstes Bit)
type_filter1Bit für jeden ADV_TYPE_*
tag4Zufällig vom Sender generiert
since4(Optional) Epochen-Zeitstempel (standardmäßig 0)

DISCOVER_RESP (sub_type)

FeldGröße (Bytes)Beschreibung
flags10x9 (obere 4 Bits), node_type (untere 4)
snr1Signiert, SNR*4
tag4Zurückgespiegelt von DISCOVER_REQ
pubkey8 oder 32ID des Knotens (oder Präfix)

Benutzerdefiniertes Paket (Custom packet)

Benutzerdefinierte Pakete haben kein definiertes Format.

Quelle: docs.meshcore.io