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.
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.
Übertragungsfehler können in verschiedenen Formen auftreten:
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.
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
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.
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:
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.
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.
Die Paritätsprüfung ist eine der einfachsten Methoden zur Fehlererkennung und basiert auf der Anzahl der “1”-Bits in einer Datensequenz.
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
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
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.
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
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.
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
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.
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.
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
Der CRC-Berechnungsprozess kann wie folgt beschrieben werden:
In der Praxis wird die CRC-Berechnung typischerweise mit Schieberegistern und XOR-Operationen implementiert, was eine effiziente Hardwareimplementierung ermöglicht:
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
In der Praxis werden mehrere standardisierte CRC-Polynome verwendet, die für verschiedene Anwendungen optimiert wurden:
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
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
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:
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
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.
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.
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:
In diesem Abschnitt konzentrieren wir uns auf FEC-Techniken, da ARQ-Mechanismen typischerweise in höheren Protokollschichten implementiert werden.
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.
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.
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, …
Die Kodierung mit Hamming-Codes erfolgt in mehreren Schritten:
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
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
Ethernet (IEEE 802.3) verlässt sich primär auf Fehlererkennung durch CRC-32, ohne eigene Mechanismen zur Fehlerkorrektur zu implementieren:
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
Drahtlose Netzwerke operieren in deutlich herausfordernderen Umgebungen als kabelgebundene Netzwerke und implementieren daher typischerweise umfassendere Fehlerbehandlungsmechanismen.
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
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
Einige Netzwerktypen haben besondere Anforderungen an die Fehlerbehandlung aufgrund ihrer spezifischen Einsatzbedingungen.
Industrielle Netzwerke erfordern oft deterministische Kommunikation mit extrem hoher Zuverlässigkeit:
Satellitenverbindungen müssen mit extrem langen Latenzen und schwierigen Übertragungsbedingungen umgehen:
Fehlererkennung und -korrektur kann sowohl in Hardware als auch in Software implementiert werden, mit verschiedenen Trade-offs:
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
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
Bei der Implementierung von Fehlererkennung und -korrektur müssen verschiedene Leistungsaspekte berücksichtigt werden:
Verschiedene Techniken können die Leistung von Fehlererkennung und -korrektur verbessern:
Maschinelles Lernen zeigt vielversprechende Anwendungsmöglichkeiten im Bereich der Fehlerkorrektur:
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.
Die Entwicklung von 6G, Terabit-Ethernet und anderen zukünftigen Netzwerktechnologien wird neue Anforderungen an Fehlererkennungs- und Korrekturverfahren stellen: