什么是循环冗余检查以及它是如何简单地工作的(for-dummies 风格)?

Posted

技术标签:

【中文标题】什么是循环冗余检查以及它是如何简单地工作的(for-dummies 风格)?【英文标题】:What is cyclic redundancy check and how it works in simple terms (for-dummies style)? 【发布时间】:2012-03-26 23:49:29 【问题描述】:

我无法理解听起来难听的术语“循环冗余检查”的概念和工作原理。我正在参加关于计算机网络的大学课程,但我已经迷路了。

问题是我对数学的理解非常有限(很久以前在学校学习数学并忘记了大部分内容)而且我无法了解例如生成多项式到底是什么,多项式必须做什么使用 CRC 并总结一下 - 所有这些对我来说似乎完全无法理解。

我阅读了关于 CRC 的 wiki 条目,但它对我没有帮助,因为我不擅长数学,而且所有这些符号和数学术语对我来说都像是中文。

我知道在网络上发送数据时使用 CRC 进行错误检测,但从那时起我就迷路了。

谁能帮我用简单的术语解释这个概念并举个例子?

在上一次讲座中,教授开始画所有这些 1 和 0,除以我不知道是什么,我只是盯着看,感觉很愚蠢。

如果有人能帮助我理解,我将不胜感激!

【问题讨论】:

你有没有试过在***上阅读一篇关于它的文章? 我建议您阅读以下pdf:HackersDelight.org/crc.pdf 是的,我都读过,但我想有人可以用更简单的术语更好地解释它...... 【参考方案1】:

如果您希望答案非常简单,您需要接受一些过于简单化的说法,如果您愿意接受,那就这样吧:

数据通过不完善的链接传输 - 途中可能会出现错误。想象一下,您想确保接收到的信息与传输的信息相同,而又不浪费太多带宽,您会怎么做?

您可以将每条信息传输两次,如果在接收端您看到第一个与第二个不同,您就知道发生了错误,您需要再次请求数据 - 但这会非常浪费,它会有效地将您的带宽减半。

现在,如果您可以计算出一个比数据本身小得多但又依赖于它的值,该怎么办?因此,如果数据沿途发生变化(由于错误),计算值将不再“匹配”数据,您就会知道发生了错误。有这样的计算吗?

简单的除法并取余数作为这个值呢?

假设我想传输信息/数字 1,000。我将它除以选定的数字 - 例如 6 ......这给了我 166 和余数 4。我将余数作为我的校验值,它比我实际传输的信息要小得多,所以我不会浪费带宽太大,我先传输 1,000,然后传输 4。接收器得到它,将数字 1,000 除以 6,如果余数为 4,则假定没有发生错误。

如果发生错误并且由于链接上的错误而收到 998 而不是 1,000 - 它会将其除以 6,得到与 4 不匹配的 2 的余数,并且 viola 它知道发生了错误。这就是CRC的基本原理。

当然它有点复杂,因为它除以多项式,但使用余数作为“表示数据的短值”以相同方式检查错误的原理仍然存在。

我希望这可以帮助您了解正在发生的事情;)

【讨论】:

这个过于简单的答案可能是真正理解 CRC 概念的一个很好的起点。 :)

以上是关于什么是循环冗余检查以及它是如何简单地工作的(for-dummies 风格)?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查循环计数? (以及它是偶数还是奇数)[重复]

FOR循环中的逗号运算符,它是如何工作的?

如何加速R中的循环计算循环

数据错误(循环冗余检查)

C中的for循环和char

列表如何在 python 中使用 for 循环实际工作?