【软考中级·网络工程师】校验码差错控制

差错控制

        无论通信系统如何可靠,都不能做到完美无缺。因此,必须考虑怎样发现和纠正信号传输重的差错。通信过程中出现的差错大致可以分为两类:

  • 一类是由热噪声引起的随机错误;热噪声:一种由电子的热运动产生的,热噪声时刻存在,具有很宽的频谱,且幅度较小。通信线路的信噪比越高,热噪声引起的差错就越少。这种差错具有随机性,影响个别位,称其为随机性差错
  • 另一类是由冲击噪声引起的突发错误。冲击噪声:是一种外界的电磁干扰,例如打雷闪电时产生的电磁干扰电焊机引起的电压波动等。冲击噪声持续的时间短而幅度大,往往引起一个位串出错。根据它的特点,称其为突发性差错

突发性差错影响局部,而随机性差错总是断续存在,影响全局。所以要尽量提高通信设备的信噪比,以满足要求的差错率。此外,要进一步提高传输质量,就需要采用有效的差错控制办法,常见的有:奇偶校验方法海明码检验方法循环冗余校验方法(CRC),在介绍他们之前必要的前缀知识点:

  • 检错:接收方知道有差错发生,但不知道是怎样的差错,向发送方请求重传。
  • 纠错:接收方知道有差错发生,而且知道是怎样差错。
  • 差错控制原理:传输k位,加入r位冗余(如何加入取决于使用什么校验算法),接收方收到进行计算比较。

检错码(奇偶校验法)

        奇偶校验是最常用的、简单的数据验证方法,它通过加入一个“校验位”来检查数据传输中是否出现了错误。在奇偶校验中,将要传输的数据被分成固定长度的几个组(比如每8位分为一组),在每组的末尾增加一个“奇偶校验位”,使得每组中的1位数的个数为奇数或偶数。在接收端,根据接收到的数据,在每组的数据中计算校验位的奇偶性,如果发现出现了不一致的情况,则说明数据传输出现了错误。例如:在7位ASCll码后增加一位,使码字中1的个数变成奇数(奇校验:1011 010 + [1])或偶数(偶校验:1011 010 + [0])。

        缺点:只能对付少量的随机性错误

为了能检验突发性的位串出错,可以使用校验和的办法。这种方法把数据块中的每个字节当作一个二进制整数。在发送端发送过程中按模256相加。数据块发送完成后,把得到的和作为校验字节再发送出去。接收端在接受过程中对接受的数据块进行同样的加法运算,发送端数据块加完后用自己得到的校验和接收端校验和对比,从而发现是否出错。

        有一种简单的实现方法:

在校验字节发送前,对累加器中的数取2的补码。这样,如果不出错,接收端在加完整个数据块以及校验和后累加器中是0。这种方法的好处是由于进位的关系,一个错误可以影响到更高位,从而使出错位对校验字节的影响扩大了。可以粗略的认为,随机的突发性错误校验和的影响也是随机的。出现突发错误而得到正确的校验字节概率是1/256,于是就有255:1的机会能检查出任何错误。


海明码

        海明码不仅可以检错还可以纠错,想要理解海明码,必备的知识点:

海明距离:一个码字要变成另一个码字时必须改变的最小位数,另一种解释:两个码字之间不用的比特数。把1011 01 00 变成 1011 01 11,故需要把最后两位的00变成11,海明距离则为2。

海明码原理:在数据中间加入几个校验码,码距均匀拉大,当某一位出错,会引起几个校验位的值发生变化。

海明不等式:校验码个数为k,可以表示2**k个信息,1个信息用来表示“没有错误”,其余2**k-1个表示数据中存在错误,如果满足:gif.latex?%5B1_%7B%281%29%7D%2C%5B%5D_%7B%282%29%7D%2C%201_%7B%283%29%7D%2C%20%5B%5D_%7B%284%29%7D%2C%200_%7B%285%29%7D%2C%201_%7B%286%29%7D%2C%201_%7B%287%29%7D%2C%20%5B%5D_%7B%288%29%29%7D%2C%200_%7B%289%29%7D%2C%201_%7B%2810%29%29%7D%2C%201_%7B%2811%29%29%7D%5D

gif.latex?2%5E%7Bk%7D-1%20%5Cgeq%20m%20+%20k

 (m为信息位,m+k为编码后的数总长度)

则在理论上k个校验码就可以判断是哪一位出现了问题。

海明码编码

2**i(i=0,1,2,3...)位是校验位,其余位为数据位,用于存放数据。

比如一个数据:

gif.latex?%5B%5B%5D_%7B%281%29%7D%2C%5B%5D_%7B%282%29%7D%2C%201_%7B%283%29%7D%2C%20%5B%5D_%7B%284%29%7D%2C%200_%7B%285%29%7D%2C%200_%7B%286%29%7D%2C%201_%7B%287%29%7D%2C%20%5B%5D_%7B%288%29%29%7D%2C%200_%7B%289%29%7D%2C%201_%7B%2810%29%29%7D%2C%201_%7B%2811%29%29%7D%5D

([]:校验位,下标:校验位/数据位所处数据的第几位)

数据位是由校验位生成的,原理如下:

        从下标为3位数据位开始,(3)=[2]+[1],(5)=[4]+[1],(6)=[4]+[2],(7)=[4]+[2]+[1],(9)=[8]+[1],(10)=[8]+[2],(11)=[8]+[2]+[1]

可以看出:下标为(6)数据位是由下标为[4]和[2]校验位+1组成的,同样的下标为(7)数据位是由下标为[4][2]校验位组成的,以此类推...

  • ACK1 = (3,5,7,9,11),即(3),(5),(7),(9),(11)号数据位参与[1]位校验位的校验;
  • ACK2 = (3,6,7,10,11),即(3),(6),(7),(10),(11)号数据位参与[2]位校验位的校验;
  • ACK4 = (5, 6, 7),即(5),(6),(7)号数据位参加[4]位检验位的校验;
  • ACK8 = (9, 10, 11),即(9),(10),(11)数据位参与[8]位校验位的校验。

如此,将他们全部按照偶校验计算,最终可以得到: 

gif.latex?%5B1_%7B%281%29%7D%2C%5B0%5D_%7B%282%29%7D%2C%201_%7B%283%29%7D%2C%20%5B1%5D_%7B%284%29%7D%2C%200_%7B%285%29%7D%2C%200_%7B%286%29%7D%2C%201_%7B%287%29%7D%2C%20%5B0%5D_%7B%288%29%29%7D%2C%200_%7B%289%29%7D%2C%201_%7B%2810%29%29%7D%2C%201_%7B%2811%29%29%7D%5D

1 [0] 1 [1] 0 0 1 [0] 0 1 1
  • [2]号校验位,填充的数字是0:因为(3),(6),(7),(10),(11)号数据位中一共有4个1,为偶数。
  • [4]号校验位,填充的数字是1:因为(5),(6),(7)号数据位只有(7)号数据位有一个1,所以需要添加一个1使得1的数量为偶数。
  • 以此类推...

那么我们如何通过校验位和数据位的关系,进行数据校验呢?假设这个码字传输的过程中(6)号数据位出错,即接收端接受数据变成:

 gif.latex?%5Cbg_red%20%5B1_%7B%281%29%7D%2C%5B0%5D_%7B%282%29%7D%2C%201_%7B%283%29%7D%2C%20%5B1%5D_%7B%284%29%7D%2C%200_%7B%285%29%7D%2C%201_%7B%286%29%7D%2C%201_%7B%287%29%7D%2C%20%5B0%5D_%7B%288%29%29%7D%2C%200_%7B%289%29%7D%2C%201_%7B%2810%29%29%7D%2C%201_%7B%2811%29%29%7D%5D

1 [0] 1 [1] 0 1 1 [0] 0 1 1

接收端按照同样的规则计算出奇偶位时,发现[2]和[8]号校验位奇偶性正确。

[2]和[4]号校验位奇偶性不对,于是2+4=6即可定位错误发生在(6)号数据位


CRC循环冗余校验码

       数据末尾加入CRC循环冗余校验码只可以检错不可以纠错,发生错误只可以自动请求重发海明码可以自动纠错。广泛用于网络通信和磁盘存储。这个知识点我们使用例题讲解的方法帮助理解:

901d5b915e4b49a193602ffebe7035ad.png

 解题思路:

  1. 判断校验数位:生成多项式的最高次方是几,校验位就是几位。(答案:4位校验位
  2. 补齐数据位后面的0。(答案:10111 0000
  3. 提取生成多项式的系数:【软考中级·网络工程师】校验码差错控制_第1张图片
  4. 采用第二步得到的结果,除以第三步得到的结果(异或运算):(10111 0000)异或运算(10011)余数就是CRC校验码,余数不够位,前面补0。

参考资料

2023年录制软考网络工程师 - 基础知识精讲视频 (2-10,2-11)

雷震甲.(2018.01) 《网络工程师教程(第五版)》,50-55.

 

你可能感兴趣的:(软著,软考,网络)