循环冗余
今天学习计算机网络的时候对于循环冗余校验不是很理解,所以在此总结并加深一下理解
- 使用循环冗余的目的
主要是用来检测或校验数据传输或者保存后可能出现的错误
- 原理
在发送端将数据划分为组,假定每组k个比特,待传送数据为M则CRC运算就是在数据M的后面添加供差错检测用的k位冗余码,则一共发送(k+M)位。
- 优缺点
在所要发送的数据后面增加k位的冗余码,虽然会增大传输的开销,但却可以进行差错检测。在传输可能会出现差错时,这种代价往往是很值得的。
- 实现方法
(首先需要了解一下异或运算)
即参与运算的两个值,如果相对应的bit位相同,则结果为0,否则为1
0^0 = 0,
1^0 = 1,
0^1 = 1,
1^1 = 0
在数据M后添加n个0,得到的(k+M)位的数除以双方事先商定的长度为(k+1)即为除数P,从而得出商是Q 余数是R(k位,比除数少一位) 将余数R作为冗余码拼接在数据M后发送出去。
这种为了进行检错而添加的冗余码常称为帧检测序列FCS
例:M=101001,假定除数P为1101,在M后加三个0,经过运算则得到余数R=001。将这个余数R拼接在数据M后发送出去,因此加上FCS后发送的帧是101001001 (k+M)位
- 关于数据后面添加几个n的计算方法
利用除数P生成多项式P(X)
例:P=1101,则可生成
P(X)=1x3+1x2+0x1+1x0=1x3+1x2+1*x0
最高项次数为3则n为3个0
6.冗余计算示例
每次计算后将除数与余数第一个1匹对
7. 注
循环冗余检验CRC和帧检验序列FCS并不是同一个概念。CRC是一种检错方法,而FCS是添加在数据后面的冗余码
在检错方法上可以采用CRC,也可以不用CRC
参考文献
谢希仁《计算机网络》
盐城工学院-计算机网络原理<周刚 、巩永旺>
CRC校验码演示