以太网FCS校验/CRC校验:
“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。
以下内容转载https://blog.csdn.net/qq_35608277/article/details/104432508
计算方法
从计算到原理,更易接受
知识准备
首先学会模2除法,就是异或操作:看例子
按步骤
1选择CRC生成多项式,这个一般提供标准
如在IBM的SDLC(同步数据链路控制)规程中使用的CRC-16(也就是这个除数一共是17位)生成多项式g(x)= x16 + x15 + x2 +1(对应二进制比特串为:11000000000000101);
而在ISO HDLC(高级数据链路控制)规程、ITU的SDLC、X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式g(x)=x16 + x15 + x5 +1(对应二进制比特串为:11000000000100001)。
次幂数字对应第几位,最高位和最低位0位需要为1.因此上述两个均为16+1位,首位为1,中间挑了一位为1.
2做模2除法计算,写除数,被除数,求余数(即为CRC码)
知道一个知识,校验码的位数比生成多项式的位数少1
题目:
已知
生成式:G(X) = X4 + X3 + 1
数据:10110011
求:
CRC码
解:
除数:11001(根据生成式写)
被除数:10110011_0000(末尾补共校验码长度的0,长度除数-1)
计算
所以,校验码为0100
从而,数据为10110011_0100
3作用
数据 10110011_0100如果没错,再除以11001应该是整除的;如果不是整除,那么传输出现了差错。
练习题
假设CRC生成多项式为G(X) = X5 + X4 +X+1,要发送的二进制序列为100101110,求CRC校验码是多少。(答案011010)
关于模2除法,下面的博客讲的通俗易懂:
https://blog.csdn.net/qq_33411687/article/details/82593466
https://blog.csdn.net/weixin_42061048/article/details/80171137
关于CRC算法的数学推导,下面博客讲的通俗易懂: