CRC Implementierung

#5249624
Lesenswert?

Naja. Den CRC an die Meldung anhaengen und pruefen. Wo liegt das Problem 
? Der CRC sollte Teil des Protokolle sein. Falls der CRC nicht stimmt, 
gibt der Empfaenger keine Antwort, das Packet ist verschwunden und wird 
nochmals gesendet.

eigentlich enthaelt eine UDP Meldung schon einen CRC... implizit im 
Ethernet frame
Gast #5249655
Lesenswert?

LEON schrieb:
> Welche CRC Berechnung bzw. Polynom sollte man dafür einsetzen?

Idealerweise hat der µC ein CRC Modul und dann schaut man, welche 
Polynome dies unterstützt.
Ansonsten hilft dir google zu CRC Polynomen und deren Fähigkeiten 
Bitfehler zu entdecken.
#5249669
Lesenswert?

Wichtig ist auf beiden Seiten denselben Code zu verwenden. Per Copy 
paste. Das Polynom alleine reicht leider nicht. Wir hatten schon zu 
viele Implementation, die nicht gepasst haben, weil die Annahme war - 
passt schon.

Ein CRC16 kann 2^16 bit = 8kByte schuetzen, ein CRC32, 2^32bit = 
256MByte. Ich wuerd's beim CRC16 belassen und den falls noetig als 
Tabelle implementieren falls die Zeit knapp ist. Sonst als Bitschieber.
Gast #5249675
Lesenswert?

Ok vielen Dank.

Wie läuft das beim Empfänger ab? Muss über die ankommenden Daten 
(Daten[96]) eine CRC gebildet werden? Was passiert mit den vier weiteren 
Bytes in denen die CRC vom Sender enthalten ist?
Gast #5249730
Lesenswert?

LEON schrieb:
> Oder soll nur über die 96 Bytes (Daten) die CRC gebildet werden und mit
> der empfangenen CRC verglichen werden?

Natürlich! Was hätte es sonst für einen Sinn, CRC zu senden?
Am Besten so:

nachtmix schrieb:
> Am Empfänger wird der CRC über die Nachricht einschliesslich des
> angehängten CRC gebildet. Dabei sollte 0 rauskommen.

LEON schrieb:
> Es kann ja auch sein das beim Versenden die 4 Bytes für die CRC
> fehlerhaft sind.

Ja, das wäre dann halt insofern Pech, dass trotz eigentlich richtigem 
Datenempfang wiederholt werden muss - false positive. Dagegen kannst du 
dich letztlich nicht schützen und musst es auch nicht. Ein erfolgreiches 
Ergebnis sagt dir nur, dass mit sehr hoher Wahrscheinlichkeit kein 
Fehler erfolgt ist.
Denn theoretisch gäbe es auch den Fall, dass sowohl Daten als auch CRC 
so gefälscht werden, dass die CRC-Prüfung trotzdem noch passt. Diese 
Wahrscheinlichkeit lässt sich minimieren, wenn das Verhältnis der Längen 
von den Nutzdaten zu den CRC-Daten kleiner wird. Null wird sie trotzdem 
nicht, dafür die Wahrscheinlichkeit der false positiv größer.
Wie sagt man so schön: einen Tod musst du leiden ...
Gast #5249766
Lesenswert?

Wieso überhaupt CRC implementieren? Das sollte eigentlich im OSI Layer 2 
automatisch gemacht werden. Da wird ein Paket auch direkt verworfen, 
wenn die CRC nicht stimmt. Welchen Stack nutzt du denn? Oder haste was 
eigenes entwickelt?

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