需求用处:
现实中的通信链路都不是理想的,比特在传输中可能会产生差错:1可能会变成0,0可能会变成1。我们称之为比特差错,所以我们要对传输的数据进行差错检验,减小误码率。在数据链路层,为了便于硬件检测差错,通常在帧的尾部设置一个差错检验字段存放整个帧的差错检验码,这个差错检验字段常称之为帧检验序列。
CRC理解:
需要的知识储备有:
模2除法运算:二进制下的除法,实际上就是按位异或运算,也就是同位比较后,两者对应位相同则结果为“0”,不同则结果为“1”。
多项式编码(CRC编码):用来生成除数G,CRC生成多项式也与一组二进制数相对应,例如,题中,CRC生成多项式为:x^4 +x^2 +x^1+1 (常数项1是x^0)
就是:2^4 + 2^2+ 2^1+1,对应指数位为1,否则为0,所以对应的二进制是:10111
算法要求G的最高位和最低位的比特为1。
CRC差错检验运算步骤:
1、发送方和接收方协商一个 r+1位的比特生成G.
2、发送方选择一个合适的r比特冗余码R(即检错码),并将它附加到D(要发送的数据)上,使得到的d+r比特模式异或运算后恰好能被除数G整除。
说明:要计算这个冗余码R,则在数据后加上除数个数减1个0(生成多项式最高项次个0),进行异或运算,得到同位数个比特的余数R,那么,将这个余数加到要发送的数据后得到的二进制数,与除数 G进行异或运算后,必然可以整除,这时,我们看结果,余数为0,则数据串里没有比特差错,否则,发生的比特位的变化。(就这么个过程,必须理解)
接下来看例子:
所以,最终发送的形式是:
上题是如何计算冗余码,下面来一道判断冗余码的题:
说明:商 没有什么用,只是我们计算过程中的标记作用,指示算到了第几位,同时,为1时,说明够除,被除数下一位,为0时,说明不够除,此时标记0,再往后借位去除。
教材上(谢希仁第5版)的 商 一般都全是1,但在运算过程中会进行与0异或,使向后移动。
好啦,就这些。考试稳了。
(以上图片来源于湖南科技大学计算机网络课老师.B站有本问题视频)