计算机网络-数据链路层差错控制(检错编码纠错编码)
Posted Mount256
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络-数据链路层差错控制(检错编码纠错编码)相关的知识,希望对你有一定的参考价值。
文章目录
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 不可省略):
所以,最终发送的数据为: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 出错了。
以上是关于计算机网络-数据链路层差错控制(检错编码纠错编码)的主要内容,如果未能解决你的问题,请参考以下文章
计算机网络 王道考研2021 第三章:数据链路层 -- 数据链路层功能概述封装成帧和透明传输差错控制(检错编码/纠错编码)
计算机网络学习笔记——数据链路层功能和服务帧定位差错海明距离检错码和纠错码