校验码
- 简介
- 奇偶校验
- 编码方法
- 分类
- 注意
- 练习题
- CRC循环冗余校验
- 模2除法
- 异或运算
- 模2除法计算过程
- 循环冗余校验CRC
- 过程
- 练习题
- 选择题
- 海明校验
- 步骤
- 练习题
简介
计算机在接收相应信息的时候,能够识别的都是一些电信号或者转化后的0 1二进制。那包括我们在网络上传递信息的时候,也是通过电信号或者光信号之类的来进行传递的。
大家想一想,电信号或者光信号在传输的过程当中,如果距离很远,会不会发生一些衰竭?有可能。所以我们在传递信息的时候,我必须要对信息做一些额外的处理,方便我们来检查这个信息是否正确。
那这种检查的信息,我们就把它叫做校验码。校验码我们一般会用到多种校验方式,在我们的软件设计师考试当中,一般涉及到的大概有三种。
- 第一种比较简单,是奇偶校验,能检错,不能纠错。
- 第二种CRC循环冗余校验,能检错,不能纠错–在考试当中出现较多。
- 第三种是海明校验,既能检错也能纠错
这三种方式需要掌握他们之间的比对特点以及简单的CRC循环冗余校验的计算过程或者说是编码过程。
对于校验码,它是在信息位以外来增加一些信息,或者说增加一些数据,帮助我们校验。比如说:如果你收到女朋友的一条消息,让你11月10日星期六陪她一起去看电影。但是我们检查之后会发现这个日期不对,11月10日是星期五。这个时候我们就有理由怀疑这个信息是不是有问题。那么我们一般称做这种即说明了约定日期11月10日,又补充说明了那天是星期六。这种冗余信息的形式来帮助我们进行校验,通常都是冗余信息组成的。接下来我们看一下校验具体的编码过程
奇偶校验
“1”的个数是奇数个还是偶数个
我们简单的举个例子:比如说我们在传递相应信息的时候,要标记出这条信息的状态。我们打个比方。这个状态如果是有效,那么我们就标记为1;如果是无效,那我们就标记为0。那么信息在发送之后,接收房接收到的数据是1。我们能认为这个一就一定是正确的,是有效的吗?不能,因为它在传输的过程中有可能会发生改变。有可能发送方发送的是0,但接收方接收的是1,在传输的过程中发生了变化。那这种情况就需要我们在这类信息之上来增加冗余信息来帮助我们做验证。
编码方法
奇偶校验码的编码方法是:
由若干位有效信息的头部成者尾部,再加上一个二进制位(校验位)组成校验码。
分类
- 奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
- 偶校验:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
比如说有一条待发送的信息是1011。我们要在它的后面增加一位校验位。
如果是奇校验,为了保证整个校验码当中“1”的个数是奇数个,那么我们在这个校验位上就要设置0。
如果是偶校验,我们要保证整个信息当中“1”的个数是偶数个,那么我们在这个校验位上就要设置1
注意
- 如果有奇数个位发生误码,则奇偶性发生变化,可以恰查出误码,但不能纠错。
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(也称漏检)。
比如1011 。
如果在传输的过程中有一位发生变化,比如说中间的这个1变为了0。最后,接收方介绍的信息是1001,那么它的奇偶性发生了变化,这个时候就可以检查出这条信息有误码。
那么如果在传输的过程中有偶数个位发生错误,比如最后两位都变成了0,那么接收方接收到的信息就是1000。这个时我们接收方接收的信息的一是奇数个,发送方发送的信息一的个数也是奇数个,它的奇偶性没有发生变化,所以也就不能检查出来误码。
练习题
给出编码1001101的奇校验码和偶校验码()
A. 10011011,10011010
B. 10011011,10011011
C. 10011010,10011010
D. 10011010,10011010
答案:A
CRC循环冗余校验
模2除法
主要用在CRC循环冗余校验的求取校验码过程
异或运算
相同为0,不同为1
模2除法计算过程
- 被除数首位是几商就上几;
- 异或运算;
- 异或后首位一定是0,
舍弃掉这个0首位: - 补末位(落数),再上商。
第3和第4位就是去首位补末位
例:10110010000模二除11001
循环冗余校验CRC
循环冗余校验码CRC也称CRC编码,它是通信领域当中最常见的一种差错校验码。可以检错不可以纠错。
循环冗余校验码CRC由两部分组成:
- 左边是信息位也及时待发送的数据
- 右边是基于待发送的数据和生成多项式逆转出来的差错校验码,称为冗余码
发送方在发送发送数据后,接收方通过生成多项式来计算收到的信息是否产生了误码。
循环冗余校验码,它的冗余码位数越多,那么它的校验能力也就越强。
在CRC冗余校验的编码中,会用到我们之前所学到的模2除法来进行编码。
在考试中,该内容主要出现在选择题当中,出题方式是计算校验码,分值1分左右
过程
- 收发双方约定好一个生成多项式G(x):
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码)将其添加到待传输数据的后面一起传输;
- 接收方通过生成多项式来计算收到的数据是否产生了误码:
算法要求生成多项式必须包含最低次项
练习题
- 例:待发送的信息为101001,生成多项式为G(x)=x3+x2+1,计算编码后的信息。
- 构造被除数
待发送信息后面添加生成多项式最高次数个0
101001后面补3个0 - 构造除数
生成多项式各项系数构成的比特串
1101 - 做模二除法运算
- 检查余数
余数的位数应与生成多项式最高次数相同,
如果位数不够,则在余数前补0来凑足位数。
- 构造被除数
2. 例:接收到的信息为101101001,生成多项式为G(x)=x3+x2+1,判断传输是否有误码。
1. 构造被除数
接收到的信息就是被除数
2. 构造除数
生成多项式各项系数构成的比特串
3. 做模二除法运算
4. 检查余数
余数为0,传输过程无误码:
余数不为0,传输过程产生误码。
有误码
总结:CRC循环冗余校验码只能检测出针对传输过程中是否出现差错,但是它并不能定位错误,因此他无法纠正错误。也就是说CRC循环冗余校验码可以检错不能纠错,但是它的检测能力还是很强的,也就是漏检率非常低。虽然整个计算过程比较复杂,但是非常易于计算机的硬件实现。所以CRC循环冗余校验广泛应用于数据链路层
选择题
在()校验方法中,采用模2运算来构造校验位。(2019上半年试题)
A.水平奇偶
B.垂直奇偶
C.海明码
D.循环冗余
答案:D
海明校验
海明校验是一种利用奇偶性来检测和纠错的编码方法。我们传输数据的时候或者存储数据的时候可能会发生传输错误或者数据损坏。海明校验就是通过在数据中增加有余位来检测并进行纠正,提高了传输和存储数据的可靠性。
它的基本原理是将原始数据分成若干个数据块,然后,在每个数据块中添加一定数量的校验位,用于检测或者进行纠错。
在数据传输或者存储的时候,接收方会对收到的数据进行校验。检测出错误后,通过校验位来进行错误的纠正,最终得到正确的原始数据。海明校验的构成方法是在数据位之间的特定位置上插入 k的校验位,通过扩大码距从而实现检测和纠错。
步骤
设数据位是n位,校验位是k位,则n和k必须满足以下关系:
2k-1>=n+k
海明码的编码规则如下:
设k个校验位为Pk,Pk-1,…,P1, n个数据位为Dn,Dn-1,…,D1, 对应的海明码为Hn+k,Hn+k-1,…,H1
- 校验码Pi要放在2i-1的位置
- 海明码中的任何一位都是由若干个校验位来校验的。
- 被校验的海明位的下标等于所有参与校验该位的校验位的下标之和,而校验位由自身校验。
练习题
待传送的信息为1010,若采用海明校验,则奇校验规则下的海明码是()
A. 0110010
B. 0110011
C. 1110010
D. 1110011
答案:A