CRC(Cyclic Redundancy Check)即循环冗余校验,是一种常用的数据校验方式。它的原理是在数据传输过程中添加一些冗余信息,这些冗余信息可以被接收方利用相同的算法进行计算,从而判断数据是否在传输过程中出现了错误。
CRC 校验的具体步骤如下:
1. 发送方将需要进行校验的数据划分为若干个 k 位的数据块,并在每个数据块的末尾加上 r 位的冗余信息(r 位可以根据需要进行选择,一般为 16 位或 32 位)。
2. 发送方根据一个生成多项式 G(x)(一个 r 次多项式),用模 2 除法对每个数据块进行计算,得到一个 r 位的余数。
3. 发送方将数据块和余数一起发送给接收方。
4. 接收方接收到数据块和余数后,用相同的生成多项式 G(x)对数据块进行模 2 除法计算,如果余数为 0,则说明数据传输没有错误;否则说明数据传输出现了错误。
举个例子,假设需要进行校验的数据为 101101,生成多项式为 G(x)=x^4 + x^3 + 1,计算过程如下:
1. 将数据划分为 5 位的数据块 10110,并在末尾加上 4 位的冗余信息 0001。
2. 用生成多项式 G(x)对数据块进行模 2 除法计算,得到余数 1010。
3. 将数据块 10110 和余数 1010 一起发送给接收方。
4. 接收方接收到数据块和余数后,用相同的生成多项式 G(x)对数据块进行模 2 除法计算,得到余数 0000,由于余数为 0,所以说明数据传输没有错误。
需要注意的是,CRC 校验只能检测出传输错误,而不能纠正错误。如果数据传输出现错误,接收