CRC校验

来源:互联网 发布:程序员考核表 编辑:程序博客网 时间:2024/06/05 11:14

差错控制
传输过程中可能会产生比特差错:1可能会变成0而0也可能变成1
为了保证数据传输的可靠性,在计算机网路输数据时,必须采用各种差错检测措施
这里写图片描述
循环冗余检验CRC
在数据链路层传送的帧中,广泛使用了循环冗余检验CRC技术
在发送端,先把数据划分成组,假设每组k个比特,假设待传送的一组数据M=101001(现在k=6)。我们在M的后面再添加差错检测用的冗余码一起发送

冗余码的计算
用二进制的模2运算进行2^N乘M的运算,这相当于在M的后面添加n个0。
得到的(k+n)位的数除以事先选定好的长度(n+1)位的除数P得到的商是Q而余数是R,余数R比除数少一位,即余数是n位

计算过程如下图:
这里写图片描述

在接收方收到了这个数据帧之后还要对它进行校验,判断余数是否为0,余数为0那么接收方就接受这个数据帧,余数不为0那么接收方就将这个帧丢弃,然后

仅用循环冗余校验CRC差错检测错误技术只能做到无差错接受
“无差错接受”:凡是接受的帧(不包含丢弃的帧),凡是接收端数据链路层接受的帧都没有传输差错(有差错的帧就丢弃而不被接受)

要做到可靠传输(及发送什么就收到什么)就必须加上确认和重传机制
CRC是一种无比特差错,而不是无传输差错。

并且CRC并不是完全的无比特差错,有可能出一个错误的数据帧,但是之后计算出的余数还是0,那么就可能就接受了一个错误的数据帧,因此CRC不是百分之百可靠。它的除数越大,出错的可能性越小。如果发现传输过来的数据帧有错误,那么它是由上一层进行重传机制。