软考
APP下载

CRC循环冗余码检错

CRC即循环冗余校验码(Cyclic Redundancy Check),它是一种数据传输检错的方法,是现代计算机网络和通信领域中最常用的差错控制技术之一。CRC码主要使用多项式计算和移位寄存器运算来实现数据的检错,其优点是简单易用、效率高、可靠性强,不需要请求响应机制和反馈确认,且能够检测到大多数的传输错误。

一、CRC校验原理

CRC校验主要是通过把数据流看成多项式和一个标准生成多项式的除法过程,得到的余数作为CRC校验码,将其附加到数据末尾,然后进行传输。接收方也采用相同的方法对接收数据进行除法计算,如果余数为0,则认为数据传输正常,如果余数不为0,则表明数据传输存在差错。

二、CRC校验实现

CRC校验的实现主要依靠一些多项式计算和移位寄存器运算,具体步骤如下:

1.选择或确定标准生成多项式,如CCITT和IEEE802的多项式。

2.将数据帧转化为比特流,并在其末尾添加任意数量的0。这些0位数目通常等于生成多项式的比特数。

3.以生成多项式的比特数为移位窗口大小,从数据的左端开始把数据存入移位寄存器。

4.对于每个0或1的数据位,执行如下操作:

4.1 移位寄存器中的数据全部左移一位。

4.2 如果左侧的位置是1,那么将生成多项式多项式的比特数将与寄存器的第一个元素异或;否则,不需要对数据做出任何动作。

5.完成所有的数据位,将移位寄存器中的值作为Remainder或余数,添加到原始数据末尾组成校验码。

6.如果在传输过程中,接收方收到的数据帧的校验和与其计算结果不相等,则表明数据传输存在差错。

三、CRC校验实例

以下是一个使用CRC校验码检测的例子,假定传输的数据位为0101。

1.选择标准生成多项式为x^3+x+1,在发送端将其转化为1011,添加3个0位得到1011000。

2.以生成多项式的比特数3为窗口大小,从左端将数据存入移位寄存器得到第一次的状态:101。

3.左移一位得到数据110,并检查左侧的位置是否是1,然后异或生成多项式1011,结果为111。

4.左移一位接下来的数据为10,与上一次的结果异或1011,得到110。

5.左移一位接下来的数据为01,与上一次的结果异或1011,得到100。

6.最后的余数为100,将其添加到原始数据末尾组成校验和1010000。

7.接收方收到的数据帧包括原始数据0101和校验和1010000。

8.接收方按照与发送方相同的方式计算校验和,如果计算出来的校验和与接收到的校验和不相等,则表明数据传输存在差错。

四、CRC校验的优缺点

CRC校验的优点在于:

1.可靠性较高,能够检测到大多数的传输错误。

2.计算过程简单明了,易于实现,效率高。

3.不需要请求响应机制和反馈确认,检验码能够直接附加到数据末尾传输。

4.应用范围广泛,不受传输媒介的限制。

CRC校验的缺点在于:

1.不能纠正差错,只能检测,对于误码重传的情况,可能会增加多次差错检测和纠正的时间。

2.如果误码长期存在,会增加冗余码长度,从而增加开销。

3.存在攻击风险,如对于生成多项式不可靠或被修改的情况,可能被恶意篡改或攻击。

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库