CRC校验

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

二:常见的校验方法:

1:奇偶校验
设置奇偶校验位,所谓的奇偶校验就是在发送的每一个字节后加上一位,是的每个字节中的1的个数为奇数个或者是偶数个.
如发送的字节是0x1a而二进制表示为0001 1010
采用奇校验,则在数据后面补个0,数据变成0001 1010 0数据中的1的个数是3
采用偶校验,则在数据后面补上个1,数据变成0001 1010 1s数据中的1的个数是4

接受方通过技术算数据中的1的个数是否满足奇偶性来群定数据是否有错
缺点:对错误的检测效率大约只有50%,也就是一半的错误能检测出来,另外,每传输一个字节都要附加上一位校验位,对传输的效率影响很大.一次在高度数据通讯中很少采用奇偶校验,奇偶校验很简单,因此可以通过硬件来实现,这样可以减少软件的负担.

2:累加和校验
另外一种常见的效验方式是累加和校验,所谓的累加和校验方式有很多,最常用的在一次通讯数据包的最后加入一个字节的校验数据,这个字节内容为前面数据包的忽略进位的按字节累加和
如:传输的信息是:4,22,5
加上校验和后的数据包:4,22,5,31
这里31为前三个字节的校验和,接收方收到全部数据后对前三个数据进行同样的累加计算,如果累计的字节和最后一个字节相同的话就认为传输没有错误.

累计和校验由于实现起来非常简单,也被广泛的采用
缺陷:这种检错的方式比较一般,对单字节的校验和大概有/256的概率将原本是错误的通讯数据误判我正确的数据.

三:CRC校验的原理:
根本思想是先在要发送的帧后面附加一个数(用来校验的校验码),生成一个新帧发给接收端.这个附加的数不是随意给的,它是要是生成的新帧能与发送端和接收端共同选定某个特定的数整除(这里不是直接采用二进制出发,而采用”模2除法”).到达接收端后,再把接收到新帧除以这个选定的除数.因为在发送端发送数据帧之前就已通过附加一个数,做了”去余”处理,所以结果应该没有余数,如果有余数,则表明该帧在传输过程中出现了错误.

标准CRC生成多项式如下表:
名称 生成多项式 简记式* 标准引用
CRC-4 x4+x+1 3 ITU G.704
CRC-8 x8+x5+x4+1 0x31
CRC-8 x8+x2+x1+1 0x07
CRC-8 x8+x6+x4+x3+x2+x1 0x5E
CRC-12 x12+x11+x3+x+1 80F
CRC-16 x16+x15+x2+1 8005 IBM SDLC
CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 x32+x26+x23+…+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32c x32+x28+x27+…+x8+x6+1 1EDC6F41 SCTP
“模2除法”它既不向上借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相处即可.栗子:
100101除以1110结果得到的商为11,余数为1
CRC校验_第1张图片
CRC校验原理计算步骤:
(1):先选择一个用于在接收端今次那个校验是,对接受的帧进行除法运算的除数(通常用多项式表示,所以CRC又称多项式编码方法,这个多项式也称为”生成多项式”).
(2):看所选定的除数二进制位数(假设为k位),然后再要发送的数据帧(假设为m位)后面加上k-1位”0”,然后以这个加了k-1个”0”的新帧(一共是m+k-1)以”模2除法”方式除以上面这个除数,所得到的余数就是该帧的CRC校验码,也称FSC(校验序列)
(3)再把这个校验码附加在原数据帧(就是m位的帧,注意不是在后面形成的m+k-1)位后面,构建一个新帧发送到接收端,最后在接收端再把这个新帧以”模2除法” 方式除以前面选择的除数,如果没有余数,则表明该帧在传输过程中没出错,否则出现了差错。

你可能感兴趣的:(Linus,crci校验)