Comm - Adaptierungsschicht

Die Adaptierungsschicht sorgt dafür, das Pakete in Abhängigkeit von der Provider-Schicht entweder serialisiert oder fragmentiert werden.

 

 

Serializer

Einige Interfaces, z.B. serielle Ports oder TCP-Tunnel bieten lediglich die Möglichkeit einen einzelnen Datenstrom zu übertragen. In diesem Fall ist es nötig, die einzelnen SCF-Nachrichten zu serialisieren und beim Empfänger wieder zu deserialisieren. Ein solches Protokoll wird im folgenden definiert. Es eignet sich sowohl für Verbindungen wie TCP, bei denen die korrekte Reihenfolge durch das Protokoll sichergestellt wird als auch für Funkstrecken wie Bluetooth, bei denen Pakete verloren gehen können.

Jedes Paket bekommt einen Header vorangestellt, welcher folgenden Aufbau hat:

4 Bytes                       0x04C11DB7                    Magic number
1 Byte                        idx                           Paketindex
1 Byte                        protID                        ID des Network-Protokolls
2 Bytes                       x                             Payloadgröße
x Bytes                       ...                           Payload	

Der Paketindex wird mit jedem Paket inkrementiert und erlaubt die Erkennung verloren gegangener Pakete. Über die Magic number ist in diesem Fall eine Resynchronisation möglich. Die Protocol-ID erlaubt das Multiplexing verschiedener Pakettypen. Die Payload des serialisierten Paketes ist z.B. eine SHR-Nachricht.

 

 

Fragmentizer

Das Fragmentizer-Protokoll dient der Fragmentierung von Paketen, die zu groß für die darunter liegende Provider-Schicht sind, z.B. zur Übertragung von SixML Description-Nachrichten über proprietäre Funkschnittstellen. Das Protokoll bietet dafür die Möglichkeit, verlorene Fragmente zu erkennen und erneut zu senden.

Unfragmentierte Nachrichten

Nachrichten, deren Gesamtgröße inklusive Fragmentizer-Header die MTU (Maximum transfer unit) der darunterliegenden Schicht nicht übersteigt, werden direkt übertragen. Ihnen wird der folgende Daten-Header vorangestellt:

1 Byte                        20                            ID des Network-Protokolls
x Bytes                       ...                           Payload	

Die Protocol-ID erlaubt das Multiplexing verschiedener Netzwerkprotokolle (z.B. Single-Hop- und Multi-Hop-Routing). Die Payload des Paketes ist damit z.B. eine SHR-Nachricht.

Fragmentierte Nachrichten

Nachrichten, deren Gesamtgröße die MTU (Maximum transfer unit) der darunterliegenden Provider-Schicht übersteigt, werden fragmentiert übertragen. Die UpperLayerProtocolID wird der gesendeten Nachricht vorangestellt, d.h. die zu fragmentierende Nachricht wird um ein Byte vergrößert. Jedem Fragment wird der folgende Header vorangestellt:

1 Byte                        1                             Pakettyp: Datenfragment
1 Byte                        idx                           Paketindex
2 Bytes                       size                          Größe der kompletten Nachricht
2 Bytes                       offset                        Offset des Fragments in der Nachricht
1 Byte                        frgIdx                        Fragment-Index
1 Byte                        frgCnt                        Anzahl der Fragmente
x Bytes                       ...                           Fragment Payload   

Der Paketindex wird für jede komplette Nachricht inkrementiert und erlaubt zusammen mit der Absenderadresse die Zuordnung von empfangenen Fragmenten. Der Fragment-Index ist 0-basiert, der gültige Wertebereich ist damit 0..Fragment-Anzahl-1. Über den Datenoffset kann ein empfangenes Fragment an der korrekten Position der Gesamtnachricht gespeichert werden.

Bestätigung des Nachrichtenempfangs

Der Empfang von Fragmenten wird durch Acknowledgement-Nachrichten bestätigt. Diese haben den folgenden Aufbau:

1 Byte                        2                             Pakettyp: Acknowledgement
1 Byte                        idx                           Paketindex
2 Bytes                       frgMask                       Fragment-Maske 

Der Paketindex wird aus den empfangenen Fragmenten übernommen. Die Fragmentmaske enthält für jedes Fragment von 0..15 den Empfangsstatus (0-Nicht empfangen, 1-Empfangen). Eine Nachricht kann damit maximal aus 16 Fragmenten bestehen. Acknowledgement-Nachrichten sollten jede Sekunde sowie nach dem Empfang der kompletten Nachricht gesendet werden.