CRC循环冗余校验码
1》循环冗余校验码是数据通信领域最常用的一种差错校验码。
2》循环冗余校验码又称多项式编码,其思想是将位串看成是系数为0或为1的多项式。CRC校验要保护的单位是数据块(也就是传输过程中的有效载荷),数据块的大小不是固定的可根据实际情况确定,每一个数据块均被看做是一个二进制多项式,即所有系数均为二进制(0/1)的多项式。eg.假如要传送的数据为: 23 4 6 则这个二进制多项式为:00010111 00000100 00000110.
3》当使用多项式编码是,发送方和接收方必须预先商定一个生成多项式G(x),生成多项式的最高位和最低位必须为1。 而生成多项式G(x) 一般可直接使用国际标准给出的。
4》发送方用位串及G(x)进行某种运算得到校验和,并在数据帧的末尾加上校验和,这样就使得带校验和的数据帧的多项式能被G(x)整除;接收方收到后,用生成多项式G(x)除这个带了校验和的多项式,若有余数则传输有错。
在(4)中加粗部分提到的“某种运算”即是:
(1)假若生成多项式G(x)为r阶(即有r+1位)如图,此生成多项式为8阶共有9位,二进制表示为100000111。
(2)若传输的数据帧位数为m位,则在这m位的数据帧后面加上r个0,则数据帧长度变为m+r位。假设原数据帧就是上面提到的二进制多项式:00010111 00000100 00000110 ,则加上r = 8个0后就变为:00010111 00000100 00000110 00000000.
(3)按模2除法的方式用G(x) 对应的位串去除对应的于m+r位数据帧的位串,得到余数R(x).
(4)再将得到的余数r(x)加在原数据帧二进制多项式的后面,得到最终要传送的位串T(x)。
其中的模2除法其实主要用到模2减。
1-1=0, 1-0=1, 0-1=1, 0-0=0
具体用法参考下面的例子理解体会。