Home / Dokumentation / 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
Dies ist die Paketstruktur auf Protokollebene, wie sie in der MeshCore-Firmware v1.12.0 verwendet wird.
CLI
Copy
[header][transport_codes(optional)][path_length][path][payload]
- 8-Bit-Format: 0bVVPPPPRR – V=Version – P=PayloadType – R=RouteType
- Bits 0–1 – 2 Bits – Route Type (Routing-Typ)
- 0x00/0b00 – ROUTE_TYPE_TRANSPORT_FLOOD – Flood-Routing + Transport-Codes
- 0x01/0b01 – ROUTE_TYPE_FLOOD – Flood-Routing (Flutweiterleitung)
- 0x02/0b10 – ROUTE_TYPE_DIRECT – Direktes Routing
- 0x03/0b11 – ROUTE_TYPE_TRANSPORT_DIRECT – Direktes Routing + Transport-Codes
- Bits 2–5 – 4 Bits – Payload Type (Nutzlast-Typ)
- 0x00/0b0000 – PAYLOAD_TYPE_REQ – Anfrage (Ziel-/Quell-Hashes + MAC)
- 0x01/0b0001 – PAYLOAD_TYPE_RESPONSE – Antwort auf REQ oder ANON_REQ
- 0x02/0b0010 – PAYLOAD_TYPE_TXT_MSG – Klartext-Nachricht
- 0x03/0b0011 – PAYLOAD_TYPE_ACK – Bestätigung (Acknowledgment)
- 0x04/0b0100 – PAYLOAD_TYPE_ADVERT – Knoten-Ankündigung (Node Advertisement)
- 0x05/0b0101 – PAYLOAD_TYPE_GRP_TXT – Gruppen-Textnachricht (unverifiziert)
- 0x06/0b0110 – PAYLOAD_TYPE_GRP_DATA – Gruppen-Datagramm (unverifiziert)
- 0x07/0b0111 – PAYLOAD_TYPE_ANON_REQ – Anonyme Anfrage
- 0x08/0b1000 – PAYLOAD_TYPE_PATH – Zurückgegebener Pfad
- 0x09/0b1001 – PAYLOAD_TYPE_TRACE – Pfad-Nachverfolgung, sammelt den SNR (Signal-Rausch-Abstand) für jeden Hop
- 0x0A/0b1010 – PAYLOAD_TYPE_MULTIPART – Paket ist Teil einer Paketsequenz
- 0x0B/0b1011 – PAYLOAD_TYPE_CONTROL – Steuerpaket-Daten (unverschlüsselt)
- 0x0C/0b1100 – reserviert
- 0x0D/0b1101 – reserviert
- 0x0E/0b1110 – reserviert
- 0x0F/0b1111 – PAYLOAD_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
path – hop_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
Feld Größe (Bytes) Beschreibung header 1 Enthält Routing-Typ, Payload-Typ und Payload-Version transport_codes 4 (optional) 2× 16-Bit-Transport-Codes (bei ROUTE_TYPE_TRANSPORT_*) path_length 1 Kodiert die Pfad-Hash-Größe in Bits 6–7 und die Hop-Anzahl in Bits 0–5 path bis zu 64 (MAX_PATH_SIZE) Speichert hop_count × hash_size Bytes an Pfaddaten, sofern zutreffend payload bis 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 .
Bit 0 bezeichnet das niederwertigste Bit (Einerstelle).
Bits Maske Feld Beschreibung 0–1 0x03Route Type Flood, Direct usw. 2–5 0x3CPayload Type Request, Response, ACK usw. 6–7 0xC0Payload Version Versionierung des Payload-Formats
Routing-Typen
Wert Name Beschreibung 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:
Bits Feld Bedeutung 0–5 Hop Count (Hop-Anzahl) Anzahl der Pfad-Hashes (0–63) 6–7 Hash Size Code (Hash-Größen-Code) Gespeichert als hash_size - 1
Hash-Größen-Codes:
Bits 6–7 Hash-Größe Anmerkungen 0b001 Byte Älterer / Standard-Modus (Legacy) 0b012 Bytes In aktueller Firmware unterstützt 0b103 Bytes In aktueller Firmware unterstützt 0b114 Bytes Reserviert / 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
Wert Name Beschreibung 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) 0x0Creserviert reserviert 0x0Dreserviert reserviert 0x0Ereserviert reserviert 0x0FPAYLOAD_TYPE_RAW_CUSTOMBenutzerdefiniertes Paket (rohe Bytes, eigene Verschlüsselung)
Payload-Versionen
Wert Version Beschreibung 0x001 1-Byte-Quell-/Ziel-Hashes, 2-Byte-MAC 0x012 Zukünftige Version (z. B. 2-Byte-Hashes, 4-Byte-MAC) 0x023 Zukünftige Version 0x034 Zukünftige Version
Quelle: docs.meshcore.io