我们知道数据链路层广泛使用循环冗余检验CRC的检验技术
现在我们知道要发送的数据M=101001(长度为k=6) 在我们每次发送数据的时候需要在M后面添加一个N位的冗余码,一共发送(k+N)位数据
这N位冗余码的计算方法如下:
用二进制的膜2运算进行2^N(这是2的N次方)乘M的运算 就是说在M这个数后面添加N个0 比如 初始M=101001 进行运算之后M=101001000(n=3)
将的到的M除以收发双发实现约定的长度(n+1)位的数P 假定P=1101(n=3) 经模2除法运算的到的结果:商Q=110101 余数R=001(不满N位往前补0)Q没有什么用 ,但是这个余数R就是我们所求的冗余码
我们将这个冗余码R添加到M之后 :M=101001001 (M是之前给的最原始的M)
下面具体来说一下 具体怎么求R:
在二进制进行运算的时候全部都用XOR(异或进行运算(就是相同为0 不同为1 1xor1=0 0xor0=0 1xor0=1 ))
看图这样我们就能得到R
来个例题:
我们要发送的数据为M=101110 采用CRC的生成多项式是P(x)=X^3+1 所以我们的到的p=1001
得到的R=110 (计算完毕,图画的有点丑见谅)