Fehlererkennung und -behandlung Gründe Thermische Elektronenbewegung in Halbleitern oder Leitungen Elektromagnetische Einstrahlung (Motoren, Blitze, benachbarte Leitungen) Bitfehlerrate ist die Wahrscheinlichkeit, daß ein einzelnes Bit innerhalb eines bestimmten Zeitraumes gestört ist Fehlerarten Einzelfehler Fehlerbündel (burst error) eine bestimmte Anzahl aufeinanderfolgender Bits ist gestört in der Praxis häufig vorkommende Fehlerart Typische Bitfehlerraten Telefonleitungen : 10-5 Digit. Ferndatennetze: 10-6...10-7 Lokale Koaxialkabel-Netze: 10-9 Lichtwellenleiter: 10-12 Fehlerbehandlungsmethoden Fehlererkennende Verfahren und Korrektur durch Neuübertragung (backward oder feedback error control) Parity Verfahren Prüfsumme Cyclic Redundancy Check (CRC) Gleichzeitig fehlererkennende und -korrigierende Verfahren ohne Neuübertragung (forward error control) Hinzufügen von Redundanz zur Nutzinformation in Form von fehlerkorrigierenden Codes (z.b. Hamming Code, nicht behandelt) Redundanz = redundante Bits Nutzdatenbits Gesamtzahl übertragener Bits Nutzdatenbits = Nutzdatenbits Paritätsverfahren Gerade (even) / ungerade (odd) Parität Hinzufügen eines Paritätsbits zu jedem Zeichen derart, daß die Gesamtzahl der Einsen gerade / ungerade ist Realisierung (E)XOR wird auch als Modulo-2 Addierer bezeichnet (Überlauf entfällt) Die Nutzdateninformation wurde um zusätzliche Redundanz erweitert Keine Fehlerkorrektur möglich Erkennt nur Einzelbitfehler und eine ungerade Anzahl von Bitfehlern, damit für burst errors weniger geeignet Redundanz = 1/(n-1) für n insgesamt übertragene Bit pro Zeichen
Prüfsumme Anwendung des Paritätsverfahrens auf ganze Blöcke von Daten Modulo-n Addition von k-bit breiten Bitgruppen, k=log 2 (n) addiere z.b. hundert 8-Bit Zeichenwerte modulo-256 der Überlauf dieser k-bit breiten Addition bleibt unberücksichtigt das Ergebnis der Addition ergibt die k-bit Prüfsumme (block check character), die mitübertragen wird das Parity-Verfahren ist davon eine Untermenge mit n=2 und k= 1 erkennt auch 2 Bit Fehler, wenn sie nicht in dem gleichen durch eine Prüfsumme gesicherten Block liegen durch Prüfsummenbildung über nichtsequentielle Bitgruppen Burstfehler besser erkennbar Zeilen- und spaltenbezogene Prüfsumme Generierung der Prüfsumme in zwei Schritten: 1) Spaltenparität (über alle Zeichen eines Blocks wird spaltenweise die Parität ermittelt) 2) Zeilenparität (= Parity wie o.a.) über alle Bits eines Zeichens und die Spaltenparitätsbits Das resultierende neue Zeichen ist die Prüfsumme erkennt alle ungeraden Bitfehler und alle geraden mit ungerader Anzahl in mindestens einer Zeile oder Spalte 2-Bit-Fehler immer, 4 Bit-Fehler manchmal erkennbar Redundanz (im Beispiel) = 16/56 = 28,5%, recht hoch Cyclic Redundancy Check (CRC) Basiert auf polynomialen Codes (hier nicht im Detail betrachtet) gegeben sei M = k-bit Daten (message) R = n-bit Divisionsrest mit k > n G = (n+1)-bit Divisor bzw. Generatorpolynom Q = Quotient dann gilt bei Rechnung in modulo-2 Arithmetik n M Q R n 2 M 2 + R = + (Glg. 1) = Q (Glg. 2) G G G M n 2 + R Beweis von (2) durch Einsetzen von (1) in (2): Q R R = + + G G G In modulo-2 ergibt Addition gleicher Zahlen immer Null R/G+R/G=0 q.e.d. Vorgehensweise Füge an die Nutzdaten M soviele Nullen an wie CRC-Stellen berechnet werden, also n (vgl. Term 2 n in Glg. 1) Dividiere die Nutzdaten (inl. angefügter Nullen) in modulo-2 durch ein gegebenes Generatorpolynom G Der n-bit Divisionsrest R wird als CRC-Prüfsumme am Ende der k-bit Nutzdaten mitübertragen (vgl. rechte Seite von Glg. 1) Im Empfänger wird die Bitsequenz in modulo-2 durch das gleiche Generatorpolynom G dividiert (Quotientenbit = 1, wenn MSBs beider Operanden = 1, sonst = 0) Bei fehlerfreier Übertragung (im Rahmen der erkennbaren Fehler) ist der Divisionsrest gleich Null (vgl. Glg. 2), sonst ungleich Null Bemerkung Die modulo-2 Division läßt sich besonders einfach durch bitweise EXOR- Verknüpfung von Dividend und Divisor realisieren
Beispiel für CRC-Berechnung und -Verifikation Generierung des CRC-Codes in Hardware M = 11100110 k = 8 G = 11001 n = 4 (!) CRC- Berechnung im Sender (FCS = frame check sequence = CRC) CRC- Verifikation im Empfänger links: fehlerfreie Übertragung rechts: Fehlerfall Das verwendete Generatorpolynom bestimmt die Art der Rückkopplung im FCS (CRC) -Schieberegister, hier: G(X) = X 3 +1, Funktion: FCS Schieberegister löschen, Nutzbits parallel in PISO Beginnend mit MSB werden Nutzbits mit FCS-SR-Ausgang XORverknüpft und ins FCS-SR zurückgekoppelt gemäß G(x) Nutzbits erscheinen seriell an TxD-Ausgang hier N=1, d.h. nach 8 Bits wird PISO gelöscht und FCS Registerinhalt (= CRC) auf Ausgang gegeben
Verifikation des CRC-Codes in Hardware Diskussion des CRC-Verfahrens Generatorpolynome werden üblicherweise so dargestellt, daß Bitpositionen = 1 Potenzen von x entsprechen Gebräuchliche G(x): CRC-16 = X 16 + X 15 + X 2 +1 = 1 1000 0000 0000 0101 CRC-32 = X 32 + X 26 + X 23 + X 16 + X 12 + X 11 + X 10 + X 8 + X 7 + X 5 + X 4 + X 2 + X + 1 Fehlererkennung eine Herleitung erfordert eine umfangreiche Analyse CRC-16 erkennt in einem max. 4095 Bytes langen Datenblock alle ungeradzahlig auftretende Bitfehler alle 2-Bit Fehler alle Fehlerbursts kleiner als 16 Bit sehr effizient
Bisher diskutierte (Übertragungs-)Verfahren im Überblick Grundlagen von Leitungsprotokollen Aufgabe eines Leitungsprotokolls ist es, Datenblöcke zuverlässig, unverfälscht und schnell von einer DEE (Datenendeinrichtung, data terminal equipment, DTE) zur anderen zu transportieren Ein einfaches, aber gebräuchliches Verfahren: Echo-Überwachung (echo checking) Der Empfänger sendet die empfangene Information an den Sender zurück Der Sender überprüft die Fehlerfreiheit, sendet ggf. neu Einsatz z.b. bei an entfernte Rechner angeschlossenen Terminals Das eingegebene Zeichen wird an Computer gesendet und von diesem reflektiert Falsch übertragene Zeichen durch Ausgabe spezieller Steuerzeichen (i.a. DEL) löschbar Vorteil Geringer Aufwand Nachteile der Echo-Überwachung Hälfte der Kanalkapazität für das Echo beansprucht Sender/Empfänger erfordern auch Empfangs-/Sendemöglichkeiten Fehlerfreies Senden, aber Fehler im Echo möglich unnötiges erneutes Senden langsam, da immer das Echo abgewartet weden muß Alternative: Empfänger sendet nur kurze Mitteilung an Sender, ob Information fehlerfrei ist oder erneut gesendet werden muß ARQ Protokolle
Automatische Wiederholungsanforderung (ARQ) ARQ = automatic repeat request Empfänger quittiert Übertragung entweder positiv (ACK) oder auch negativ (negative acknowledge, NAK) Erst dann überträgt Sender den neuen Block oder wiederholt den vorherigen Sende-und-Warte ARQ-Protokoll (idle IRQ) weitere Voraussetzung: Sende-und-Warte ARQ-Protokoll Blocknumerierung war z.b. der gesendete Block einwandfrei empfangen worden und nur die Quitttung gestört, würde ein erneutes Senden des gleichen Blocks als neuer Block interpretiert daher ist eine Numerierung des Blocks nötig hier genügt eine abwechselnde Markierung mit einer Null und einer Eins Voraussetzungen für einwandfreie Funktion Zeitsteuerung im Sender Wenn der Sender eine vorbestimmte Zeit keine Bestätigung bekommen hat (weil der Datenblock beim Senden oder das ACK beim Quittieren verloren ging), muß er denselben Block erneut senden optional: Verkürzte Wartezeiten durch NAK-Signal erreichbar das Ende der Wartezeit bei Fehler nicht abwarten, sondern sofort mit NAK quittieren
Sende-und-Warte ARQ mit Anfrage Alternierende Quittungsbestätigung wenn Sender keine Antwort bekommt, kann er eine Anfrage (ENQ = enquiry) an den Empfänger richten dieser antwortet mit der Wiederholung des letzten gesendeten Zeichens vorheriges Beispiel zeigt das Problem, ein ACK einem bestimmtem Block zuzuordnen Zur eindeutigen Zuordnung dienen alternierende Bestätigungen, z.b. durch 0-ACK für 0-Blöcke und 1-ACK für 1-Blöcke hier: Block N geht verloren das ACK wird aber als Quittung für Block N aufgefaßt (anstatt als Quittung für Block N-1) hier: ACK für Block N geht verloren ACK wird als Quittung für Block N aufgefaßt es ist für den Sender nicht zu erkennen, ob nur die Quittung oder auch die Daten gestört sind damit eindeutig bestimmbar, in welchem Zustand sich das Protokoll befindet offensichtlich kann ein Protokoll u.a. in Form einer Zustandsmaschine beschrieben werden