循环冗余校验是什么?它在简单的术语中如何工作(适合“白痴”风格)?

18
我对这个听起来不太好听的术语“循环冗余校验”(CRC)的概念和工作原理感到困惑。 我正在参加计算机网络课程,但已经迷失了方向。
问题在于我对数学的理解非常有限(很久以前上过数学课程,现在大部分都忘了),例如我不知道生成多项式是什么东西,多项式与CRC有什么关系,总之,所有这些似乎对我来说都是无法理解的。
我阅读了 CRC 的维基百科条目,但没能帮助我,因为我不擅长数学,所有这些符号和数学术语对我来说就像中文一样难以理解。
我知道 CRC 用于在网络上传输数据时进行错误检测,但从那以后我就懵逼了。
有人能用简单的术语解释这个概念,并可能给出一个例子吗?
在上次讲座中,教授开始画出所有这些二进制位,做除法等操作,而我只是傻愣愣地看着感到很蠢。
如果有人可以帮我理解,我会非常感激!

你有没有尝试在维基百科上阅读相关文章? - kirilloid
我建议您阅读以下PDF文档:http://www.HackersDelight.org/crc.pdf - guga
是的,我读了两篇文章,但我认为有人可能能够更好地解释它,并用更简单的术语来表达。 - Boyko Arsov
1个回答

36

如果你想要简单的答案,你需要接受一定的过度简化。如果你可以接受,以下是答案:

数据通过不完美的链接传输 - 在传输过程中可能发生错误。想象一下,如果你想要确保接收到的信息与传输的信息相同而不浪费太多带宽,你该如何做呢?

你可以将每个信息片段传输两次,如果在接收端你看到第一个与第二个不同,你就知道出现了错误,并需要请求重发数据 - 但这会非常浪费,实际上会将你的带宽减少一半。

现在,如果你可以计算出一个比数据本身小得多但取决于它的值呢?因此,如果数据在途中改变(由于错误),计算出的值将不再与数据“匹配”,你就会知道产生了错误。是否有这样的计算方法?

对于简单的除法和取余数作为这个值,怎么样呢?

假设我想要传输一个信息/数字1,000。我用选定的数字 - 比如6来除以它……那就给我166和余数4。我把余数作为我的校验值,这个值比我实际传输的信息小得多,所以我不会浪费太多带宽,并传输1,000后面跟着4。接收者获取到数据,将数字1,000除以6,如果余数是4,那么它就认为没有发生错误。

如果由于链接出现错误而收到了998而不是1,000,接收者就会将其除以6,得到余数2,这并不匹配4,就知道出现了错误。这就是CRC的基本原理。

当然,它稍微有点复杂,因为它是通过多项式进行除法运算的,但使用余数作为“代表数据的短值”来检查数据是否存在错误的原理仍然适用。

希望这可以帮助你理解正在发生的事情;)


4
这个过于简化的回答可能是理解CRC概念的好起点。 :) - Amir Syafrudin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接