EN

Payload-Format

Payload-Format

Payload-Format

Innerhalb jedes MeshCore-Pakets befindet sich eine Nutzlast (Payload), die durch den Payload-Typ im Paket-Header identifiziert wird. Die Payload-Typen sind:

  • Knoten-Ankündigung (Node advertisement).
  • Bestätigung (Acknowledgment).
  • Rückgegebener 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) (Rohdatenbytes, benutzerdefinierte Verschlüsselung).
Dieses Dokument definiert die Struktur jedes dieser Payload-Typen.

HINWEIS: Alle 16- und 32-Bit-Ganzzahlenfelder sind Little Endian (die am wenigsten signifikanten Bytes stehen an erster Stelle).

Wichtige Konzepte:

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

Knoten-Ankündigung (Node advertisement)

Diese Art der Nutzlast benachrichtigt Empfänger über die Existenz eines Knotens und liefert Informationen über diesen Knoten.
FeldGröße (Bytes)Beschreibung
public key (öffentlicher Schlüssel)32Ed25519 öffentlicher Schlüssel des Knotens
timestamp (Zeitstempel)4Unix-Zeitstempel der Ankündigung
signature (Signatur)64Ed25519 Signatur des öffentlichen Schlüssels, des Zeitstempels und der App-Daten
appdata (App-Daten)Rest der Nutzlastoptional, siehe unten

App-Daten (Appdata)

FeldGröße (Bytes)Beschreibung
flags (Flags)1gibt an, welche der Felder vorhanden sind, siehe unten
latitude (Breitengrad)4 (optional)Dezimaler Breitengrad multipliziert mit 1000000, Ganzzahl
longitude (Längengrad)4 (optional)Dezimaler Längengrad multipliziert mit 1000000, Ganzzahl
feature 1 (Merkmal 1)2 (optional)reserviert für zukünftige Verwendung
feature 2 (Merkmal 2)2 (optional)reserviert für zukünftige Verwendung
name (Name)Rest der App-DatenName des Knotens

App-Daten-Flags (Appdata Flags)

WertNameBeschreibung
0x01is chat node (ist Chat-Knoten)Ankündigung ist für einen Chat-Knoten
0x02is repeater (ist Repeater)Ankündigung ist für einen Repeater (Signalverstärker)
0x03is room server (ist Raum-Server)Ankündigung ist für einen Raum-Server
0x04is sensor (ist Sensor)Ankündigung ist für einen Sensor-Server
0x10has location (hat Standort)App-Daten enthalten Breiten-/Längengrad-Informationen
0x20has feature 1 (hat Merkmal 1)Reserviert für zukünftige Verwendung.
0x40has feature 2 (hat Merkmal 2)Reserviert für zukünftige Verwendung.
0x80has name (hat Namen)App-Daten enthalten einen Knotennamen

Bestätigung (Acknowledgement)

Eine Bestätigung, dass eine Nachricht empfangen wurde. Beachten Sie, dass für Rückpfad-Nachrichten eine Bestätigung auch in der "Extra"-Nutzlast (siehe Returned Path) gesendet werden kann, anstatt als separates Bestätigungspaket. CLI-Befehle (Kommandozeilen-Befehle) lösen keine Bestätigungsantworten aus, weder diskrete noch zusätzliche.

FeldGröße (Bytes)Beschreibung
checksum (Prüfsumme)4CRC-Prüfsumme des Nachrichtenzeitstempels, des Textes und des öffentlichen Schlüssels des Absenders

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

Rückgegebene Pfade, Anfragen, Antworten und Klartextnachrichten sind alle auf dieselbe Weise formatiert. Weitere Details zur zugehörigen Klartextdarstellung des Chiffretextes finden Sie im Unterabschnitt.

FeldGröße (Bytes)Beschreibung
destination hash (Ziel-Hash)1erstes Byte des öffentlichen Schlüssels des Zielknotens
source hash (Quell-Hash)1erstes Byte des öffentlichen Schlüssels des Quellknotens
cipher MAC (Verschlüsselungs-MAC)2MAC (Message Authentication Code) für verschlüsselte Daten im nächsten Feld
ciphertext (Chiffretext)Rest der Nutzlastverschlüsselte Nachricht, siehe Unterabschnitte unten für Details

Rückgegebener Pfad (Returned path)

Rückgegebene Pfad-Nachrichten (Returned path messages) beschreiben den Weg, den ein Paket vom ursprünglichen Absender genommen hat. Empfänger senden Rückpfad-Nachrichten an den Absender der ursprünglichen Nachricht.

FeldGröße (Bytes)Beschreibung
path length (Pfadlänge)1Länge des nächsten Feldes
path (Pfad)siehe obeneine Liste von Node-Hashes (jeweils ein Byte)
extra type (Extra-Typ)1zusätzlicher, gebündelter Payload-Typ, z. B. Bestätigung oder Antwort. Gleiche Werte wie in Packet Format
extra (Extra)Rest der Datenzusätzlicher, gebündelter Payload-Inhalt, folgt dem gleichen Format wie der Hauptinhalt, der in diesem Dokument definiert ist

Anfrage (Request)

FeldGröße (Bytes)Beschreibung
timestamp (Zeitstempel)4Absenderzeit (Unix-Zeitstempel)
request data (Anfragedaten)Rest der NutzlastAnwendungsdefinierter Anfragen-Payload-Body

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

WertNameBeschreibung
0x01get stats (Statistiken abrufen)Statistiken eines Repeaters oder Raumservers abrufen
0x02keepalive (Verbindung aufrechterhalten)Keep-Alive-Anfrage, die für aufrechterhaltene Verbindungen verwendet wird

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 Airtime (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 der Duplikate bei direkter Route
  • Anzahl der Duplikate bei Flood-Route
  • Anzahl der geposteten (?) Inhalte
  • Anzahl der Post-Pushes (?)

Telemetriedaten abrufen (Get telemetry data)

Nicht in BaseChatMesh definiert. Sensor- und anwendungsspezifische Anfragen-Nutzlasten können von höherer Firmware implementiert werden.

Telemetrie abrufen (Get Telemetry)

Nicht in BaseChatMesh definiert.

Min/Max/Durchschnitt abrufen (Sensor Nodes) (Get Min/Max/Ave (Sensor nodes))

Nicht in BaseChatMesh definiert.

Zugriffsliste abrufen (Get Access List)

Nicht in BaseChatMesh definiert.

Nachbarn abrufen (Get Neighbors)

Nicht in BaseChatMesh definiert.

Eigentümerinformationen abrufen (Get Owner Info)

Nicht in BaseChatMesh definiert.

Antwort (Response)

FeldGröße (Bytes)Beschreibung
content (Inhalt)Rest der NutzlastAnwendungsdefinierter Antwort-Body

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

Klartextnachricht (Plain text message)

FeldGröße (Bytes)Beschreibung
timestamp (Zeitstempel)4Sendezeit (Unix-Zeitstempel)
txt_type + attempt (Texttyp + Versuch)1obere sechs Bits sind txt_type (siehe unten), untere zwei Bits sind die Versuchsnummer (0..3)
message (Nachricht)Rest der Nutzlastder Nachrichteninhalt, siehe nächste Tabelle
txt_type (Texttyp)
WertBeschreibungNachrichteninhalt
0x00plain text message (Klartextnachricht)der Klartext der Nachricht
0x01CLI command (CLI-Befehl)der Befehlstext der Nachricht
0x02signed plain text message (signierte Klartextnachricht)erste vier Bytes sind das Präfix des öffentlichen Schlüssels des Absenders, gefolgt von der Klartextnachricht

Anonyme Anfrage (Anonymous request)

FeldGröße (Bytes)Beschreibung
destination hash (Ziel-Hash)1erstes Byte des öffentlichen Schlüssels des Zielknotens
public key (öffentlicher Schlüssel)32öffentlicher Ed25519-Schlüssel des Absenders
cipher MAC (Verschlüsselungs-MAC)2MAC für verschlüsselte Daten im nächsten Feld
ciphertext (Chiffretext)Rest der Nutzlastverschlüsselte Nachricht, siehe unten für Details

Raumserver-Login (Room server login)

FeldGröße (Bytes)Beschreibung
timestamp (Zeitstempel)4Absenderzeit (Unix-Zeitstempel)
sync timestamp (Synchronisierungszeitstempel)4Zeitstempel des Absenders für "Nachrichten synchronisieren SEIT x"
password (Passwort)Rest der NachrichtPasswort für den Raum

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

FeldGröße (Bytes)Beschreibung
timestamp (Zeitstempel)4Absenderzeit (Unix-Zeitstempel)
password (Passwort)Rest der NachrichtPasswort für den Repeater/Sensor

Repeater - Regionen-Anfrage (Repeater - Regions request)

FeldGröße (Bytes)Beschreibung
timestamp (Zeitstempel)4Absenderzeit (Unix-Zeitstempel)
req type (Anfragetyp)10x01 (Anfrage-Untertyp)
reply path len (Antwort-Pfadlänge)1Pfadlänge für die Antwort
reply path (Antwort-Pfad)(variabel)Antwort-Pfad

Repeater - Eigentümerinformationen anfordern (Repeater - Owner info request)

FeldGröße (Bytes)Beschreibung
timestamp (Zeitstempel)4Absenderzeit (Unix-Zeitstempel)
req type (Anfragetyp)10x02 (Anfrage-Untertyp)
reply path len (Antwort-Pfadlänge)1Pfadlänge für die Antwort
reply path (Antwort-Pfad)(variabel)Antwort-Pfad

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

FeldGröße (Bytes)Beschreibung
timestamp (Zeitstempel)4Absenderzeit (Unix-Zeitstempel)
req type (Anfragetyp)10x03 (Anfrage-Untertyp)
reply path len (Antwort-Pfadlänge)1Pfadlänge für die Antwort
reply path (Antwort-Pfad)(variabel)Antwort-Pfad

Gruppen-Textnachricht (Group text message)

FeldGröße (Bytes)Beschreibung
channel hash (Kanal-Hash)1erstes Byte des SHA256 des gemeinsamen Schlüssels des Kanals
cipher MAC (Verschlüsselungs-MAC)2MAC für verschlüsselte Daten im nächsten Feld
ciphertext (Chiffretext)Rest der Nutzlastverschlüsselte Nachricht, siehe unten für Details

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

Der Absendername ist ein unverifizierter Nachrichtentext. Gruppen-Nachrichten enthalten keine Absender-Signatur, sodass jeder Inhaber des Kanal-Schlüssels einen beliebigen Absendernamen wählen kann.

Gruppen-Datagramm (Group datagram)

FeldGröße (Bytes)Beschreibung
channel hash (Kanal-Hash)1erstes Byte des SHA256 des gemeinsamen Schlüssels des Kanals
cipher MAC (Verschlüsselungs-MAC)2MAC für verschlüsselte Daten im nächsten Feld
ciphertext (Chiffretext)Rest der Nutzlastverschlüsselte Daten, siehe unten für Details

Die im Chiffretext enthaltenen Daten verwenden das folgende Format:

FeldGröße (Bytes)Beschreibung
data type (Datentyp)2Identifikator für den Datentyp. (Siehe number_allocations.md)
data len (Datenlänge)1Bytelänge der Daten
data (Daten)Rest der Nutzlast(abhängig vom Datentyp)

Kontrolldaten (Control data)

FeldGröße (Bytes)Beschreibung
flags (Flags)1obere 4 Bits sind sub_type (Untertyp)
data (Daten)Rest der Nutzlasttypischerweise unverschlüsselte Daten

DISCOVER_REQ (sub_type)

FeldGröße (Bytes)Beschreibung
flags (Flags)10x8 (obere 4 Bits), prefix_only (niedrigstes Bit)
type_filter (Typfilter)1Bit für jeden ADV_TYPE_*
tag4zufällig vom Absender generiert
since (seit)4(optional) Epochen-Zeitstempel (standardmäßig 0)

DISCOVER_RESP (sub_type)

FeldGröße (Bytes)Beschreibung
flags (Flags)10x9 (obere 4 Bits), node_type (untere 4)
snr1signiert, SNR*4
tag4reflektiert von DISCOVER_REQ
pubkey (öffentlicher Schlüssel)8 oder 32ID des Knotens (oder Präfix)

Benutzerdefiniertes Paket (Custom packet)

Benutzerdefinierte Pakete haben kein definiertes Format.

Quelle: docs.meshcore.io