EN

Paket-Format

Paket-Format

Dieses Dokument beschreibt das Paketformat von MeshCore.

  • 0xYY steht für den Wert YY in Hexadezimalschreibweise.
  • 0bYY steht für den Wert YY in Binärschreibweise.
  • Bit 0 bezeichnet das am weitesten rechts stehende Bit: 0000000X
  • Bit 7 bezeichnet das am weitesten links stehende Bit: X0000000

Paketformat Version 1

Dies ist die Paketstruktur auf Protokollebene, wie sie in der MeshCore-Firmware v1.12.0 verwendet wird.

CLI
[header][transport_codes(optional)][path_length][path][payload]
- 8-Bit-Format: 0bVVPPPPRRV=VersionP=PayloadTypeR=RouteType - Bits 0–1 – 2 Bits – Route Type (Routing-Typ) - 0x00/0b00ROUTE_TYPE_TRANSPORT_FLOOD – Flood-Routing + Transport-Codes - 0x01/0b01ROUTE_TYPE_FLOOD – Flood-Routing (Flutweiterleitung) - 0x02/0b10ROUTE_TYPE_DIRECT – Direktes Routing - 0x03/0b11ROUTE_TYPE_TRANSPORT_DIRECT – Direktes Routing + Transport-Codes - Bits 2–5 – 4 Bits – Payload Type (Nutzlast-Typ) - 0x00/0b0000PAYLOAD_TYPE_REQ – Anfrage (Ziel-/Quell-Hashes + MAC) - 0x01/0b0001PAYLOAD_TYPE_RESPONSE – Antwort auf REQ oder ANON_REQ - 0x02/0b0010PAYLOAD_TYPE_TXT_MSG – Klartext-Nachricht - 0x03/0b0011PAYLOAD_TYPE_ACK – Bestätigung (Acknowledgment) - 0x04/0b0100PAYLOAD_TYPE_ADVERT – Knoten-Ankündigung (Node Advertisement) - 0x05/0b0101PAYLOAD_TYPE_GRP_TXT – Gruppen-Textnachricht (unverifiziert) - 0x06/0b0110PAYLOAD_TYPE_GRP_DATA – Gruppen-Datagramm (unverifiziert) - 0x07/0b0111PAYLOAD_TYPE_ANON_REQ – Anonyme Anfrage - 0x08/0b1000PAYLOAD_TYPE_PATH – Zurückgegebener Pfad - 0x09/0b1001PAYLOAD_TYPE_TRACE – Pfad-Nachverfolgung, sammelt den SNR (Signal-Rausch-Abstand) für jeden Hop - 0x0A/0b1010PAYLOAD_TYPE_MULTIPART – Paket ist Teil einer Paketsequenz - 0x0B/0b1011PAYLOAD_TYPE_CONTROL – Steuerpaket-Daten (unverschlüsselt) - 0x0C/0b1100 – reserviert - 0x0D/0b1101 – reserviert - 0x0E/0b1110 – reserviert - 0x0F/0b1111PAYLOAD_TYPE_RAW_CUSTOM – Benutzerdefiniertes Paket (rohe Bytes, eigene Verschlüsselung) - Bits 6–7 – 2 Bits – Payload Version (Nutzlast-Version) - 0x00/0b00 – v1 – 1-Byte-Quell-/Ziel-Hashes, 2-Byte-MAC - 0x01/0b01 – v2 – Zukünftige Version (z. B. 2-Byte-Hashes, 4-Byte-MAC) - 0x02/0b10 – v3 – Zukünftige Version - 0x03/0b11 – v4 – Zukünftige Version
  • transport_codes – 4 Bytes (optional)
- Nur vorhanden bei ROUTE_TYPE_TRANSPORT_FLOOD und ROUTE_TYPE_TRANSPORT_DIRECT - transport_code_1 – 2 Bytes – uint16_t – wird aus dem Regionsbereich (Region Scope) berechnet - transport_code_2 – 2 Bytes – uint16_t – reserviert
  • path_length – 1 Byte – Kodierte Pfad-Metadaten
- Bits 0–5 speichern die Anzahl der Pfad-Hashes / Hop-Anzahl (0–63) - Bits 6–7 speichern die Pfad-Hash-Größe minus 1 - 0b00: 1-Byte-Pfad-Hashes - 0b01: 2-Byte-Pfad-Hashes - 0b10: 3-Byte-Pfad-Hashes - 0b11: reserviert / nicht unterstützt
  • pathhop_count * hash_size Bytes – Pfad für direktes Routing oder zur Verfolgung des Flood-Pfades
- Maximal 64 Bytes, definiert durch MAX_PATH_SIZE - Die tatsächliche Bytelänge wird aus der kodierten Hop-Anzahl und Hash-Größe berechnet, nicht direkt aus dem Wert von path_length übernommen - Firmware v1.12.0 und älter unterstützte ausschließlich die älteren 1-Byte-Pfad-Hashes und verwarf Pakete, deren Pfad-Bytes 64 Bytes überschritten
  • payload – variable Länge – Nutzlast-Daten
- Maximal 184 Bytes, definiert durch MAX_PACKET_PAYLOAD - In der Regel besteht die Nutzlast aus dem restlichen Inhalt der Rohdaten des Pakets - Die Firmware interpretiert diese Daten anhand des angegebenen Payload-Typs - Firmware v1.12.0 und älter verwarf Pakete mit einer payload-Größe von mehr als 184 Bytes

Paketformat-Übersicht

FeldGröße (Bytes)Beschreibung
header1Enthält Routing-Typ, Payload-Typ und Payload-Version
transport_codes4 (optional)2× 16-Bit-Transport-Codes (bei ROUTE_TYPE_TRANSPORT_*)
path_length1Kodiert die Pfad-Hash-Größe in Bits 6–7 und die Hop-Anzahl in Bits 0–5
pathbis zu 64 (MAX_PATH_SIZE)Speichert hop_count × hash_size Bytes an Pfaddaten, sofern zutreffend
payloadbis zu 184 (MAX_PACKET_PAYLOAD)Daten für den angegebenen Payload-Typ
HINWEIS: Weitere Informationen zum Inhalt der einzelnen Payload-Typen findest du in der Payload-Dokumentation.

Header-Format

Bit 0 bezeichnet das niederwertigste Bit (Einerstelle).

BitsMaskeFeldBeschreibung
0–10x03Route TypeFlood, Direct usw.
2–50x3CPayload TypeRequest, Response, ACK usw.
6–70xC0Payload VersionVersionierung des Payload-Formats

Routing-Typen

WertNameBeschreibung
0x00ROUTE_TYPE_TRANSPORT_FLOODFlood-Routing + Transport-Codes
0x01ROUTE_TYPE_FLOODFlood-Routing (Flutweiterleitung)
0x02ROUTE_TYPE_DIRECTDirektes Routing
0x03ROUTE_TYPE_TRANSPORT_DIRECTDirektes Routing + Transport-Codes

Kodierung der Pfadlänge (Path Length Encoding)

path_length ist kein einfacher Bytezähler. Dieses Feld enthält sowohl die Hash-Größe als auch die Hop-Anzahl in kompakter Form:
BitsFeldBedeutung
0–5Hop Count (Hop-Anzahl)Anzahl der Pfad-Hashes (0–63)
6–7Hash Size Code (Hash-Größen-Code)Gespeichert als hash_size - 1

Hash-Größen-Codes:

Bits 6–7Hash-GrößeAnmerkungen
0b001 ByteÄlterer / Standard-Modus (Legacy)
0b012 BytesIn aktueller Firmware unterstützt
0b103 BytesIn aktueller Firmware unterstützt
0b114 BytesReserviert / ungültig

Beispiele:

  • 0x00: Paket ohne Hops, keine Pfad-Bytes
  • 0x05: 5 Hops mit 1-Byte-Hashes, der Pfad ist daher 5 Bytes lang
  • 0x45: 5 Hops mit 2-Byte-Hashes, der Pfad ist daher 10 Bytes lang
  • 0x8A: 10 Hops mit 3-Byte-Hashes, der Pfad ist daher 30 Bytes lang

Payload-Typen

WertNameBeschreibung
0x00PAYLOAD_TYPE_REQAnfrage (Ziel-/Quell-Hashes + MAC)
0x01PAYLOAD_TYPE_RESPONSEAntwort auf REQ oder ANON_REQ
0x02PAYLOAD_TYPE_TXT_MSGKlartext-Nachricht
0x03PAYLOAD_TYPE_ACKBestätigung (Acknowledgment)
0x04PAYLOAD_TYPE_ADVERTKnoten-Ankündigung (Node Advertisement)
0x05PAYLOAD_TYPE_GRP_TXTGruppen-Textnachricht (unverifiziert)
0x06PAYLOAD_TYPE_GRP_DATAGruppen-Datagramm (unverifiziert)
0x07PAYLOAD_TYPE_ANON_REQAnonyme Anfrage
0x08PAYLOAD_TYPE_PATHZurückgegebener Pfad
0x09PAYLOAD_TYPE_TRACEPfad-Nachverfolgung, sammelt den SNR für jeden Hop
0x0APAYLOAD_TYPE_MULTIPARTPaket ist Teil einer Paketsequenz
0x0BPAYLOAD_TYPE_CONTROLSteuerpaket-Daten (unverschlüsselt)
0x0Creserviertreserviert
0x0Dreserviertreserviert
0x0Ereserviertreserviert
0x0FPAYLOAD_TYPE_RAW_CUSTOMBenutzerdefiniertes Paket (rohe Bytes, eigene Verschlüsselung)

Payload-Versionen

WertVersionBeschreibung
0x0011-Byte-Quell-/Ziel-Hashes, 2-Byte-MAC
0x012Zukünftige Version (z. B. 2-Byte-Hashes, 4-Byte-MAC)
0x023Zukünftige Version
0x034Zukünftige Version

Quelle: docs.meshcore.io