Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Cyclic redundancy check
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Standards and common use == Numerous varieties of cyclic redundancy checks have been incorporated into [[technical standard]]s. By no means does one algorithm, or one of each degree, suit every purpose; Koopman and Chakravarty recommend selecting a polynomial according to the application requirements and the expected distribution of message lengths.<ref name=koop04 /> The number of distinct CRCs in use has confused developers, a situation which authors have sought to address.<ref name="williams93">{{Cite web | url= http://www.wolfgang-ehrhardt.de/crc_v3.html | title= A Painless Guide to CRC Error Detection Algorithms V3.0 | access-date= 23 May 2019 | last= Williams | first= Ross N. | date= 24 September 1996 | archive-url= https://web.archive.org/web/20180402205812/http://www.wolfgang-ehrhardt.de/crc_v3.html | archive-date= 2 April 2018 | url-status= dead }}</ref> There are three polynomials reported for CRC-12,<ref name=koop04 /> twenty-two conflicting definitions of CRC-16, and seven of CRC-32.<ref name="cook-catalogue">{{Cite web | last = Cook | first = Greg | url = https://reveng.sourceforge.io/crc-catalogue/all.htm | title = Catalogue of parametrised CRC algorithms | access-date = 18 September 2020 | date = 15 August 2020 | archive-date = 1 August 2020 | archive-url = https://web.archive.org/web/20200801122415/https://reveng.sourceforge.io/crc-catalogue/all.htm | url-status = live }}</ref> The polynomials commonly applied are not the most efficient ones possible. Since 1993, Koopman, Castagnoli and others have surveyed the space of polynomials between 3 and 64 bits in size,<ref name=koop04>{{Cite book | last1 = Koopman | first1 = Philip | last2 = Chakravarty | first2 = Tridib | title = International Conference on Dependable Systems and Networks, 2004 | chapter = Cyclic redundancy code (CRC) polynomial selection for embedded networks | date = June 2004 <!-- date from http://www.ece.cmu.edu/~koopman/pubs.html --> | url = http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf | access-date = 14 January 2011 | pages = 145β154 | doi = 10.1109/DSN.2004.1311885 | isbn = 978-0-7695-2052-0 | citeseerx = 10.1.1.648.9080 | s2cid = 793862 | archive-date = 11 September 2011 | archive-url = https://web.archive.org/web/20110911095215/http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf | url-status = live }}</ref><ref name="cast93">{{Cite journal | last1 = Castagnoli | first1 = G. | last2 = BrΓ€uer | first2 = S. | last3 = Herrmann | first3 = M. |date=June 1993 | title = Optimization of Cyclic Redundancy-Check Codes with 24 and 32 Parity Bits | journal = IEEE Transactions on Communications | volume = 41 | issue = 6| doi = 10.1109/26.231911 | pages = 883β892 }}</ref><ref name="koop02">{{cite book | last = Koopman | first = Philip | chapter = 32-bit cyclic redundancy codes for Internet applications | title = Proceedings International Conference on Dependable Systems and Networks | date = July 2002 <!-- date from http://www.ece.cmu.edu/~koopman/pubs.html --> | url = http://www.ece.cmu.edu/~koopman/networks/dsn02/dsn02_koopman.pdf | access-date = 14 January 2011 | pages = 459β468 | doi = 10.1109/DSN.2002.1028931 | isbn = 978-0-7695-1597-7 | citeseerx = 10.1.1.11.8323 | s2cid = 14775606 | archive-date = 16 September 2012 | archive-url = https://web.archive.org/web/20120916185941/http://www.ece.cmu.edu/~koopman/networks/dsn02/dsn02_koopman.pdf | url-status = live }}</ref><ref name="koopman-best-crc-polys">{{Cite web|last=Koopman|first=Philip|date=21 January 2016|title=Best CRC Polynomials|institution=Carnegie Mellon University |url=https://users.ece.cmu.edu/~koopman/crc/|access-date=26 January 2016|archive-date=20 January 2016|archive-url=https://web.archive.org/web/20160120021307/http://users.ece.cmu.edu/~koopman/crc/|url-status=live}}</ref> finding examples that have much better performance (in terms of [[Hamming distance]] for a given message size) than the polynomials of earlier protocols, and publishing the best of these with the aim of improving the error detection capacity of future standards.<ref name="koop02" /> In particular, [[iSCSI]] and [[SCTP]] have adopted one of the findings of this research, the CRC-32C (Castagnoli) polynomial. The design of the 32-bit polynomial most commonly used by standards bodies, CRC-32-IEEE, was the result of a joint effort for the [[Rome Laboratory]] and the Air Force Electronic Systems Division by Joseph Hammond, James Brown and Shyan-Shiang Liu of the [[Georgia Institute of Technology]] and Kenneth Brayer of the [[Mitre Corporation]]. The earliest known appearances of the 32-bit polynomial were in their 1975 publications: Technical Report 2956 by Brayer for Mitre, published in January and released for public dissemination through [[DTIC]] in August,<ref name="Brayer1975">{{cite report | last = Brayer | first = Kenneth | date = August 1975 | title = Evaluation of 32 Degree Polynomials in Error Detection on the SATIN IV Autovon Error Patterns | publisher = [[National Technical Information Service]] |id=ADA014825 | url = https://apps.dtic.mil/sti/citations/ADA014825 | access-date = 31 December 2021 | archive-date = 31 December 2021 | archive-url = https://web.archive.org/web/20211231093215/https://apps.dtic.mil/sti/citations/ADA014825 | url-status = live }}</ref> and Hammond, Brown and Liu's report for the Rome Laboratory, published in May.<ref name="Hammond1975">{{cite journal | last1 = Hammond | first1 = Joseph L. Jr. | last2 = Brown | first2 = James E. | last3 = Liu | first3 = Shyan-Shiang | publication-date = May 1975 | title = Development of a Transmission Error Model and an Error Control Model | journal = NASA Sti/Recon Technical Report N | url = https://apps.dtic.mil/sti/citations/ADA013939 | access-date = 31 December 2021 |id=ADA013939 | bibcode = 1975STIN...7615344H | volume = 76 | year = 1975 | page = 15344 | archive-date = 31 December 2021 | archive-url = https://web.archive.org/web/20211231093212/https://apps.dtic.mil/sti/citations/ADA013939 | url-status = live }}</ref> Both reports contained contributions from the other team. During December 1975, Brayer and Hammond presented their work in a paper at the IEEE National Telecommunications Conference: the IEEE CRC-32 polynomial is the generating polynomial of a [[Hamming code]] and was selected for its error detection performance.<ref name="BrayerHammond1975">{{cite conference | last1 = Brayer | first1 = Kenneth | last2 = Hammond | first2 = Joseph L. Jr. |date=December 1975 | title = Evaluation of error detection polynomial performance on the AUTOVON channel | conference =NTC 75 : National Telecommunications Conference, December 1β3, 1975, New Orleans, Louisiana | volume = 1 | publisher = Institute of Electrical and Electronics Engineers | pages = ((8β21β5)) |oclc=32688603 |id=75 CH 1015-7 CSCB| bibcode = 1975ntc.....1....8B |url=https://books.google.com/books?id=2xxGAQAAIAAJ}}</ref> Even so, the Castagnoli CRC-32C polynomial used in iSCSI or SCTP matches its performance on messages from 58 bits to 131 kbits, and outperforms it in several size ranges including the two most common sizes of Internet packet.<ref name="koop02" /> The [[ITU-T]] [[G.hn]] standard also uses CRC-32C to detect errors in the payload (although it uses CRC-16-CCITT for [[Physical layer|PHY headers]]). CRC-32C computation is implemented in hardware as an operation ({{code|CRC32}}) of [[SSE4#SSE4.2|SSE4.2]] instruction set, first introduced in [[Intel]] processors' [[Nehalem (microarchitecture)|Nehalem]] microarchitecture. [[ARM architecture|ARM]] [[AArch64]] architecture also provides hardware acceleration for both CRC-32 and CRC-32C operations.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)