Bitfelddiagramm

Diagramm zur Visualisierung des binären Layouts einer Datenstruktur

Ein Bitfeld-Diagramm bzw. Bitfelddiagramm ist ein grafisches Werkzeug, welches zur Visualisierung der Struktur und der Belegung von Bitfeldern innerhalb eines Datenworts verwendet wird.[1]

Bitfelder repräsentieren Segmente von Bits, welche zur Speicherung von Daten innerhalb eines einzelnen Speicherwortes dienen. Diese Diagramme helfen Entwicklern, Ingenieuren und Technikern, die genaue Aufteilung und Bedeutung der einzelnen Bits innerhalb eines Wortes zu verstehen.

Ein Spezialfall von Bitfelddiagrammen sind Paketheader-Diagramme. Hierbei handelt es sich um Bitfelddiagramme, welche den Aufbau von Datenpaketen beschreiben.[2]

Aufbau und Struktur

Bearbeiten

Ein Bitfeld-Diagramm zeigt die Aufteilung eines Datenwortes in seine einzelnen Bits oder Gruppen von Bits, oft als Felder bezeichnet. Die Diagramme sind typischerweise rechteckig und zeigen jedes Bit oder jede Bitgruppe als separate Zelle innerhalb des Rechtecks.

Die Diagramme können horizontal oder vertikal angeordnet sein und zeigen in der Regel die Bitpositionen, beginnend mit Bit 0.

Beispiele

Bearbeiten

UDP Header

Bearbeiten

Ein UDP-Header besteht aus mehreren Feldern, die in einem 64-Bit-Datenwort (8 Bytes) organisiert sind.[3]

Hier ist ein Bitfeld-Diagramm eines UDP-Headers:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

ICMP Header

Bearbeiten

Ein ICMP-Header besteht aus mehreren Feldern, die in einem 32-Bit-Datenwort (4 Bytes) organisiert sind.[4]

Hier ist ein Bitfeld-Diagramm eines ICMP-Headers:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |        Sequence Number        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

IPv4 Header

Bearbeiten

Ein IPv4-Header besteht aus mehreren Feldern, die in einem 160-Bit-Datenwort (20 Bytes) organisiert sind.[5]

Hier ist ein Bitfeld-Diagramm eines IPv4-Headers:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

IPv6-Header

Bearbeiten

Ein IPv6-Header besteht aus mehreren Feldern, die in einem 320-Bit-Datenwort (40 Bytes) organisiert sind.[6]

Hier ist ein vereinfachtes Bitfeld-Diagramm eines IPv6-Headers:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class |           Flow Label                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload Length        | Next Header  |   Hop Limit    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                         Source Address                        +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                      Destination Address                      +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

In diesem Diagramm repräsentiert jede Zelle ein Bit des IPv6-Headers. Die Beschriftungen geben die Bedeutung der einzelnen Felder an, wie zum Beispiel die Versionsnummer, die Länge des Nutzlasts oder die Quell- und Zieladresse.

Anwendung

Bearbeiten

Bitfeld-Diagramme finden in verschiedenen Bereichen Anwendung, darunter:

  • Mikrocontroller-Programmierung: Bei der Programmierung von Mikrocontrollern werden Bitfelder häufig verwendet, um die verschiedenen Konfigurationsregister zu visualisieren.
  • Protokolldefinition: In der Netzwerkkommunikation helfen Bitfeld-Diagramme, die Struktur von Headern und anderen Protokollfeldern zu spezifizieren, wie im obigen Beispiel des IPv6-Headers gezeigt. Beispielsweise enthalten die meisten RFCs der IETF Bitfeld-Diagramme, um Datenstrukturen zu definieren.
  • Fehlerbehebung und Debugging: Entwickler nutzen Bitfeld-Diagramme, um Fehler in der Bitmanipulation und -steuerung zu identifizieren.

Referenzen

Bearbeiten
  1. Bitfield diagram explanation. Fuchsia.dev, 15. März 2024, abgerufen am 14. Juli 2024.
  2. S. McQuistin, V. Band, D. Jacob, C. S. Perkins: Describing Protocol Data Units with Augmented Packet Header Diagrams. IETF Network Working Group, 22. August 2023, abgerufen am 14. Juli 2024 (englisch).
  3. RFC 768 – User Datagram Protocol. 1980 (englisch).
  4. RFC 792 – Internet Control Message Protocol. 1981 (englisch).
  5. RFC 791 – Internet Protocol. 1981 (englisch).
  6. RFC 8200 – Internet Protocol, Version 6 (IPv6) Specification. 2017 (englisch).