数据长度与CRC长度

Rob*_*ert 34 crc32 crc

我见过8位,16位和32位CRC.

在什么时候我需要跳到更宽的CRC?

我的直觉反应是它基于数据长度:

  1. 1-100字节:8位CRC
  2. 101 - 1000字节:16位CRC
  3. 1001 - ??? 字节:32位CRC

编辑:查看有关CRC和洛特答案的维基百科页面,这里有'我们所拥有的:

<64字节:8位CRC

<16K字节:16位CRC

<512M字节:32位CRC

S.L*_*ott 32

这不是一个研究课题.它真的很好理解:http://en.wikipedia.org/wiki/Cyclic_redundancy_check

数学很简单.8位CRC将所有消息分解为256个值中的一个.如果您的消息长度超过几个字节,则具有相同散列值的多个消息的可能性会越来越高.

类似地,16位CRC为您提供65,536个可用哈希值中的一个.具有这些值之一的任何两条消息的几率是多少?

32位CRC为您提供大约40亿个可用的哈希值.

来自维基百科文章:"最大总块长度等于2**r ? 1".这是有点的.您不需要做太多研究就可以看到这2**9 - 1是511位.使用CRC-8,多于64字节的多条消息将具有相同的CRC校验和值.

  • 如果使用 CRC 来检测文件的更改,这是准确且有用的。但是,如果将其用作摘要来检测文件之间的重复项,则情况会更加复杂。具体来说,生日悖论要求我们考虑我们期望拥有多少不同的价值观。 (2认同)
  • 我认为比 CRC 宽度(r-1,而不是 2^r-1)长的 *any* 消息将有多个消息映射到相同的校验和。IOW,任何超过一个字节长的消息,都会有重叠的 CRC8 映射。我认为(其中一个)挑战是设计映射以使消息字符串在散列上的分布是统一的。 (2认同)

小智 6

CRC的有效性取决于多种因素.您不仅需要选择CRC的SIZE,还需要选择GENERATING POLYNOMIAL.根据以下因素进行复杂且非直观的权衡取舍:

  • 信道的预期误码率.
  • 错误是倾向于以突发形式发生还是倾向于扩散(突发是常见的)
  • 要保护的数据长度 - 最大长度,最小长度和分布.

Philip Chopman和Tridib Chakravarty在2004年可靠系统和网络国际会议的会议记录中公布的"循环冗余码多项式选择嵌入式网络"一文给出了非常好的概述并提出了几点建议.它还提供了一个参考书目,以便进一步理解.

http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf


sup*_*cat 5

CRC 长度与文件大小的选择主要与以下情况相关:一个输入与“正确”输入的差异比“正确”输入相差三个或更少位的可能性,而不是一个完全不同的输入。给定两个非常不同的输入,错误匹配的可能性对于大多数形式的 8 位校验值(包括 CRC)约为 1/256,对于大多数形式的 16 位校验值(包括 CRC)约为 1/65536等。CRC 的优势来自于它对非常相似的输入的处理。

对于多项式生成两个长度为 128 的周期的 8 位 CRC,在比未检测到的数据包短的数据包中,单、双或三比特错误的比例不会是 1/256——它将为零。与周期为 32768 的 16 位 CRC 类似,使用 32768 位或更少的数据包。

但是,如果数据包长于 CRC 周期,则如果错误位之间的距离是 CRC 周期的倍数,则双位错误将无法检测到。虽然这看起来不太可能发生,但 CRC8 在捕获长数据包中的双位错误方面比在捕获“数据包完全加扰”错误方面要差一些。如果双位错误是第二种最常见的故障模式(在单位错误之后),那就很糟糕了。然而,如果任何破坏某些数据的东西都可能破坏其中的大部分数据,那么具有双位错误的 CRC 的低劣行为可能不是问题。