什么是CRC以及如何生成检验

在网络的信息的传输中,现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能变为0,而0也可能变为1.这就是比特差错。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC的检错技术。

什么是CRC?

CRC即 循环冗余校验码 (CyclicRedundancy Check :是数据通信领域中最常用的一种查错校验码,其特 征是信
息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计 算,并
将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

循环冗余检验的原理:

在发送端,先把数据划分为组,假定每组k个比特。现假定待发送数据M=101001(k=6)。CRC运算就是在数据
M 的后面添加供差错检测的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在所要发送的数据后面增加n
位冗余码,虽然增大了数据传输的开销,但却可以进行差错检测。当传输可能出现差错时,付出这种代价往往是值得的。

生成方式:

借助于模2除法则,其余数为校验字段。
例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1
假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001
x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;
采用模2除法则: 得余数为: 1010(即校验字段为:1010)
发送方:发出的传输字段为: 1 0 1 1 0 0 1 1010
信息字段 校验字段
接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)
如果能够除尽,则正确,
给出余数(1010)的计算步骤:
除法没有数学上的含义,而是采用计算机的模二除法,即除数和被除数做异或运算。进行异或运算时除数和被除数最高位对齐,按位异或。
10110010000
^11001
--------------------------
01111010000
1111010000
^11001
-------------------------
0011110000
11110000
^11001
--------------------------
00111000
111000
^11001
-------------------
001010
则四位CRC校验码就为:1010。
利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。
如何检验
在接收端吧接收到的数据以帧为单位进行CRC检验:把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到的余数R。
如果在传输过程中无差错,那么经过CRC检验得出的余数R肯定是0。
但如果出现误码,那么余数R仍等于0的概率是非常非常小的。

需要强调的是,在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接收,即“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的真虽然曾收到了,但最终还认为因为有差错被丢弃,即没有接受。以上所述的可以近似的表述为:凡是接收端数据链路层接受的帧均无差错。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值