1.为什么要有CRC循环冗余检验算法
数据在网络的传输过程中,都是以二进制数据传输,即不是0,就是1;数据传输过程中,因为各种可能的原因导致数据0变为1,1变为0。为了保证传输数据的可靠性,在计算机网络传输时,必须采用各种差错检测措施;
CRC是我们运用在数据链路层的差错检验算法;
2.CRC循环冗余检验算法的原理
举例说明如何得到帧检验序列FCS
- 假设待传输的数据M=101001(k=6),CRC算法就是在数据M后添加供差错检测的n位冗余码,构成大小为(k+n)比特的数据帧发送出去;
- 利用模2运算(加法时不进位,减法时不借位,即1+1 = 0,0-1 = 1),2^n乘M,相当于二进制数M左移n位,后面n位补0,得到(k+n)位数除以事先双方约定好的(n+1)位的除数P,得到的商Q和余数R(n位),我们将余数作为帧检验序列FCS;
- 例如我们事先约定好P = 1101,则n = 3;则(6+3位)被除数为101001 000,除数p(6位)为1101,利用模2除法,可以得到商Q = 110101,余数(3位)R = 001,那么001即为M = 101001的帧检验序列FCS,即发送的数据为101001001
当我们收到一个数据帧时,如何利用CRC算法判断该数据有无传输