CRC算法原理与实现01——概述
创作时间:
作者:
@小白创作中心
CRC算法原理与实现01——概述
引用
1
来源
1.
https://www.myhardware.top/crc%E7%AE%97%E6%B3%95%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E7%8E%B001-%E6%A6%82%E8%BF%B0/
CRC算法在众多通信协议中有着广泛应用,然而,想要透彻理解它并非易事。本系列文章将从CRC算法的实际应用角度出发,全面介绍其基本概念、数学原理、实现方式,以及具体的Python和Verilog实现代码等内容。
一. CRC概述
循环冗余校验(Cyclic redundancy check,简称CRC),是一种根据数据产生简短且固定位数的校验码的一种散列函数,主要用来校验数据传输过程中是否出现了错误。数据发送方根据发送的数据和一个预先确定的多项式(称为生成多项式)计算出一个校验码(称为CRC码),附加到数据后面(如下图所示),接收方根据接收到的数据和同样的多项式计算CRC码,与收到的CRC码进行比对,一致则说明数据传输无误,不一致则传输出现错误。
CRC码有时会被称为校验和,这种说法是错误的,“和”表示加法,但CRC并非加法计算得到的,而是除法,所以还是应该称为CRC校验码。
二. 循环冗余校验名称的由来
CRC这种检错方法之所以被称为“循环冗余校验”,是因为其名称中的三个关键词——“循环”“冗余”和“校验”——分别反映了这种技术的核心特点和工作原理。
2.1 循环(Cyclic)
- 数学基础:CRC的核心数学原理是基于循环码(Cyclic Code),这是一种特殊的线性分组码。循环码的特点是,任何有效的码字经过循环移位后仍然是有效的码字。例如,如果一个码字是1011,那么将其循环右移一位得到1101,仍然是有效的码字。
- 多项式除法:CRC的计算过程可以看作是对数据位串进行多项式除法运算。数据被表示为一个二进制多项式,然后除以一个预定义的生成多项式(Generator Polynomial),得到的余数就是CRC校验码。这种多项式运算具有循环特性,符合循环码的定义。
2.2 冗余(Redundancy)
- 冗余位的引入:CRC通过在原始数据后面附加一定数量的冗余位(即CRC校验码)来实现错误检测。这些冗余位并不携带原始信息,而是用于检测数据传输或存储过程中是否发生了错误。
- 错误检测能力:冗余位的长度决定了CRC的检错能力。例如,CRC-32使用32位冗余位,能够检测出更多的错误类型,包括单比特错误、双比特错误以及某些突发错误。
2.3 校验(Check)
校验说明CRC只起到检查错误是否发生的功能,而不是纠错,它和纠错码是不一样的。检查出错误后通常的更正措施是重发。
三. CRC的发展历史
- 1950年代末,CRC校验的概念首次被提出,开启了数据错误检测技术的新探索,为后续数字通信与存储领域的数据可靠性保障埋下伏笔。
- 1961年,W. Wesley Peterson深入研究CRC算法,他的成果为CRC在计算和电信领域的广泛运用筑牢根基,使得更多科研人员关注到这一极具潜力的数据校验方法。
- 1985年,IEEE 802.3以太网标准发布,CRC-32在该标准下成功实现标准化,这一里程碑事件让CRC-32迅速在多种数字通信协议里得以应用,极大提升了网络数据传输的可靠性。
- 20世纪后期,硬盘、光盘等存储设备逐步兴起,它们为保证数据存储和读取的准确性,开始广泛引入CRC校验技术,虽难以确定确切起始年份,但大致在通信领域应用成熟之后,存储界抓住了这根保障数据质量的“救命稻草”。
- 进入21世纪,随着高速通信技术蓬勃发展,为满足如卫星通信、深空通信等高速通信系统的严苛要求,CRC-64应运而生,进一步拓展了CRC校验家族,助力前沿通信项目的数据安全防护。
- 当下,随着云计算、大数据、物联网等新兴技术浪潮汹涌来袭,CRC校验与时俱进,与其他数据验证和纠错技术紧密联合,持续为新兴领域的数据完整性保驾护航。
四 CRC校验的优缺点
4.1 CRC校验的优点
- 高效性:
- 计算速度快,适合硬件和软件实现。
- 通过简单的移位和异或操作完成,资源消耗低。
- 高检错能力:
- 能检测所有单bit错误。
- 如果生成多项式包含因子(x + 1),CRC可以检测所有奇数个bit错误。
- 能检测大多数双bit错误。
- 能检测大多数突发错误(连续的多bit错误),对于长度为r位的CRC,可以检测所有长度不超过r的突发错误。
- CRC可以检测部分多bit错误,但无法保证检测所有多bit错误。
- CRC码越长,检错能力越强。
- 灵活性:支持不同长度的校验码(如CRC-8、CRC-16、CRC-32等),可根据需求选择。
- 应用广泛:用于网络通信(如以太网)、存储系统(如磁盘、闪存)、数字通信(如USB、蓝牙)等领域。
- 确定性:对相同的数据生成相同的校验码,确保一致性。
4.2 CRC校验的缺点
- 仅用于检错,不能纠错:CRC校验只能检测错误,无法纠正错误,需要结合其他机制(如重传)来修复错误。
- 非加密性:CRC校验仅用于数据完整性检查,不具备加密功能,无法防止恶意篡改。
- 无法检测所有错误:虽然CRC校验能检测大多数错误,但对于某些特定的错误模式(如生成多项式的倍数错误),可能无法检测。
- 生成多项式选择影响性能:不同的生成多项式会影响CRC的检错能力,选择不当可能导致校验性能下降。
- 不适合高可靠性要求的场景:在对数据完整性要求极高的场景(如金融、航天),CRC可能不足以满足需求,需要结合更复杂的校验机制。
4.3 CRC校验优缺点总结
CRC校验的优点是高效、简单、检错能力强,广泛应用于数据传输和存储中。但其缺点是只能检错不能纠错,且对某些特定错误模式不敏感。在实际应用中,需根据具体需求选择合适的校验方法。
热门推荐
十月十五不一般,有4大特点指啥?老传统别丢了,日子越过越顺溜
中文教育XR资源研发装备,打造沉浸式、交互式的中文学习场景
基于单片机的多功能盆栽养殖装置设计
老工业城市依“新”攀“高”——内蒙古包头市持续推进产业优化升级
火车票永远难买?12306的发展是一部"斗智斗勇"的进化史
仓库的消防管理法规是什么
五一假期酒店预订热,但价格不再疯涨
绿色殡葬的兴起 环保替代品
互联网与传统行业薪酬结构差异在哪里
清华录取通知书和一个亿选哪个?街头采访大学生,答案出奇地一致
2025 学生竞赛全攻略:开启卓越成长之路
为什么供应链报表总出错?消费行业6大误区。
大美唐山丨西南交通大学唐山研究院新貌
家庭燃气灶选购全攻略:品牌、参数、安全一网打尽
如何挑选合适的收割机品牌?实用指南+案例分析
春季桑园怎么管理?
笔记本电脑英特尔超频怎么设置?有哪些风险和好处?
土葬和火葬哪个能转世
迟巍:需动态调整人力资本战略以应对人工智能挑战
什么是职场生存法则
拉肚子喝蜂蜜水有用吗?一文读懂蜂蜜水对腹泻的影响
磷偏低是什么原因
玻璃碗能否放入烤箱?关键看材质
国风外套内搭怎么选?通过色彩、材质、风格和场合等来综合考量!
跨境电商企业如何进行品牌建设和推广?怎样提高企业的竞争力和市场份额?
《棋士》背后的大时代:一部展现小人物命运的电视剧
额温枪正确使用方法图解
开倒车、逆流操作,轻资产是否走到头了?
档案库房温湿度调控系统功能详解
医保结算单的内容有哪些