第 3 学时 数据链路层
3.1 检错与纠错
3.1.1 考点分析
历年网络工程师考试试题涉及本部分的相关知识点有:基本概念、海明码、CRC 编码。
3.1.2 知识点精讲 1.基本概念
通信链路都不是完全理想的。比特在传输的过程中可能会产生比特差错,即 1 可能会变成 0,
0 也可能变成 1。
一帧包含 m 个数据位(即报文)和 r 个冗余位(校验位)。假设帧的总长度为 n,则有 n=m+r。
包含数据和校验位的 n 位单元通常称为 n 位码字(codeword)。
海明码距(码距)是两个码字中不相同的二进制位的个数;两个码字的码距是一个编码系统 中任意两个合法编码(码字)之间不同的二进数位数;编码系统的码距是整个编码系统中任意两 个码字的码距的最小值。误码率是传输错误的比特占所传输比特总数的比率。
例 1:如图 32 所示给出了一个编码系统,用两个比特位表示 4 个不同信息。任意两个码字之 间不同的比特位数从 1 到 2 不等,但最小值为 1,故该编码系统的码距为 1。
二进码字
a2 a1
0 0 0
1 0 1
2 1 0
3 1 1
图 32 码距为 1 的编码系统
第1天
如果任何码字中的一位或多位被颠倒或出错了,结果中的码字仍然是合法码字。例如,如果 传送信息 10,而被误收为 11,因 11 是合法码字,所以接收方仍然认为 11 是正确的信息。
然而,如果用 3 个二进位来编 4 个码字,那么码字间的最小距离可以增加到 2,如图 33 所示。
二进码字
a3 a2 a1
0 0 0 0
1 0 0 1
2 1 1 0
3 1 1 1
图 33 改进后码距为 2 的编码系统
这里任意两个码字相互间最少有两个比特位的差异。 因此, 如果任何信息中的一个比特位出错,
那么将成为一个不用的码字,接收方能检查出来。例如信息是 001,因出错成为了 101,101 不是 合法码字,这样接收方就能发现出错了。
海明研究发现, 检测 d 个错误,则编码系统码距≥d+1; 纠正 d 个错误,则编码系统码距>2d。
2.海明码
海明码是一种多重奇偶检错系统, 它具有检错和纠错的功能。 海明码中的全部传输码字是由原 来的信息和附加的奇偶校验位组成的。 每一个这种奇偶校验位和信息位被编在传输码字的特定位置 上。这种系统组合方式能找出错误出现的位置,无论是原有信息位,还是附加校验位。
设海明码校验位为 k,信息位为 m,则它们之间的关系应满足 m+k+1≤2 k 。 下面以原始信息 101101 为例,讲解海明码的推导与校验的过程。
(1)确定海明码校验位长。
m 是信息位长,则 m=6。根据关系式 m+k+1≤2 k ,得到 7+k≤2 k 。解不等式得到最小 k 为 4,
即校验位为 4。信息位加校验的总长度为 10 位。
(2)推导海明码。
1)填写原始信息。
从理论上讲,海明码校验位可以放在任何位置,但习惯上校验位被从左至右安排在 1、2、4、
8、…的位置上。原始信息则从左至右填入剩下的位置。如图 34 所示,校验位处于 B1、B2、B4、
B8 位,剩下位为信息位,信息位依从左至右的顺序先行填写完毕。
图 34 填入原始信息位
第1天
2)计算校验位。
依据公式得到校验位:
P1=B3ÅB5ÅB7ÅB9=1Å0Å1Å0=0 P2=B3ÅB6ÅB7ÅB10=1Å1Å1Å1=0 P3=B5ÅB6ÅB7=0Å1Å1=0
P4=B9ÅB10=0Å1=1 (31)
注:Å 表示异或运算。
这个公式常用,但是直接死记硬背比较困难,只能换个方式进行理解记忆。
把除去 1、2、4、8(校验位位置值编号)之外的 3、5、6、7、9、10 值转换为二进制位,如 表 31 所示。
表 31 二进制与十进制转换表
信息位 信息位编号的十进制 信息位编号的二进制
第 4 位 第 3 位 第 2 位 第 1 位
B3 3 0 0 1 1
B5 5 0 1 0 1
B6 6 0 1 1 0
B7 7 0 1 1 1
B9 9 1 0 0 1
B10 10 1 0 1 0
将所有信息编号的二进制的第 1 位为 1 的 Bi 进行“异或”操作,结果填入 P1。即上面讲的 P1=B3ÅB5ÅB7ÅB9=1Å0Å1Å0=0;
所有信息编号的二进制的第 2 位为 1 的 Bi 进行“异或”操作,结果填入 P2。即上面讲的 P2=B3ÅB6ÅB7ÅB10=1Å1Å1Å1=0;
依此类推,将所有信息编号的二进制的第 3 位为 1 的 Bi 进行“异或”操作,结果填入 P3;将 所有信息编号的二进制的第 4 位为 1 的 Bi 进行“异或”操作,结果填入 P4。
填入校验位后得到图 35。
图 35 加入校验码后的信息
第1天
(3)校验。
将所有信息位位置编号 1~10 的值转换为二进制位,如表 32 所示。
表 32 二进制与十进制转换表
信息位 信息位编号的十进制 信息位编号的二进制
第 4 位 第 3 位 第 2 位 第 1 位
B1 1 0 0 0 1
B2 2 0 0 1 0
B3 3 0 0 1 1
B4 4 0 1 0 0
B5 5 0 1 0 1
B6 6 0 1 1 0
B7 7 0 1 1 1
B8 8 1 0 0 0
B9 9 1 0 0 1
B10 10 1 0 1 0
将所有信息编号的二进制的第 1 位为 1 的 Bi 进行“异或”操作,得到 X1;
将所有信息编号的二进制的第 2 位为 1 的 Bi 进行“异或”操作,得到 X2;
将所有信息编号的二进制的第 3 位为 1 的 Bi 进行“异或”操作,得到 X4;
将所有信息编号的二进制的第 4 位为 1 的 Bi 进行“异或”操作,得到 X8。
即公式:
X1=B1ÅB3ÅB5ÅB7ÅB9 X2=B2ÅB3ÅB6ÅB7ÅB10 X4=B4ÅB5ÅB6ÅB7
X8=B8ÅB9ÅB10 (32)
得到一个形式为 X8X4X2X1 的二进制,转换为十进制时,结果为 0,则无错;结果非 0(假设 为 Y),则错误发生在第 Y 位。
假设起始端发送加了上述校验码信息之后,目的端收到的信息为 0010111101,如图 36 所示。
图 36 接收信息为 0010111101
第1天 校验码 (Cyclical Redundancy Check, CRC) 进行错误检测。 CRC 编码又称为多项式编码 (polynomial code)。CRC 的基本思想是把位串看成系数为 0 或 1 的多项式,一个 k 位的帧看成是一个 k1 次多 项式的系数列表,该多项式有 k 项,从 x k1 到 x 0 。这样的多项式就是 k1 阶多项式,该多项式形为 A1x k1 +A2x k2 +⋯+An2x 1 +An1x 0 :。例如,1101 有 4 位,可以代表一个 3 阶多项式,系数为 1、1、0、
1,即 x 3 +x 2 +1。
使用 CRC 编码,需要先商定一个生成多项式(generator polynomial)G(x)。生成多项式的最 高位和最低位必须是 1。假设原始信息有 m 位,则对应多项式 M(x)。生成校验码思想就是在原始
10011 101100000 10011
第1天
得到余数 1111。注意:余数不足 r,则余数左边用若干个 0 补齐。如求得余数为 11,r=4,则 补两个 0 得到 0011。
3)将余数添加到原始信息后。
上例中,原始信息为 10110,添加余数 1111 后,结果为 10110 1111。
(2)CRC 校验。
CRC 校验过程与生成过程类似,接收方接收了带校验和的帧后,用多项式 G(x)来除。余数为 0,则表示信息无错;否则要求发送方进行重传。
注意:收发信息双方需使用相同的生成多项式。
(3)常见的 CRC 生成多项式。
CRC–16=x 16 +x 15 +x 2 +1。该多项式用于 FR、X.25、HDLC、PPP 中,用于校验除帧标志位外的 全帧。
CRC–32=x 32 +x 26 +x 23 +x 22 +x 16 +x 12 +x 11 +x 10 +x 8 +x 7 +x 5 +x 4 +x 2 +x+1 。 该 多 项 式 用 于 校 验 以 太 网
(802.3) 帧 (不含前导和帧起始符)、 令牌总线 (802.4) 帧 (不含前导和帧起始符)、 令牌环 (802.5)
帧(从帧控制字段到 LLC 层数据)、FDDI 帧(从帧控制字段到 INFO)和 ATM 全帧和 PPP 除帧标 志位外的全帧。