CRC校验原理及示例

原理

在要发送的帧后面附加一个数,生成一个新帧发送给接收端。到达接收端后,再把接收到的新帧除以(采用“模2除法”)发送端和接收端共同选定的某个特定除数。结果应该是没有余数,如果有余数,则表明该帧在传输过程中出现了差错。[因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就是已经能整除了)]。

名词解释

  1. 附加一个数:该数即用来校验的校验码,为二进制序列数。
  2. 模2除法:模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。只要以相同位数进行相除即可,两者对应位相同则结果为“0”,不同则结果为“1”。示例如下:
    模2除法
  3. 特定除数:一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比特串,通常是以多项方式表示,所以CRC又称多项式编码方法,这个多项式也称之为“生成多项式”)。

该值可按国际上通行的标准选择,但最高位和最低位必须均为“1”。如

  1. 在IBM的SDLC(同步数据链路控制)规程中使用的CRC-16(也就是这个除数一共是17位)生成多项式
    g(X)= X16 + X15 + X2 +1(对应二进制比特串为:11000000000000101);
  2. 而在ISO
    HDLC(高级数据链路控制)规程、ITU的SDLC、X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式
    g(X)=X16 + X15 + X5 +1(对应二进制比特串为:11000000000100001);

CRC校验原理步骤:

  1. 确定一个发送端和接收端都用来作为除数的二进制比特串。
  2. 看所选定的除数二进制位数(假设为k位),然后在要发送的数据帧(假设为m位)后面加上k-1位“0”,然后以这个加了k-1个“0“的新帧(一共是m+k-1位)以“模2除法”方式除以上面这个除数,所得到的余数(也是二进制的比特串)就是该帧的CRC校验码,也称之为FCS(帧校验序列)。但要注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。
  3. 把这个校验码附加在原数据帧(就是m位的帧)后面,构建一个新帧发送到接收端。最后接收端再把这个新帧以“模2除法”方式除以步骤1中选择的除数。如果没有余数,则表明该帧在传输过程中没出错,否则出现了差错。

CRC校验示例

假设CRC生成多项式为G(X) = X5 + X4 +X+1,要发送的二进制序列为100101110,求CRC校验码是多少

  1. 首先把生成多项式转换成二进制数
1.1 该二级制数的位数为6位(总位数等于最高位的幂次加1,即5+1=6)。
1.2 因为多项式只列出二进制值为1的位,所以该多项式的第5位、第4位、第1位、第0位的二进制均为1,其余位均为0。因此,得出的二进制比特串为110011
  1. 根据原始数据帧及步骤1得到的比特串,求出CRC校验码
2.1 因为校验码的位数比生成多项式的位数少1,由此得知CRC校验码的位数为5(6-1=5)2.2 原始数据帧为100101110,在其后补50,得到100101110000002.310010111000000"模2除法"的方式除以步骤1中的比特串(110011),得到的余数为11010,即为CRC校验码。
  1. 求出新的数据帧
3.1CRC校验码(11010)替换步骤2.2中补0的数据帧10010111000000的后5位,得到新帧10010111011010,把该帧传给接收端即可。
  1. 接受端验证
4.1 新帧到达接收端后,接收端会用新帧以"模2除法"的方式除以选定的除数1100114.2 验证余数是否为0。如果为0,则证明该帧数据在传输过程中没有出现差错,否则出现了差错。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值