CRC检验算法:
用途:
一帧bit数据在网络中传输的时候,可能会因为网络中的某些错误导致传输的数据异常(bit位0变1,1变0),这个时候就需要在发送端与接收端制定某种校验数据的规则,来检验接收到的数据和发送的端是一致的,而这个校验规则就是我们需要制定的校验算法,CRC就是其中一种,能检测多位数据的校验算法
概念:
1. 首先,发送端和接收端都统一规定某一个除数(如:1101或者多项式表示为 x3 + x2 + 1)
2. 发送的m位数据 + n位CRC校验码 == 最终发出的数据 ---》》 发向网络
3. 接收端 《《== 接收到数据从网络中,将数据除以上面约定统一的除数,如果能够整除,就说明传输正确,失败就说明接收的数据有误,需要重传了;(这里的除法不是数学当中的除法,是多项式除法,具体请看下面的例子,涉及的除法均是多项式除法)
疑问:看了上面的三个步骤,你一定还在疑惑CRC码如何得来的,我告诉你CRC码就是CRC算法最终的输出结果,我们要求取的就是CRC码:
例子 -- 计算CRC码:
1. 假设我们需要发送的原始数据为10110011,而我们的发送端和接收端统一的除数是 x4 + x3 + 1 = 11001,CRC算法规定,原始数据尾巴附加上(除数个数 - 1个0 )后,
才能让我们规定的除数去除,第一步除法就是
图片是盗用的哈:
2. 从上面看余数应该是100,但是CRC算法规定,CRC码必须只比除数少一位数,于是就给余数前面加一个0变成 0 1 0 0,而这个余数就是CRC码,原始数据加上CRC码就组成了我们最终发出去的数据:101100110100
3. 最后,在接收端,接收到的数据后除以规定的除数,能整除就OK了,CRC也计算完了。