31 Fehlererkennung und -korrektur (CRC, Checksummen)

31.1 Einführung

In den vorherigen Kapiteln haben wir uns mit der Struktur von Frames und der Adressierung mittels MAC-Adressen auf der Sicherungsschicht (Layer 2) beschäftigt. Diese Konzepte sind zentral für die Übertragung von Daten zwischen direkt verbundenen Netzwerkgeräten. Doch ein entscheidender Aspekt, der bisher nur am Rande erwähnt wurde, ist die Sicherstellung der Datenintegrität – wie können wir überprüfen, ob die übertragenen Daten fehlerfrei beim Empfänger ankommen?

Übertragungsmedien sind nie perfekt. Elektrische Interferenzen, Signaldämpfung, thermisches Rauschen und andere physikalische Phänomene können dazu führen, dass Bits während der Übertragung verfälscht werden. Ein einzelnes falsches Bit kann die Bedeutung eines Frames vollständig verändern oder wichtige Daten unbrauchbar machen. Daher ist die Erkennung und in manchen Fällen sogar die Korrektur solcher Fehler ein wesentlicher Bestandteil der Netzwerkkommunikation.

In diesem Kapitel betrachten wir die grundlegenden Konzepte der Fehlererkennung und -korrektur auf der Sicherungsschicht. Wir untersuchen verschiedene Methoden wie einfache Prüfsummen, Paritätsprüfungen und die weit verbreiteten Cyclic Redundancy Checks (CRC). Wir werden auch fortgeschrittenere Techniken zur Fehlerkorrektur kennenlernen, wie beispielsweise Hamming-Codes und Forward Error Correction (FEC). Dabei werden wir sowohl die theoretischen Grundlagen als auch die praktische Anwendung dieser Techniken in realen Netzwerkprotokollen betrachten.

31.2 Grundlagen der Fehlertypen und Erkennung

Bevor wir spezifische Fehlerkontrollmechanismen betrachten, ist es wichtig zu verstehen, welche Arten von Fehlern bei der Datenübertragung auftreten können und wie diese grundsätzlich erkannt werden können.

31.2.1 Arten von Übertragungsfehlern

Übertragungsfehler können in verschiedenen Formen auftreten:

31.2.1.1 Einzelbitfehler

Bei Einzelbitfehlern wird ein einzelnes Bit in einer Datensequenz invertiert (von 0 zu 1 oder von 1 zu 0). Diese Fehler können durch kurzzeitige Störungen wie elektrische Impulse oder Spannungsspitzen verursacht werden.

Beispiel: Original: 1010 0110 1110 1001 Übertragen: 1010 0**1**10 1110 1001 (Ein Bit wurde verändert)

In modernen kabelgebundenen Netzwerken sind Einzelbitfehler relativ selten. Sie treten häufiger in drahtlosen Umgebungen oder bei sehr hohen Übertragungsraten auf.

31.2.1.2 Burstfehler (Bündelfehler)

Burstfehler betreffen mehrere aufeinanderfolgende Bits und werden oft durch länger anhaltende Störungen verursacht. Ein Burstfehler der Länge n bedeutet, dass innerhalb einer Sequenz von n Bits mindestens das erste und das letzte Bit fehlerhaft sind, während die dazwischenliegenden Bits korrekt oder fehlerhaft sein können.

Beispiel: Original: 1010 0110 1110 1001 Übertragen: 1010 0**001** 1110 1001 (Ein Burst von Fehlern)

Burstfehler sind in der Praxis häufiger als Einzelbitfehler und können durch verschiedene Faktoren verursacht werden: - Impulsstörungen auf Übertragungsleitungen - Fehler in Übertragungsgeräten - Reflexionen in Kabeln - Fading in drahtlosen Kanälen

31.2.1.3 Paketlöschung (Packet Loss)

Bei einer Paketlöschung geht ein komplettes Paket verloren, anstatt verfälscht zu werden. Dies kann durch Pufferüberläufe in Netzwerkgeräten, Überlastungsverwerfung oder Synchronisationsverlust verursacht werden.

Paketlöschungen werden typischerweise nicht durch Layer-2-Fehlerkontrollmechanismen behandelt, sondern durch Protokolle höherer Schichten wie TCP auf Layer 4.

31.2.2 Grundprinzipien der Fehlererkennung

Die Fehlererkennung basiert auf einem einfachen Grundprinzip: Der Sender fügt den Daten zusätzliche Redundanzinformationen hinzu, die es dem Empfänger ermöglichen, die Integrität der empfangenen Daten zu überprüfen.

Der allgemeine Prozess umfasst folgende Schritte:

  1. Berechnung von Redundanzinformationen: Der Sender berechnet anhand der zu übertragenden Daten einen Wert nach einem definierten Algorithmus.
  2. Übertragung: Die Daten werden zusammen mit den Redundanzinformationen übertragen.
  3. Überprüfung: Der Empfänger führt dieselbe Berechnung auf den empfangenen Daten durch und vergleicht das Ergebnis mit den empfangenen Redundanzinformationen.
  4. Entscheidung: Stimmen die berechneten und empfangenen Redundanzinformationen überein, geht der Empfänger davon aus, dass die Daten intakt sind. Bei einer Diskrepanz wurde ein Fehler erkannt.

Die Stärke eines Fehlererkennungsverfahrens hängt davon ab, mit welcher Wahrscheinlichkeit es verschiedene Arten von Fehlern erkennen kann. Einfachere Verfahren können möglicherweise nur Einzelbitfehler erkennen, während komplexere Algorithmen auch Burstfehler oder sogar bestimmte Muster von verteilten Fehlern identifizieren können.

31.3 Einfache Fehlererkennungsverfahren

Bevor wir uns mit komplexeren Verfahren wie CRC befassen, betrachten wir einige grundlegende Methoden zur Fehlererkennung, die historisch wichtig waren und zum Verständnis der fortschrittlicheren Techniken beitragen.

31.3.1 Paritätsprüfung

Die Paritätsprüfung ist eine der einfachsten Methoden zur Fehlererkennung und basiert auf der Anzahl der “1”-Bits in einer Datensequenz.

31.3.1.1 Gerade Parität (Even Parity)

Bei der geraden Parität wird ein zusätzliches Bit (das Paritätsbit) so gewählt, dass die Gesamtzahl der “1”-Bits (einschließlich des Paritätsbits) gerade ist.

Beispiel: Daten: 1010001 (4 Einsen) Paritätsbit: 0 (um eine gerade Anzahl von Einsen zu erhalten) Übertragene Sequenz: 10100010

31.3.1.2 Ungerade Parität (Odd Parity)

Bei der ungeraden Parität wird das Paritätsbit so gewählt, dass die Gesamtzahl der “1”-Bits ungerade ist.

Beispiel: Daten: 1010001 (4 Einsen) Paritätsbit: 1 (um eine ungerade Anzahl von Einsen zu erhalten) Übertragene Sequenz: 10100011

31.3.1.3 Vorteile und Einschränkungen der Paritätsprüfung

Vorteile: - Einfache Implementierung und geringe Berechnungskomplexität - Minimaler Overhead (nur ein zusätzliches Bit)

Einschränkungen: - Kann nur Fehler mit ungerader Anzahl von Bitfehlern erkennen - Zwei oder mehr Bitfehler können sich gegenseitig aufheben und bleiben unerkannt - Keine Möglichkeit zur Fehlerkorrektur

Aufgrund dieser Einschränkungen wird die einfache Paritätsprüfung in modernen Netzwerkprotokollen selten als alleiniger Fehlerschutzmechanismus eingesetzt. Sie findet jedoch noch Anwendung in bestimmten Speicheranwendungen und einfachen seriellen Schnittstellen.

31.3.2 Zweidimensionale Parität

Eine Erweiterung der einfachen Paritätsprüfung ist die zweidimensionale oder Kreuzparität, bei der Paritätsbits sowohl für Zeilen als auch für Spalten einer Datenmatrix berechnet werden.

Beispiel:

Daten:      Zeilen-Parität:
1 0 1 1     1
0 1 0 0     1
1 1 0 1     1
1 0 1 0     0
---------   -
Spalten-    0
Parität:    0 1 0

In diesem Beispiel wird für jede Zeile und jede Spalte ein Paritätsbit berechnet (hier für gerade Parität).

Vorteile: - Kann nicht nur Fehler erkennen, sondern auch die Position eines einzelnen Bitfehlers lokalisieren - Höhere Fehlererkennungsrate als einfache Parität

Einschränkungen: - Höherer Overhead - Bestimmte Fehlermuster können immer noch unerkannt bleiben

31.3.3 Checksummen

Checksummen sind eine verbreitete Methode zur Fehlererkennung, bei der die Daten in Blöcke fester Größe aufgeteilt werden, die dann durch eine mathematische Operation (typischerweise Addition) kombiniert werden.

31.3.3.1 Einfache Checksumme

Bei einer einfachen Checksumme werden die Daten in n-Bit-Blöcke (z.B. 8, 16 oder 32 Bit) zerlegt und diese Blöcke werden addiert. Dabei kann ein Überlauf ignoriert werden oder zum Ergebnis hinzuaddiert werden (End-Around Carry). Die resultierende Summe (oder ihr Komplement) ist die Checksumme.

Beispiel für eine 8-Bit-Checksumme: Daten: 10101100 01101001 11011101 Berechnung:

  10101100
+ 01101001
  --------
  00010101 (mit Überlauf)
+ 11011101
  --------
  11110010 (mit Überlauf)

Komplementierte Checksumme: 00001101

31.3.3.2 Internet Checksumme

Eine spezielle Form der Checksumme ist die Internet Checksumme, die in Protokollen wie IP, TCP und UDP verwendet wird. Sie berechnet die 16-Bit-Einerkomplement-Summe der Daten und verwendet dann das Einerkomplement dieser Summe als Checksumme.

Vorteile von Checksummen: - Relativ einfach zu berechnen, besonders auf Prozessoren mit effizienten Additionsinstruktionen - Effektiv gegen zufällige Fehler - Flexibel in Bezug auf die Datengröße

Einschränkungen: - Weniger effektiv bei der Erkennung von Burstfehlern als andere Methoden - Kann bestimmte systematische Fehler nicht erkennen (z.B. vertauschte Bytes) - Bietet keine Fehlerkorrekturmöglichkeiten

Obwohl Checksummen in bestimmten Protokollimplementierungen immer noch weit verbreitet sind, werden sie in der Sicherungsschicht moderner Hochgeschwindigkeitsnetzwerke oft durch stärkere Verfahren wie CRCs ersetzt oder ergänzt.

31.4 Cyclic Redundancy Check (CRC)

Der Cyclic Redundancy Check (CRC) ist ein leistungsstarkes Fehlererkennungsverfahren, das auf der Polynomdivision basiert. Es ist besonders effektiv bei der Erkennung von Burstfehlern und wird in der Sicherungsschicht vieler moderner Netzwerkprotokolle eingesetzt, einschließlich Ethernet, Wi-Fi, Bluetooth und anderen.

31.4.1 Mathematische Grundlagen von CRC

CRC verwendet Konzepte aus der Algebra endlicher Körper und behandelt Bitsequenzen als Polynome über GF(2), dem Galois-Feld mit zwei Elementen.

In dieser Darstellung: - Eine Bitsequenz wird als Polynom mit Koeffizienten 0 oder 1 interpretiert - Das Bit ganz rechts ist der Koeffizient des Terms x^0 - Das Bit ganz links ist der Koeffizient des Terms x^(n-1) für eine n-Bit-Sequenz

Beispiel: Die Bitsequenz 1011 entspricht dem Polynom x^3 + x^1 + x^0 = x^3 + x + 1

Mit dieser Darstellung kann der CRC-Algorithmus als eine Polynomdivision verstanden werden, bei der: 1. Die Nachricht (als Polynom) wird mit x^r multipliziert, wobei r der Grad des CRC-Generatorpolynoms ist 2. Das Ergebnis wird durch das Generatorpolynom dividiert 3. Der Rest dieser Division ist der CRC-Wert

31.4.2 CRC-Berechnung

Der CRC-Berechnungsprozess kann wie folgt beschrieben werden:

  1. Wähle ein Generatorpolynom G(x) vom Grad r
  2. Füge r Nullen an die Nachricht M an
  3. Dividiere die erweiterte Nachricht M·x^r durch G(x) und ermittle den Rest R(x)
  4. Der CRC-Wert ist der Rest R(x)
  5. Die zu übertragenden Daten sind die ursprüngliche Nachricht gefolgt vom CRC-Wert

31.4.2.1 Implementierung mit Schieberegistern und XOR

In der Praxis wird die CRC-Berechnung typischerweise mit Schieberegistern und XOR-Operationen implementiert, was eine effiziente Hardwareimplementierung ermöglicht:

  1. Ein r-Bit-Schieberegister wird mit Nullen initialisiert
  2. Für jedes Bit der Nachricht:
    1. XOR das höchste Bit des Schieberegisters mit dem aktuellen Nachrichtenbit
    2. Wenn das Ergebnis 1 ist, schiebe das Register um ein Bit nach links und XOR mit dem Generatorpolynom
    3. Wenn das Ergebnis 0 ist, schiebe das Register einfach um ein Bit nach links
  3. Nach Verarbeitung aller Nachrichtenbits enthält das Schieberegister den CRC-Wert

31.4.2.2 Beispiel einer vereinfachten CRC-Berechnung

Betrachten wir ein einfaches Beispiel mit: - Nachricht M: 1101 (x^3 + x^2 + 1) - Generatorpolynom G(x): 1011 (x^3 + x^1 + x^0) - CRC-Grad r = 3

Schritt 1: M mit x^r multiplizieren (anhängen von r Nullen): 1101000 Schritt 2: Division durchführen:

        1010
  1011 ) 1101000
         1011
         ----
          0110
          0000
          ----
          1100
          1011
          ----
           111

Schritt 3: Der Rest ist 111, also ist der CRC-Wert 111 Schritt 4: Die zu übertragenden Daten sind 1101111

31.4.3 Standardisierte CRC-Polynome

In der Praxis werden mehrere standardisierte CRC-Polynome verwendet, die für verschiedene Anwendungen optimiert wurden:

31.4.3.1 CRC-32 (IEEE 802.3)

Der CRC-32 verwendet ein 33-Bit-Generatorpolynom und erzeugt einen 32-Bit-Prüfwert. Es ist in Ethernet und vielen anderen Protokollen weit verbreitet.

Generatorpolynom: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1 Hexadezimale Darstellung: 0x104C11DB7

31.4.3.2 CRC-16 (CCITT/ITU)

CRC-16 verwendet ein 17-Bit-Generatorpolynom und erzeugt einen 16-Bit-Prüfwert.

Generatorpolynom: x^16 + x^12 + x^5 + 1 Hexadezimale Darstellung: 0x11021

31.4.3.3 CRC-8

CRC-8 ist eine kompaktere Variante mit einem 9-Bit-Generatorpolynom und einem 8-Bit-Prüfwert.

Eines der gebräuchlichen Polynome ist: x^8 + x^2 + x + 1 Hexadezimale Darstellung: 0x107

Die Wahl des Generatorpolynoms hängt von der gewünschten Fehlererkennungsleistung und den spezifischen Eigenschaften der Anwendung ab. Wichtige Faktoren sind:

31.4.4 Leistungsfähigkeit und Eigenschaften von CRC

CRC bietet mehrere wichtige Vorteile gegenüber einfacheren Fehlererkennungsverfahren:

Leistungsfähigkeit bei der Fehlererkennung: - CRC erkennt alle Einzelbitfehler - CRC erkennt alle Burstfehler, deren Länge kleiner oder gleich dem Grad des Generatorpolynoms ist - CRC erkennt einen hohen Prozentsatz von Burstfehlern, deren Länge größer als der Grad des Generatorpolynoms ist - CRC erkennt alle Fehler mit ungerader Anzahl von Bitfehlern, wenn das Generatorpolynom den Faktor (x+1) enthält

Effiziente Implementierung: - Hardware-Implementierungen können sehr schnell sein (ein Bit pro Taktzyklus) - Software-Implementierungen können mit Lookup-Tabellen optimiert werden - Inkrementelle Updates sind in bestimmten Szenarien möglich

Einschränkungen: - Höhere Implementierungskomplexität im Vergleich zu einfachen Checksummen - Keine inhärente Fehlerkorrekturmöglichkeit - Bestimmte Fehlermuster können trotz CRC unentdeckt bleiben, obwohl die Wahrscheinlichkeit dafür sehr gering ist

31.4.5 CRC in Netzwerkprotokollen

CRC ist ein wesentlicher Bestandteil vieler Netzwerkprotokolle auf der Sicherungsschicht:

Ethernet (IEEE 802.3): - Verwendet CRC-32 als Frame Check Sequence (FCS) - Der CRC-Wert wird am Ende jedes Ethernet-Frames übertragen - Frames mit fehlerhaftem CRC werden vom Empfänger verworfen

Wi-Fi (IEEE 802.11): - Verwendet ebenfalls CRC-32 als Teil seiner Fehlererkennungsstrategie - Kombiniert CRC mit zusätzlichen Fehlerkorrekturtechniken für robustere Übertragung

USB, Bluetooth, HDLC, PPP: - Verwenden verschiedene CRC-Varianten je nach spezifischen Anforderungen - CRC ist ein zentraler Bestandteil der Datenintegrität in diesen Protokollen

Die weite Verbreitung von CRC in modernen Protokollen unterstreicht seine Bedeutung und Effektivität als Fehlererkennungsmechanismus.

31.5 Fehlerkorrekturverfahren

Während Fehlererkennung es dem Empfänger ermöglicht, fehlerhafte Daten zu identifizieren und zu verwerfen, gehen Fehlerkorrekturverfahren einen Schritt weiter und ermöglichen dem Empfänger, bestimmte Fehler zu korrigieren, ohne eine erneute Übertragung anzufordern.

31.5.1 Grundprinzipien der Fehlerkorrektur

Fehlerkorrekturverfahren basieren auf dem Prinzip, noch mehr Redundanz hinzuzufügen als für die bloße Fehlererkennung erforderlich wäre. Diese zusätzliche Redundanz ermöglicht es, nicht nur die Existenz eines Fehlers zu erkennen, sondern auch seine genaue Position zu bestimmen und zu korrigieren.

Die Fehlerkorrektur kann grundsätzlich nach zwei Ansätzen erfolgen:

  1. Automatic Repeat Request (ARQ): Fehlererkennung kombiniert mit Neuübertragung
  2. Forward Error Correction (FEC): Fehlererkennung und -korrektur ohne Neuübertragung

In diesem Abschnitt konzentrieren wir uns auf FEC-Techniken, da ARQ-Mechanismen typischerweise in höheren Protokollschichten implementiert werden.

31.5.2 Hamming-Codes

Hamming-Codes sind eine Klasse linearer Fehlerkorrekturcodes, die von Richard Hamming in den 1950er Jahren entwickelt wurden. Sie können einen Einzelbitfehler korrigieren und gleichzeitig einen Doppelbitfehler erkennen.

31.5.2.1 Hamming-Distanz

Ein zentrales Konzept in der Fehlerkorrektur ist die Hamming-Distanz, die als die Anzahl der Positionen definiert ist, in denen sich zwei gleichlange Bitfolgen unterscheiden.

Beispiel: - Sequenz 1: 101101 - Sequenz 2: 100011 - Hamming-Distanz: 3 (Unterschiede an Positionen 3, 5 und 6)

Ein Code mit einer minimalen Hamming-Distanz von d kann bis zu (d-1)/2 Bitfehler korrigieren. Ein Code mit Hamming-Distanz 3 kann also einen Einzelbitfehler korrigieren.

31.5.2.2 Struktur des Hamming(7,4)-Codes

Ein häufig verwendetes Beispiel ist der Hamming(7,4)-Code, der 4 Datenbits mit 3 Paritätsbits zu einem 7-Bit-Codewort kodiert.

Die Position der Paritätsbits wird so gewählt, dass sie den Positionen der Potenzen von 2 entsprechen (1, 2, 4, 8, …). In einem 7-Bit-Codewort befinden sich die Paritätsbits an den Positionen 1, 2 und 4, während die Datenbits an den Positionen 3, 5, 6 und 7 stehen.

Jedes Paritätsbit prüft bestimmte Bitpositionen: - P1 (Position 1) prüft die Bits an den Positionen 1, 3, 5, 7, … - P2 (Position 2) prüft die Bits an den Positionen 2, 3, 6, 7, … - P4 (Position 4) prüft die Bits an den Positionen 4, 5, 6, 7, …

31.5.2.3 Kodierung mit Hamming-Codes

Die Kodierung mit Hamming-Codes erfolgt in mehreren Schritten:

  1. Positioniere die Datenbits an den Nicht-Paritätspositionen
  2. Berechne die Paritätsbits so, dass jede geprüfte Gruppe (einschließlich des Paritätsbits selbst) eine gerade Anzahl von 1-Bits hat (für gerade Parität)

Beispiel für Hamming(7,4): - Datenbits: 1011 - Positionierung: _ _ 1 _ 0 1 1 (an Positionen 3, 5, 6, 7) - Berechnung von P1: Prüft Positionen 1, 3, 5, 7 → 1, 0, 1 → P1 = 0 - Berechnung von P2: Prüft Positionen 2, 3, 6, 7 → 1, 1, 1 → P2 = 1 - Berechnung von P4: Prüft Positionen 4, 5, 6, 7 → 0, 1, 1 → P4 = 0 - Kodiertes Codewort: 0 1 1 0 0 1 1

31.5.2.4 Dekodierung und Fehlerkorrektur

Bei der Dekodierung werden die Paritätsbits neu berechnet und mit den empfangenen Paritätsbits verglichen. Stimmen sie nicht überein, deutet dies auf einen Fehler hin. Die Position des Fehlers kann durch Interpretation der fehlerhaften Paritätsbits als binäre Zahl bestimmt werden.

Beispiel: - Empfangenes Codewort mit Fehler: 0 1 0 0 0 1 1 (Bit an Position 3 wurde verfälscht) - Prüfung von P1: Positionen 1, 3, 5, 7 → 0, 0, 0, 1 → Parität verletzt - Prüfung von P2: Positionen 2, 3, 6, 7 → 1, 0, 1, 1 → Parität verletzt - Prüfung von P4: Positionen 4, 5, 6, 7 → 0, 0, 1, 1 → Parität korrekt - Fehlermuster: 011 (3 in Dezimal) → Fehler an Position 3 - Korrektur: Bit an Position 3 invertieren → 0 1 1 0 0 1 1

31.5.3 Reed-Solomon-Codes

Reed-Solomon-Codes sind eine leistungsstarke Klasse von Fehlerkorrekturcodes, die besonders effektiv bei der Korrektur von Burstfehlern sind. Sie werden in einer Vielzahl von Anwendungen eingesetzt, von CD/DVD-Fehlerkorrektursystemen bis hin zu Deep-Space-Kommunikation.

31.5.3.1 Grundprinzipien von Reed-Solomon-Codes

Reed-Solomon-Codes arbeiten mit Symbolen (typischerweise 8-Bit-Bytes) anstatt mit einzelnen Bits und sind daher in der Lage, ganze Symbolausfälle zu korrigieren. Ein Reed-Solomon-Code RS(n,k) mit s-Bit-Symbolen kann bis zu (n-k)/2 fehlerhafte Symbole in einem Codewort der Länge n korrigieren.

Die mathematische Grundlage von Reed-Solomon-Codes ist komplex und basiert auf endlichen Körpern (Galois-Feldern) und Polynominterpolation. Für unsere Zwecke reicht es, die grundlegenden Eigenschaften und Anwendungen zu verstehen.

31.5.3.2 Anwendungen in Netzwerkprotokollen

Reed-Solomon-Codes finden in verschiedenen Netzwerkprotokollen Anwendung, besonders in solchen, die mit schwierigen Übertragungsbedingungen konfrontiert sind:

Digital Video Broadcasting (DVB): - DVB-S, DVB-T und andere DVB-Standards verwenden Reed-Solomon-Codes zur Fehlerkorrektur - Kombiniert mit Interleaving für verbesserte Burstfehlerkorrektur

Optische Übertragung: - Fehlerkorrektur in Hochgeschwindigkeits-Glasfaserverbindungen - Kompensation für Signalverschlechterung über lange Distanzen

Drahtlose Kommunikation: - Teil der Fehlerkorrekturstrategien in einigen WLAN-Standards - Verwendet in Mobilfunksystemen für zuverlässige Datenübertragung

31.5.4 Low-Density Parity-Check (LDPC) Codes

LDPC-Codes sind eine moderne Klasse von Fehlerkorrekturcodes, die erstmals 1963 von Robert Gallager vorgeschlagen, aber erst in den 1990er Jahren wiederentdeckt wurden. Sie bieten eine Leistung nahe der theoretischen Shannon-Grenze und werden zunehmend in modernen Hochleistungskommunikationssystemen eingesetzt.

31.5.4.1 Grundprinzipien von LDPC-Codes

LDPC-Codes sind durch eine dünn besetzte Paritätsprüfmatrix charakterisiert, d.h. eine Matrix, die hauptsächlich aus Nullen mit relativ wenigen Einsen besteht. Die Positionen der Einsen in dieser Matrix bestimmen die Paritätsprüfungen, die auf verschiedene Bits angewendet werden.

Die Dekodierung erfolgt typischerweise durch iterative Algorithmen wie den Belief Propagation Algorithm, der Wahrscheinlichkeitsinformationen zwischen Bits und Paritätsprüfungen austauscht, bis eine konsistente Lösung gefunden wird.

31.5.4.2 Anwendungen in modernen Netzwerkstandards

LDPC-Codes haben aufgrund ihrer hervorragenden Leistung in einer Vielzahl von modernen Hochgeschwindigkeitskommunikationsstandards Einzug gehalten:

Wi-Fi (IEEE 802.11n/ac/ax): - LDPC-Codes als optionale Fehlerkorrekturmethode - Verbesserte Durchsatzleistung bei schwierigen Funkbedingungen - Zunehmende Bedeutung in neueren Standards

5G-Mobilfunk: - LDPC-Codes für Datenkanäle (Downlink und Uplink) - Optimiert für verschiedene Blocklängen und Kodierungsraten - Ermöglicht hohe Datenraten und Zuverlässigkeit

Digital Video Broadcasting (DVB-S2/T2): - LDPC-Codes kombiniert mit BCH-Codes für zweistufige Fehlerkorrektur - Ermöglicht Betrieb nahe der theoretischen Kapazitätsgrenze des Kanals

Die Implementierung von LDPC-Codes erfordert typischerweise mehr Rechenaufwand als ältere Fehlerkorrekturverfahren, bietet jedoch eine deutlich bessere Leistung, besonders in Szenarien mit hoher Bitfehlerrate.

31.5.5 Turbo-Codes

Turbo-Codes sind eine weitere wichtige Klasse moderner Fehlerkorrekturcodes, die in den 1990er Jahren entwickelt wurden und ebenfalls eine Leistung nahe der Shannon-Grenze bieten.

31.5.5.1 Grundprinzipien von Turbo-Codes

Turbo-Codes verwenden ein Konzept namens “parallele Verkettung rekursiver systematischer Faltungscodes” (Parallel Concatenated Recursive Systematic Convolutional Codes). Ein Schlüsselelement von Turbo-Codes ist die iterative Dekodierung, bei der zwei Decoder Wahrscheinlichkeitsinformationen austauschen und schrittweise verbessern.

Die Kodierung umfasst typischerweise zwei parallelgeschaltete Faltungskodierer, getrennt durch einen Interleaver, der die Bitfolge für den zweiten Kodierer neu anordnet. Dies führt zu zwei verschiedenen, aber miteinander verbundenen Kodierungen derselben Informationen.

31.5.5.2 Anwendungen in Netzwerkprotokollen

Turbo-Codes wurden zuerst in der Mobilfunkkommunikation eingesetzt und haben sich seitdem in verschiedenen Anwendungen etabliert:

3G/4G-Mobilfunk: - Kernbestandteil der Fehlerkorrektur in UMTS und frühen LTE-Standards - Ermöglicht zuverlässige Datenübertragung bei begrenzter Bandbreite

Deep-Space-Kommunikation: - Verwendung in Satelliten- und interplanetarer Kommunikation - Maximierung der Datenrate über extrem rauschbehaftete Kanäle

Satellitenkommunikation: - Anwendung in verschiedenen Satellitenübertragungsstandards - Optimierung der Spektraleffizienz

Obwohl Turbo-Codes in 5G teilweise durch LDPC-Codes ersetzt wurden, bleiben sie ein wichtiger Teil des modernen Fehlerkorrektur-Arsenals.

31.6 Fehlerkorrektur und -erkennung in der Praxis

Nach der Betrachtung verschiedener theoretischer Ansätze zur Fehlererkennung und -korrektur ist es wichtig zu verstehen, wie diese Techniken in praktischen Netzwerkprotokollen und -systemen eingesetzt werden.

31.6.1 Fehlerbehandlung in Ethernet

Ethernet (IEEE 802.3) verlässt sich primär auf Fehlererkennung durch CRC-32, ohne eigene Mechanismen zur Fehlerkorrektur zu implementieren:

31.6.1.1 Frame Check Sequence (FCS)

31.6.1.2 Fehlerbehandlung

Ethernet selbst bietet keine Mechanismen zur Fehlerkorrektur oder automatischen Neuübertragung. Diese Funktionen werden typischerweise von höheren Protokollschichten übernommen:

Der Verzicht auf Fehlerkorrektur auf der MAC-Ebene von Ethernet ist eine bewusste Designentscheidung, die auf mehreren Faktoren basiert: - Moderne kabelgebundene Ethernet-Verbindungen haben sehr niedrige Bitfehlerraten - Die Implementierung von Fehlerkorrektur würde den Overhead und die Komplexität erhöhen - Höhere Protokollschichten bieten bereits Zuverlässigkeitsmechanismen

31.6.2 Fehlerbehandlung in drahtlosen Netzwerken

Drahtlose Netzwerke operieren in deutlich herausfordernderen Umgebungen als kabelgebundene Netzwerke und implementieren daher typischerweise umfassendere Fehlerbehandlungsmechanismen.

31.6.2.1 Wi-Fi (IEEE 802.11)

Wi-Fi verwendet einen mehrstufigen Ansatz zur Fehlerbehandlung:

Fehlererkennung: - 32-Bit-CRC ähnlich wie bei Ethernet - Bei erkannten Fehlern werden Frames verworfen

Fehlerkorrektur: - Forward Error Correction (FEC) mit verschiedenen Kodierungsschemata - Neuere Standards (802.11n/ac/ax) unterstützen LDPC-Codes und andere fortschrittliche Techniken - Kodierungsrate kann an Kanalbedingungen angepasst werden (Adaptive Coding and Modulation)

Automatische Wiederholung: - Acknowledgment (ACK) für erfolgreich empfangene Frames - Automatische Neuübertragung ohne ACK nach einem Timeout - Block Acknowledgment für effizientere Bestätigung mehrerer Frames

Mechanismen zur Fehlerreduktion: - Dynamische Ratenanpassung basierend auf Signalqualität - Fragmentierung großer Frames zur Reduzierung des Einflusses von Burstfehlern - RTS/CTS-Mechanismus zur Vermeidung von Kollisionen

31.6.2.2 Mobilfunknetzwerke (4G/5G)

Mobilfunknetzwerke implementieren hochentwickelte Fehlerbehandlungsmechanismen:

Fehlererkennung: - CRC auf verschiedenen Protokollebenen - Präzise Aufdeckung fehlerhafter Datenblöcke

Fehlerkorrektur: - Komplexe FEC-Schemas mit Turbo-Codes (4G) oder LDPC-Codes (5G) - Hybride ARQ (HARQ), die FEC mit inkrementeller Redundanz bei Neuübertragungen kombiniert - Adaptive Kodierungsraten basierend auf Kanalqualität

Weitere Mechanismen: - Interleaving zur Verbesserung der Burstfehlerkorrektur - Soft Combining von Neuübertragungen mit ursprünglichen Daten - Mehrere HARQ-Prozesse für parallele Übertragungen

31.6.3 Fehlerbehandlung in Spezialnetzwerken

Einige Netzwerktypen haben besondere Anforderungen an die Fehlerbehandlung aufgrund ihrer spezifischen Einsatzbedingungen.

31.6.3.1 Industrial Ethernet

Industrielle Netzwerke erfordern oft deterministische Kommunikation mit extrem hoher Zuverlässigkeit:

31.6.3.2 Satellitenverbindungen

Satellitenverbindungen müssen mit extrem langen Latenzen und schwierigen Übertragungsbedingungen umgehen:

31.7 Implementierungsaspekte

31.7.1 Hardware vs. Software-Implementierung

Fehlererkennung und -korrektur kann sowohl in Hardware als auch in Software implementiert werden, mit verschiedenen Trade-offs:

31.7.1.1 Hardware-Implementierung

Vorteile: - Hohe Geschwindigkeit und geringer Latenzaufschlag - Parallele Verarbeitung möglich - Entlastung des Hauptprozessors

Umsetzung: - Dedizierte CRC-Berechnung in Netzwerkkarten - FPGA- oder ASIC-basierte FEC-Encoder/Decoder - Spezielle Coprozessoren für komplexe Kodierungen

Beispiele: - Ethernet-Controller berechnen CRC in Hardware - Wi-Fi-Chips enthalten dedizierte Module für FEC-Kodierung und -Dekodierung - Spezielle DSPs für Turbo- oder LDPC-Dekodierung in Mobilfunkgeräten

31.7.1.2 Software-Implementierung

Vorteile: - Flexibilität und einfache Aktualisierung - Geringere Entwicklungskosten - Anpassungsfähigkeit an neue Algorithmen

Umsetzung: - Lookup-Tabellen für schnelle CRC-Berechnung - Optimierte Algorithmen für spezifische Prozessorarchitekturen - Parallelisierung durch SIMD-Instruktionen oder GPU-Beschleunigung

Beispiele: - Software-definierte Radioimplementierungen - Protokollstapel in Betriebssystemen - Anwendungsspezifische Fehlerkorrektursysteme

31.7.2 Leistungskonsiderationen

Bei der Implementierung von Fehlererkennung und -korrektur müssen verschiedene Leistungsaspekte berücksichtigt werden:

31.7.2.1 Durchsatz und Latenz

31.7.2.2 Ressourcenbedarf

31.7.2.3 Skalierbarkeit

31.7.3 Optimierungstechniken

Verschiedene Techniken können die Leistung von Fehlererkennung und -korrektur verbessern:

31.7.3.1 CRC-Optimierung

31.7.3.2 FEC-Optimierung

31.8 Zukünftige Entwicklungen

31.8.1 Machine Learning in der Fehlerkorrektur

Maschinelles Lernen zeigt vielversprechende Anwendungsmöglichkeiten im Bereich der Fehlerkorrektur:

31.8.2 Quantenfehlerkorrektur

Mit der Entwicklung von Quantencomputern wird auch Quantenfehlerkorrektur zunehmend relevant:

Diese Techniken haben zwar noch keine direkte Anwendung in konventionellen Netzwerken, könnten aber langfristig die Entwicklung klassischer Fehlerkorrekturverfahren beeinflussen.

31.8.3 Integration mit Netzwerktechnologien der nächsten Generation

Die Entwicklung von 6G, Terabit-Ethernet und anderen zukünftigen Netzwerktechnologien wird neue Anforderungen an Fehlererkennungs- und Korrekturverfahren stellen: