G
N
I
D
A
O
L

【计算机网络-数据链路层】差错控制(检错编码、纠错编码)

1 检错编码——奇偶校验码

1.1 奇偶校验码

奇偶校验码是一种最为简单的校验码,它用来检测数据传输过程中是否发生错误。奇偶校验码的组成:

n-1 位信息位 + 1 位校验位

有两种校验方法:奇校验和偶校验。

  • 奇校验码:添上校验位后,使得 n-1 位信息位和 1 位校验位总共有奇数个“1”
    • 若 n-1 位信息位一共有偶数个“1”,则校验位为 1
    • 若 n-1 位信息位一共有奇数个“1”,则校验位为 0
  • 偶校验码:添上校验位后,使得 n-1 位信息位和 1 位校验位总共有偶数个“1”
    • 若 n-1 位信息位一共有偶数个“1”,则校验位为 0
    • 若 n-1 位信息位一共有奇数个“1”,则校验位为 1

特点:只能检查出奇数个比特错误,检错能力为 50%。

1.2 相关例题

【例 1】原始数据:0110 1100。

【解】0110 1100 有偶数个“1”,则:

  • 奇校验码:0110 1100 1
  • 偶校验码:0110 1100 0

【注】校验位也可以加到数据的前面。

【例 2】原始数据:0100 1100。

【解】0100 1100 有奇数个“1”,则:

  • 奇校验码:0100 1100 0
  • 偶校验码:0100 1100 1

【例 3】原始数据:0110 1100,采用奇校验方式。

(1)若没有出错,校验位是多少?

(2)现若错误一位:0110 1101,能否检测出错误?

(3)现若错误两位:0110 1111,能否检测出错误?

(4)现若错误三位:0111 1111,能否检测出错误?

【解】(1)原始数据有偶数个“1”,所以为 0110 1100 1

(2)0110 1101 1,一共 6 个“1”,检测出错误

(3)0110 1111 1,一共 7 个“1”,检测不出错误

(4)0111 1111 1,一共 8 个“1”,检测出错误

【结论】采用奇校验方式,若原始数据出现奇数位错误时,将检测出错误;若原始数据出现偶数位错误时,将检测不出错误。

【例 4】原始数据:0110 1100,采用偶校验方式。

(1)若没有出错,校验位是多少?

(2)现若错误一位:0110 1101,能否检测出错误?

(3)现若错误两位:0110 1111,能否检测出错误?

(4)现若错误三位:0111 1111,能否检测出错误?

【解】(1)原始数据有偶数个“1”,所以为 0110 1100 0

(2)0110 1101 0,一共 5 个“1”,检测出错误

(3)0110 1111 0,一共 6 个“1”,检测不出错误

(4)0111 1111 0,一共 7 个“1”,检测出错误

【结论】采用偶校验方式,若原始数据出现奇数位错误时,将检测出错误;若原始数据出现偶数位错误时,将检测不出错误。

【例 5】字符 S 的 ASCII 码编码从低到高依次为 1100101。采用奇校验在下述收到的传输后的字符中,错误不能被检验出来的是( )

A. 11000011

B. 11001010

C. 11001100

D. 11010011

【解】原始数据:1100101,采用奇校验后:1100101 0

  • A 项:11000011 0,偶数个“1”,能检测出错误;
  • B 项:11001010 0,偶数个“1”,能检测出错误;
  • C 项:11001100 0,偶数个“1”,能检测出错误;
  • D 项:11010011 0,奇数个“1”,不能检测出错误。本题选 D。

2 检错编码——循环冗余码(CRC)

2.1 发送端——生成冗余码

循环冗余码(CRC)的组成:

数据部分 + 附加冗余码(FCS)

假设数据有 m 位,多项式为 G(x),计算附加冗余码(FCS)的步骤:

  • 加 0:假设 G(x) 的阶为 r,则在数据的低位添上 r 个 0;
  • 模 2 除:将上面得到的数据串去除以 G(x),得到的余数即为冗余码(共 r 位,前面的 0 不可省略)。

【注 1】有时候模 2 除法算出来的冗余码位数小于 r,此时要在附加冗余码前补 0 来满足位数。

【注 2】模 2 除法里的减法是异或操作(同 0 异 1)。

2.2 接收端——检错

对循环冗余码(CRC)除以多项式 G(x):

  • 若余数为 0,则判定这个数据没有出错,接收;
  • 若余数不为 0,则判定这个数据有出错,丢弃。

2.3 相关例题

【例 1】要发送的数据 1101011011,采用 CRC 校验,多项式是 10011,那么最终发送的数据是?

【解】计算附加冗余码(FCS)的步骤:

  • 添 0:多项式是 10011,则对应的多项式 G(x) = x4+x1+x0,r = 4,所以在数据的低位添 4 个 0,即 1101011011 0000
  • 模 2 除:将 1101011011 0000 除以 10011,得到的余数即为冗余码(共 r 位,前面的 0 不可省略):

image

所以,最终发送的数据为:1101011011 1110

【例 2】在数据传输过程中,若接收方收到的二进制比特序列为 10110011010,CRC 校验生成多项式为 G(x)=x4+x3+1。

(1)二进制比特序列在传输中是否出现了差错?

(2)若无差错,则发送方发送的二进制比特序列和 CRC 校验码的比特序列分别是什么?若有差错,则指出发送方发送的二进制比特序列和 CRC 校验码的比特序列分别为多少位。

【解】多项式 G(x) = 11001,进行模 2 除法:10110011010 除以 11001,所得余数为 0,说明二进制比特序列在传输中没有出现差错。

因为 G(x) 的 r = 4,所以发送数据的比特序列为 1011001,CRC 校验码为 1010。

3 纠错编码——海明码

以发送数据 D = 1100 为例,说明海明码的工作流程。

3.1 确定海明码的位数

海明不等式:m + r ≤ 2r - 1

  • 数据/信息为 m 位
  • 冗余码/校验码为 r 位

以 D = 1100 为例,数据位 m = 4,满足海明不等式的 rmin = 3,所以 D 的海明码有 4 + 3 = 7 位,数据位(用 Di 表示)为 4 位,校验码(用 Xi 表示)为 3 位。

3.2 确定校验位的分布

将校验码放在序号为 2n 的位置上:

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
D7 D6 D5 X4 D3 X2 X1

然后将数据放在剩余位置上:

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 0 X4 0 X2 X1

3.3 对校验码进行分组

  • 4 号校验码 X4:负责二进制序号为 1** 的校验,即序号为 4,5,6,7 的校验
  • 2 号校验码 X2:负责二进制序号为 *1* 的校验,即序号为 2,3,6,7 的校验
  • 1 号校验码 X1:负责二进制序号为 **1 的校验,即序号为 1,3,5,7 的校验

3.4 求出校验码的值(偶校验)

校验码自己是不需要被校验的,所以需要把自己的序号去掉,然后对自己负责的数据进行异或运算(相当于偶校验),得出校验值。

  • 4 号校验码 X4:负责序号为 5,6,7 的校验,X4 = D7 ⊕ D6 ⊕ D5 = 1 ⊕ 1 ⊕ 0 = 0
  • 2 号校验码 X2:负责序号为 3,6,7 的校验,X2 = D7 ⊕ D6 ⊕ D3 = 1 ⊕ 1 ⊕ 0 = 0
  • 1 号校验码 X1:负责序号为 3,5,7 的校验,X1 = D7 ⊕ D5 ⊕ D3 = 1 ⊕ 0 ⊕ 0 = 1

得出完整海明码:

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 0 0 0 0 1

3.5 检错和纠错

3.5.1 纠错方法一

假设接收方接收到错误的数据为:1110001(序号 5 出错),则先把接受到数据的校验码的值重新算一遍,与正确的对比。

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 1 0 0 0 1
  • 4 号校验码 X4:负责序号为 5,6,7 的校验,X4 = D7 ⊕ D6 ⊕ D5 = 1 ⊕ 1 ⊕ 1 = 1(与接收到的不一样)
  • 2 号校验码 X2:负责序号为 3,6,7 的校验,X2 = D7 ⊕ D6 ⊕ D3 = 1 ⊕ 1 ⊕ 0 = 0
  • 1 号校验码 X1:负责序号为 3,5,7 的校验,X1 = D7 ⊕ D5 ⊕ D3 = 1 ⊕ 1 ⊕ 0 = 0(与接收到的不一样)

由以上结果可知:

  • 序号 3,5,7 和序号 5,6,7 中发生出错,取交集为 5,7;
  • 序号 3,6,7 没有发生出错,与以上集合再取一次差集,得到序号 5 出错。

3.5.2 纠错方法二

假设接收方接收到错误的数据为:1110001(序号 5 出错),则把校验组内的校验码和数据再进行一次异或运算(偶校验)。

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 1 0 0 0 1
  • 4 号校验码组:负责序号为 5,6,7 的校验,S4 = X4 ⊕ D7 ⊕ D6 ⊕ D5 = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1
  • 2 号校验码组:负责序号为 3,6,7 的校验,S2 = X2 ⊕ D7 ⊕ D6 ⊕ D3 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0
  • 1 号校验码组:负责序号为 3,5,7 的校验,S1 = X1 ⊕ D7 ⊕ D5 ⊕ D3 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 1

得到:S4S2S1 = 101,转换成十进制,即说明序号 5 出错了。

posted @ 2023-01-04 21:20  漫舞八月(Mount256)  阅读(509)  评论(0编辑  收藏  举报