A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS(试译)

注:
1. 感谢原文作者对CRC算法的研究及其文献。
2. 才疏学浅,难免有理解有误的地方,希望能指出。
3. 文中个别语句会保留原文。
4. 翻译仅供参考,以下是原文链接。

A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS

CRC错误检测算法 “简易” 指南

“Everything you wanted to know about CRC algorithms, but were afraid
to ask for fear that errors in your understanding might be detected.”


目录


摘要

1. 介绍:错误检测
2. 复杂度的必要性
3. CRC算法的前身
4. 多项式算法
5. 无借位的二进制算法
6. 例子
7. 选择一个POLY
8. BitbyBit CRC算法
9. 查表法


摘要


这份文档详细、准确、全面的解释了CRC(循环冗余算法),以及查表法的实现。很多关于CRC查表算法实现的文献,读起来有点晦涩(至少对我来说是这样的)。这份文档尝试对CRC算法做一个简洁明了的阐述,而且会对CRC高速算法的每一个细节进行详细的解释。除此之外,文档中提出一个叫做”Rocksoft^tm Model CRC Algorithm”的CRC算法模型。这个模型可以像大多数其他CRC算法一样传递参数,因此可以作为一个描述特定的算法的参考。
文中用C语言去实现了一个基本的CRC低速算法。最后有一个章节给出两种高速查表算法的实现,以及生成CRC查询表的算法。


1.介绍:错误检测


错误检测技术的目的是通过一个干扰码去判断接受者收到的消息是否被损坏。发送者会通过一个算法计算得到一个值(校验码),把这个校验码追加到这条消息末端。接受者可以通过使用相同的算法去计算接收到消息(不包括校验码部分)的校验值与消息末尾的校验值进行比较来判断消息是否正确。例如,如果我们选择一个简单的把消息字节数对256取模后相加得到的值作为校验码,那么消息就会像下面这样(10进制):

原始消息      :6    23     4
处理后的消息   :6    23     4     33
消息发送后     :6    27     4     33 

在上面的例子中,消息中第二个字节经过传输信道后,由23变为27,消息被损坏。但是,接受者可以通过比较消息末端的校验码(33)和自己算出来的校验码(37)来检测消息是否传输正确。如果校验码本身就是错误的,那么即使是正确的传输,也可能会被认为数据是损坏了。但是,这只是校验码出错。如果当校验码和原始消息都出错,但是在接受者看来消息是正确的情况下,这种情况就很危险了。如下所示:

原始消息      :6    23     4
处理后的消息   :6    23     4     33
消息发送后     :6    27     4     37     

不幸的是,这种事件发生的概率是完全不可避免的。最好的方法就是通过提高校验码的可靠性去尽可能的降低其发生的概率。

其他现存的错误检测技术则通过对消息加入冗余验证进行复杂的转换。
本文件只涉CRC算法:一种在完整数据末端添加校验码的错误检测算法。如下:

<原始消息><校验码>

2. 复杂度的必要性


在第一章节的例子中,我们明白了如何通过简单的计算一个校验码去检测消息是否被损坏。

原始消息      :6    23     4
处理后的消息   :6    23     4     33
消息发送后     :6    27     4     33 

这个算法的缺点就是太简单了。假设若干个(>= 2)随机损坏事件发生,就会有1/256的概率会检测不到这种损坏。例如:

原始消息      :6    23     4
处理后的消息   :6    23     4     33
消息发送后     :8    20     5     33 

关于上述概率的计算:
设接受者能检测到数据被损坏的事件为A,B事件为发生数据被损坏但是不能被检测,A事件的发生的概率为P;三个字节取模之后分别为:x,y,z;任意数m对进行256取模运算的结果r有256种可能(即0~255);
则有: _
P(A) =(256*256*256)/(256*256*256*256) = 1/256

Abby的话来讲就是:当数据传输错误,而校验码恰好与根据错误数据算出来的校验码一致时则无法检测出。
错误数据类型有 256*256*256,注意这时校验码总是取错误数据算出来的,它是由错误
数据确定的。而总的可能性为 256*256*256*256。这时校验码的传输也是随意的,两者相除。

3. CRC算法的前身
4. 多项式算法
5. 无借位的二进制算法
6. 例子
7. 选择一个POLY
8. BitbyBit CRC算法
9. 查表法

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值