EN

Payload-Format

Payload-Format

Payload-Format

Innerhalb jedes MeshCore-Pakets befindet sich eine Nutzlast (Payload), die durch ihren Nutzlasttyp im Paket-Header identifiziert wird. Die Arten von Nutzlasten sind:

  • Knoten-Ankündigung (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 (unbestätigt) (Group text message (unverified)).
  • Gruppen-Datagramm (unbestätigt) (Group datagram (unverified)).
  • Mehrteiliges Paket (Multi-part packet).
  • Kontrolldatenpaket (Control data packet).
  • Benutzerdefiniertes Paket (Rohe Bytes, benutzerdefinierte Verschlüsselung) (Custom packet (raw bytes, custom encryption)).
Dieses Dokument definiert die Struktur jedes dieser Nutzlasttypen.

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

Wichtige Konzepte:

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

Knoten-Ankündigung (Node advertisement)

Diese Art von Nutzlast (Payload) benachrichtigt Empfänger über die Existenz eines Knotens und liefert Informationen über diesen.
FeldGröße (Bytes)Beschreibung
Public Key32Ed25519 Public Key des Knotens
Zeitstempel (Timestamp)4Unix-Zeitstempel der Ankündigung
Signatur64Ed25519-Signatur von Public Key, Zeitstempel und Anwendungsdaten (Appdata)
Anwendungsdaten (Appdata)Rest der NutzlastOptional, siehe unten

Anwendungsdaten (Appdata)

FeldGröße (Bytes)Beschreibung
Flags1Gibt an, welche der Felder vorhanden sind, siehe unten
Breitengrad (Latitude)4 (optional)Dezimaler Breitengrad multipliziert mit 1000000, Ganzzahl
Längengrad (Longitude)4 (optional)Dezimaler Längengrad multipliziert mit 1000000, Ganzzahl
Funktion 1 (Feature 1)2 (optional)Reserviert für zukünftige Verwendung
Funktion 2 (Feature 2)2 (optional)Reserviert für zukünftige Verwendung
NameRest der AppdataName des Knotens

Appdata-Flags

WertNameBeschreibung
0x01ist Chat-Knoten (is chat node)Ankündigung ist für einen Chat-Knoten
0x02ist Repeater (is repeater)Ankündigung ist für einen Repeater
0x03ist Raumserver (is room server)Ankündigung ist für einen Raumserver
0x04ist Sensor (is sensor)Ankündigung ist für einen Sensor-Server
0x10hat Standort (has location)Appdata enthält Breiten-/Längengrad-Informationen
0x20hat Funktion 1 (has feature 1)Reserviert für zukünftige Verwendung.
0x40hat Funktion 2 (has feature 2)Reserviert für zukünftige Verwendung.
0x80hat Namen (has name)Appdata enthält einen Knotennamen

Bestätigung (Acknowledgement)

Eine Bestätigung, dass eine Nachricht empfangen wurde. Beachten Sie, dass für „zurückgelegte Pfad-Nachrichten“ (returned path messages) eine Bestätigung in der "extra"-Nutzlast (siehe Returned Path) anstelle eines separaten Bestätigungspakets gesendet werden kann. CLI-Befehle (Kommandozeilenbefehle) lösen keine Bestätigungsantworten aus, weder diskrete noch zusätzliche.

FeldGröße (Bytes)Beschreibung
Prüfsumme (Checksum)4CRC-Prüfsumme des Nachrichten-Zeitstempels, Textes und des Public Key des Absenders

Zurückgelegter Pfad, Anfrage, Antwort und Klartextnachricht

Zurückgelegte Pfad-Nachrichten, Anfragen (Requests), Antworten (Responses) und Klartextnachrichten (Plain text messages) sind alle auf die gleiche Weise formatiert. Weitere Details zur zugehörigen Klartextdarstellung des Chiffretextes finden Sie im Unterabschnitt.

FeldGröße (Bytes)Beschreibung
Ziel-Hash (Destination hash)1Erstes Byte des Public Key des Zielknotens
Quell-Hash (Source hash)1Erstes Byte des Public Key des Quellknotens
Chiffre-MAC (Cipher MAC)2MAC für verschlüsselte Daten im nächsten Feld
Chiffretext (Ciphertext)Rest der NutzlastVerschlüsselte Nachricht, Details siehe Unterabschnitte unten

Zurückgelegter Pfad (Returned path)

Nachrichten über den zurückgelegten Pfad (Returned path messages) beschreiben den Weg, den ein Paket vom ursprünglichen Absender genommen hat. Empfänger senden „zurückgelegte Pfad-Nachrichten“ an den Autor der ursprünglichen Nachricht.

FeldGröße (Bytes)Beschreibung
Pfadlänge (Path length)1Länge des nächsten Feldes
Pfad (Path)siehe obenEine Liste von Knoten-Hashes (jeweils ein Byte)
Extra-Typ (Extra type)1Extra, gebündelter Nutzlasttyp, z. B. Bestätigung oder Antwort. Dieselben Werte wie in Paket-Format
ExtraRest der DatenExtra, gebündelter Nutzlastinhalt, folgt demselben Format wie der in diesem Dokument definierte Hauptinhalt

Anfrage (Request)

FeldGröße (Bytes)Beschreibung
Zeitstempel (Timestamp)4Sendezeit (Unix-Zeitstempel)
Anfragedaten (Request data)Rest der NutzlastAnwendungsdefinierter Anfragen-Nutzlastkörper

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

WertNameBeschreibung
0x01Statistiken abrufen (get stats)Statistiken eines Repeaters oder Raumservers abrufen
0x02Keep-Alive (keepalive)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:

  • Akkustand (Millivolt)
  • Aktuelle Länge der Übertragungswarteschlange
  • Aktuelle Länge der freien Warteschlange
  • Letzter RSSI-Wert
  • 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
  • Anzahl der Duplikate über Direktroute
  • Anzahl der Duplikate über Flood-Route
  • Anzahl der geposteten (?)
  • Anzahl der Push-Posts (?)

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-Knoten) (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
Inhalt (Content)Rest der NutzlastAnwendungsdefinierter Antwortkörper

Antwortinhalte sind opake Anwendungsdaten. Es gibt keinen einzelnen generischen Antwort-Umschlag über den oben gezeigten verschlüsselten Nutzlast-Wrapper hinaus.

Klartextnachricht (Plain text message)

FeldGröße (Bytes)Beschreibung
Zeitstempel (Timestamp)4Sendezeit (Unix-Zeitstempel)
txt_type + Versuch (attempt)1Die oberen sechs Bits sind txt_type (siehe unten), die unteren zwei Bits sind die Versuchsnummer (0..3)
Nachricht (Message)Rest der NutzlastDer Nachrichteninhalt, siehe nächste Tabelle

txt_type

WertBeschreibungNachrichteninhalt
0x00Klartextnachricht (plain text message)Der Klartext der Nachricht
0x01CLI-Befehl (CLI command)Der Befehlstext der Nachricht
0x02Signierte Klartextnachricht (signed plain text message)Die ersten vier Bytes sind das Präfix des Absender-Public Keys, gefolgt von der Klartextnachricht

Anonyme Anfrage (Anonymous request)

FeldGröße (Bytes)Beschreibung
Ziel-Hash (Destination hash)1Erstes Byte des Public Key des Zielknotens
Public Key32Ed25519 Public Key des Absenders
Chiffre-MAC (Cipher MAC)2MAC für verschlüsselte Daten im nächsten Feld
Chiffretext (Ciphertext)Rest der NutzlastVerschlüsselte Nachricht, Details siehe unten

Raumserver-Login (Room server login)

FeldGröße (Bytes)Beschreibung
Zeitstempel (Timestamp)4Sendezeit (Unix-Zeitstempel)
Synchronisations-Zeitstempel (Sync timestamp)4"Synchronisiere Nachrichten SEIT x" Zeitstempel des Absenders
Passwort (Password)Rest der NachrichtPasswort für den Raum

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

FeldGröße (Bytes)Beschreibung
Zeitstempel (Timestamp)4Sendezeit (Unix-Zeitstempel)
Passwort (Password)Rest der NachrichtPasswort für Repeater/Sensor

Repeater – Regionen-Anfrage (Repeater - Regions request)

FeldGröße (Bytes)Beschreibung
Zeitstempel (Timestamp)4Sendezeit (Unix-Zeitstempel)
Anfragetyp (Req type)10x01 (Anfrage-Subtyp)
Antwort-Pfadlänge (Reply path len)1Pfadlänge für die Antwort
Antwort-Pfad (Reply path)(variabel)Antwort-Pfad

Repeater – Eigentümerinformationen-Anfrage (Repeater - Owner info request)

FeldGröße (Bytes)Beschreibung
Zeitstempel (Timestamp)4Sendezeit (Unix-Zeitstempel)
Anfragetyp (Req type)10x02 (Anfrage-Subtyp)
Antwort-Pfadlänge (Reply path len)1Pfadlänge für die Antwort
Antwort-Pfad (Reply path)(variabel)Antwort-Pfad

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

FeldGröße (Bytes)Beschreibung
Zeitstempel (Timestamp)4Sendezeit (Unix-Zeitstempel)
Anfragetyp (Req type)10x03 (Anfrage-Subtyp)
Antwort-Pfadlänge (Reply path len)1Pfadlänge für die Antwort
Antwort-Pfad (Reply path)(variabel)Antwort-Pfad

Gruppen-Textnachricht (Group text message)

FeldGröße (Bytes)Beschreibung
Kanal-Hash (Channel hash)1Erstes Byte des SHA256 des geteilten Schlüssels des Kanals
Chiffre-MAC (Cipher MAC)2MAC für verschlüsselte Daten im nächsten Feld
Chiffretext (Ciphertext)Rest der NutzlastVerschlüsselte Nachricht, Details siehe unten

Der im Chiffretext enthaltene Klartext entspricht dem in Klartextnachricht beschriebenen Format. Speziell 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 das Format : (z. B. user123: Ich bin auf dem Weg).

Der Absendername ist unbestätigter Nachrichtentext. Gruppen-Nachrichten enthalten keine Absender-Signatur, sodass jeder, der den Kanalschlüssel besitzt, einen beliebigen Absendernamen wählen kann.

Gruppen-Datagramm (Group datagram)

FeldGröße (Bytes)Beschreibung
Kanal-Hash (Channel hash)1Erstes Byte des SHA256 des geteilten Schlüssels des Kanals
Chiffre-MAC (Cipher MAC)2MAC für verschlüsselte Daten im nächsten Feld
Chiffretext (Ciphertext)Rest der NutzlastVerschlüsselte Daten, Details siehe unten

Die im Chiffretext enthaltenen Daten verwenden das unten stehende Format:

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

Kontrolldaten (Control data)

FeldGröße (Bytes)Beschreibung
Flags1Die oberen 4 Bits sind sub_type
Daten (Data)Rest der NutzlastTypischerweise unverschlüsselte Daten

DISCOVER_REQ (sub_type)

FeldGröße (Bytes)Beschreibung
Flags10x8 (obere 4 Bits), prefix_only (niedrigstes Bit)
Typ-Filter (type_filter)1Bit für jeden ADV_TYPE_*
Tag4Zufällig vom Absender generiert
Seit (since)4(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
Tag4Von DISCOVER_REQ zurückgespiegelt
Public Key (pubkey)8 oder 32ID (oder Präfix) des Knotens

Benutzerdefiniertes Paket (Custom packet)

Benutzerdefinierte Pakete haben kein definiertes Format.

Quelle: docs.meshcore.io