Diskussion:Zyklische Redundanzprüfung

Letzter Kommentar: vor 10 Monaten von 2003:CC:9F14:2700:A0B4:5903:60D4:A021 in Abschnitt CRC-CCITT
Zum Archiv

Polynomtabelle

Bearbeiten

Die Zerlegung der Polynome in Produkte von Polynomen ist falsch. Erwiesen falsch ist die Zerlegung vom Bluetooth und vom CAN. Es liegt nahe, dass weitere Fehler vorliegen. (nicht signierter Beitrag von 141.76.96.114 (Diskussion) 09:34, 28. Jul 2015 (CEST))

Kommentar: Die Zerlegung der Polynome wird mit "Bitlogik" gehandhabt. So wird ein x^4 + x^4 zu 0 - Ich sehe das Problem also nicht

Umsetzung

Bearbeiten

Der Pseudocode ist meiner Meinung nach falsch. Ich habe gerade einen CRC7 für sd-Karten geschrieben und getestet und der sieht etwas anders aus. Abgesehen davon ist die verwendete Formulierung unverständlich wenn man den Algorithmus nicht schon kennt. Bitte um Überarbeitung des Pseudocodes.

CRC-CCITT

Bearbeiten

16-Bit CRC-CCITT fehlt im Artikel, wobei CCITT für Comité Consultatif International Télégraphique et Téléphonique steht, weil es davon für zahrleiche Applikationen, darunter Datenaustauschprotokolle (engl. data-transfer protocols), Computer-Interface-Fehlererkennung (engl. computer-interface error detection), vorgeschlagen wurde.gb Das CCITT, heute als International Telecommunication Union bzw. ITU bekannt, ist also Namensgeber von CRC-CCITT.

Warum ist das vielleicht wichtig? Weil im Artikel zwar CRC-CCITT vorkommt, es aber nicht erklärt wird. Auch interessant: CRC-CCITT ist das CRC-Verfahren auf Disketten,gb genauer gesagt bei einem Sektor, der auf dem Speichermedium selbst aus mehr Daten als dem Datenblock ("Sektor" aus Software-Sicht) besteht: Der Disketten-Controller (für Diskettenlaufwerke) und auch der Festplatten-Controller (für Festplattenlaufwerke) speichert nicht nur einen 512-Byte-Datenblock als "Sektor" ab (bei modernen 4k-Sektoren einen 4096-Byte-Datenblock), sondern zusätzliche Informationen, darunter z.B. ein Adressfeld (welcher Sektor ist es, der gerade gelesen wird) und im Datenfeld ein DAM (data address mark), danach die Daten, die im Sektor gespeichert werden sollen, gefolgt von Prüfbytes (CRC/ECC).gb Als CRC (nicht ECC), ob nun im Adressfeld oder im Datenfeld, wird hier laut dem Google-Buch Mikrorechner-Systeme: Mikroprozessoren, Speicher, Peripherie, von Helmut Bähring, eben CRC-CCITT verwendet – laut oben verlinktem Google-Buch "Error-Control Coding for Data Networks" ist CRC-CCITT "an error-detecting signature with 16 cyclic-redundancy check bits."

Wenn sich CRC-CCITT also auf jeder Diskette und Festplatte befindet (bei modernen Festplatten weiß es keiner mehr – Industriegeheimnis), sollte das vielleicht in den Artikel.

Hinzu kommt, dass Schlagwörter wie die im Linux-Kernel implementierten CRC-Verfahren fehlen:

CONFIG_CRYPTO_CRC32C:
CRC32c CRC algorithm with the iSCSI polynomial (RFC 3385 and RFC 3720)

A 32-bit CRC (cyclic redundancy check) with a polynomial defined
by G. Castagnoli, S. Braeuer and M. Herrman in "Optimization of Cyclic
Redundancy-Check Codes with 24 and 32 Parity Bits", IEEE Transactions
on Communications, Vol. 41, No. 6, June 1993, selected for use with
iSCSI. Castagnoli, et al Cyclic Redundancy-Check Algorithm.  Used
by iSCSI for header and data digests and by others.

Used by btrfs, ext4, jbd2, NVMeoF/TCP, and iSCSI.
CONFIG_CRYPTO_CRC32:
CRC32 CRC algorithm (IEEE 802.3)

Used by RoCEv2 and f2fs.
CONFIG_CRYPTO_CRCT10DIF:
CRC16 CRC algorithm used for the T10 (SCSI) Data Integrity Field (DIF)

CRC algorithm used by the SCSI Block Commands standard.
CONFIG_CRYPTO_CRC64_ROCKSOFT:
CRC64 CRC algorithm based on the Rocksoft Model CRC Algorithm

Used by the NVMe implementation of T10 DIF (BLK_DEV_INTEGRITY)

See https://zlib.net/crc_v3.txt

Hinzu kommen einige spezieller CRC-Bibliotheken des Linux-Kernels, die von Treibern (Kernel-Modulen) verwendet werden können. Darunter:

CONFIG_CRC_CCITT:
This option is provided for the case where no in-kernel-tree
modules require CRC-CCITT functions, but a module built outside
the kernel tree does. Such modules that use library CRC-CCITT
functions require M here.

Aber auch CRC4, CRC7, CRC8 und etwas das "CRC ITU-T V.41" genannt wird:

CONFIG_CRC_ITU_T:
This option is provided for the case where no in-kernel-tree
modules require CRC ITU-T V.41 functions, but a module built outside
the kernel tree does. Such modules that use library CRC ITU-T V.41
functions require M here.

Nun kenne ich mich leider mit Zyklischer Redundanzprüfung und den diversen unterschiedlichen Verfahren leider nicht wirklich aus. Ich weiß nur, dass das mit der Allgemeinverständlichkeit wohl etwas schwer herzustellen sein wird, wenn die Thematik selbst so schwer ist (höhere Mathematik). Aber zumindest sollten die "Buzzwords" enthalten sein: neben CRC32 also auch CRC32c bzw. Castagnoli, und eben auch CRC-CCITT.

Andreas 21:50, 5. Nov. 2023 (CET)Beantworten

Alles richtig was du schreibst. Der Artikel über CRC lässt leider unerwähnt, dass manche CRC die Bits eines Bytes des Datenstroms umdrehen (RefIn). Dann gibt es noch Varianten die die Bits des errechneten CRC Wert umdrehen (RefOut). Eine ausführliche Tabelle gibt es hier: https://reveng.sourceforge.io/crc-catalogue/all.htm Vollständig ist diese Liste wahrscheinlich auch nicht... Die Namen der CRCs sind auch nicht standardisiert und werden gerne durcheinandergewürfelt (insb. wegen RefIn und RefOut). --2003:CC:9F14:2700:A0B4:5903:60D4:A021 19:44, 15. Feb. 2024 (CET)Beantworten