Fehlerkorrigierender Code

Gast #2749072
Lesenswert?

Bei einer UDP-Übertragung möchten wir Übertragungsfehler erkennen und 
nach Möglichkeit auch korrigieren.

Wir suchen deshalb momentan ein oder mehrere gute Fachbücher und 
Webseiten, die zu diesem Thema praxisrelevante Informationen liefern.
Über entsprechende Tipps würden wir uns sehr freuen.

Schon mal Danke für alle Hinweise :-)
Gast #2749075
Lesenswert?

das Hauptproblem bei UDP ist aber nicht das packet defekt sind, sondern 
das packete in der falschen reihenfolge oder doppelt oder überhaupt 
nicht ankommen. Wenn nichts ankommt kannst du auch nicht korrigieren.

Fehlerkorrektur hat mit UDP recht wenig zu tun, eventuell mal getrennt 
danach suchen.
#2749136
Lesenswert?

Erkennung über übliche CRC Verfahren. Oder Hash Funktionen.
Korrektur über redundante Daten. Müsste aber auch suchen was für 
Protokolle da existieren und am günstigsten sind.
Dazu müsstet ihr aber erst mal spezifizieren, welche Arten von Fehlern 
noch korrigiert werden sollen.
1 Bit pro Byte, 2 Bit pro Byte, einzelne Bytes pro Paket, ...
Eventuell auch mal bei fehlerkorrigierendem Ram oder bei RAID anschauen 
wie die es machen.
#2749144
Lesenswert?

Udo hat Recht: Es ergibt wenig Sinn, ohne eine Vorstellung von Art und 
Dimension auftretender Fehler jetzt alle möglichen Verfahren in die 
Runde zu werfen. So ist es beispielsweise ein erheblicher Unterschied, 
ob es eher Einzelbitfehler oder eher Burstfehler sind, oder ob man 
aufgrund des UDP-Verfahrens ohnehin immer ganze Frames abschreiben muss.

So sind ja UDP-Frames im Ethernet durch eine CRC abgesichert. Wenn die 
Fehler also auf dieser Übertragungsebene stattfinden, dann muss man 
immer komplette Frames abschreiben und sich Gedanken darüber machen, wie 
man komplette Frames ersetzt.
Gast #2749195
Lesenswert?

@ A. K.

Überwiegend haben wir es mit einzelnen Bitfehlern zu tun. Burstfehler 
kommen aber auch vor.

Es ist ganz klar, dass wir nicht jedes UDP-Paket retten können. Trotzdem 
freuen wir uns über alle Daten, die (direkt oder restauriert) fehlerfrei 
ankommen.
Gast #2749209
Lesenswert?

Hamming schrieb:
> Überwiegend haben wir es mit einzelnen Bitfehlern zu tun. Burstfehler
> kommen aber auch vor.

wie kann das sein? damit sollte der die CRC auf der MAC ebende schon 
falsch sein und damit das Packet überhaupt nicht ankommen.

dann gibt es scheinbar sogar eine Prüfsumme im UDP selber:

http://de.wikipedia.org/wiki/User_Datagram_Protocol

wenn ihr bitfehler habt, dann habt ihr eventuell auf dem gerät defekten 
RAM.
(Firma: HH) #2749214
Lesenswert?

Wenn ich Daten direkt über physikalische Leitungen übertrage (per SPI, 
I2C oder sowas), dann machen fehlerkorrigierende Kodierungen Sinn.

Bei Ethernet / UDP nicht. -> OSI-Schichtenmodell. Siehe auch Peter IIs 
Kommentar:

Peter II schrieb:
> wie kann das sein? damit sollte der die CRC auf der MAC ebende schon
> falsch sein und damit das Packet überhaupt nicht ankommen.

Das heisst mit eurer Fehlerkorrektur würdet ihr einfach nur Ressourcen 
verschwenden, ein bisschen Rechnen, aber ohne Sinn. Die Korrektur wird 
nie anspringen.
(Firma: HH) #2749268
Lesenswert?

Hamming schrieb:
> Wir können aber versuchen, statt die fehlerhaften Pakete wegschmeißen zu
> lassen, diese Pakete zu retten.

Dann ist das kein UDP mehr, sondern ein selbstgestricktes IP-Protokoll.
Im übrigen können UDP-Pakete an jedem Netzwerkknoten aufgrund 
fehlerhafter Prüfsumme verworfen werden. Das muss nicht zwingend am 
letzten (Ziel-)knoten passieren.
Gast #2749281
Lesenswert?

Han sel schrieb:
> Im übrigen können UDP-Pakete an jedem Netzwerkknoten aufgrund
> fehlerhafter Prüfsumme verworfen werden.

Stimmt das wirklich?
Bei wikipedia ist zu lesen:
"Die Prüfsumme ist optional, wird aber in der Praxis fast immer benutzt, 
falls nicht, wird diese auf „0” gesetzt."
#2749305
Lesenswert?

Hamming schrieb:
> Udo Schmitt schrieb:
>> Und ihr seid auch sicher daß UDP der richtige Weg ist? (TCP?)
>
> Ja, wir können nur eine begrenzte Anzahl von Daten übertragen und
> möchten (trotz nicht vermeidbarer Störungen) möglichst viele fehlerfreie
> Daten erhalten.

Ja und? Was sollte da UDP an Vorteilen gegenüber TCP bieten?
UDP:
verbindungslos
keine Reihenfolge garantiert
Empfang von Daten nicht sicher
Pakete werden überall hingeschickt

TCP ist verbindungsorientiert, voll duplexfähig, Reihenfolge ist 
gesichert ...
hat also nur Vorteile.

Kling für mich wieder mal nach: "Ich will das aber mit dem Mittel A 
machen, auch wenn Methode B oder C besser sind"
Ich mag mich ja täuschen...
(Firma: BfEHS) #2749315
Lesenswert?

Es ist doch eigentlich so wie Udo Schmitt es schreibt.

UDP ist per Definition für schnelleren Datenverkehr, dafür mit einigen 
Nachteilen bei der Sicherheit und Stabilität der Datenübertragung 
erfunden. UDP-Light auch...

TCP ist dann das entsprechende Gegenstück dazu.

Also sollte man überlegen welches Werkzeug man für welchen Zweck 
einsetzt.

Mit einem Flammenwerfer bekommt man ein BGA auch gelötet. Ob es sinnvoll 
ist muss jeder selbst entscheiden.
#2749329
Lesenswert?

Rene Schube schrieb:
> UDP ist per Definition für schnelleren Datenverkehr,

Das ist eine mögliche Begründung von UDP, aber nicht die einzige. Bei 
NFS ist aber mittlerweile auch TCP recht verbreitet.

Auch bei 1:N Verbindungen kann UDP sinnvoller sein als TCP, unabhängig 
vom Tempo.

Wenn der IP-Layer auf einem Medium mit geduldigem Retry sitzt, dann kann 
TCP tödlich sein, weil bei zeitweiligen aber vom IP-Layer nicht 
identifizierbaren Ausfällen des Mediums sonst die TCP-Retries den Kanal 
regelrecht verstopfen können (ein Fall aus der Praxis, da gab es 3 
Retry-Layer übereinander, je tiefer desto geduldiger - das war falsches 
Design von A bis Z).
Gast #2749361
Lesenswert?

A. K. schrieb:
> UDP kann auch dann (hier?) erforderlich sein, wenn es wichtiger ist, den
> neuesten Stand der Daten zu haben, als wirklich alle Daten zu haben.

Das ist der Fall.

Bei nicht korrekt übertragenen Daten würden die fehlenden Daten durch 
die zuletzt gültigen Daten ersetzt werden.
#2749375
Lesenswert?

Zwei einfache Beispiele dafür, wie man Blöcke fester Länge ohne grossen 
Rechenaufwand redundant übertragen kann, wenn jeder einzelne Block 
bereits per CRC gesichert ist - hier also einem UDP-Frame im Ethernet 
entspricht. Sie benötigen aber Puffer für einige Blöcke:

(1) N Blöcke übertragen und währenddessen einen weiteren Block aufbauen, 
der ein XOR-Summe über die Daten der Blöcke bildet. Also Byte 0 vom 
XOR-Block ist Byte 0 vom ersten Block XOR Byte 0 vom zweiten Block usw. 
Diesen XOR-Block anschliessend senden. Innerhalb dieser N+1 Gruppe ist 
ein Block rekonstruierbar.

(2) Wenn grössere Burst-Fehler wahrscheinlich sind (Funkstrecke, 
Bandspeicher) und daher oft zwei aufeinander folgende Blöcke defekt 
sind, dann kann man das eben beschriebene Verfahren modifizieren und die 
geraden und ungeraden Blöcke in zwei XOR-Blöcken getrennt akkumulieren. 
Dann sind zwei aufeinander folgende Blöcke immer rekonstruierbar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren