• 沒有找到結果。

第 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:如图 3­2 所示给出了一个编码系统,用两个比特位表示 4 个不同信息。任意两个码字之 间不同的比特位数从 1 到 2 不等,但最小值为 1,故该编码系统的码距为 1。

二进码字 

a2  a1 

图 3­2  码距为 1 的编码系统

1

如果任何码字中的一位或多位被颠倒或出错了,结果中的码字仍然是合法码字。例如,如果 传送信息 10,而被误收为 11,因 11 是合法码字,所以接收方仍然认为 11 是正确的信息。

然而,如果用 3 个二进位来编 4 个码字,那么码字间的最小距离可以增加到 2,如图 3­3 所示。

二进码字 

a3  a2  a1 

图 3­3  改进后码距为 2 的编码系统

这里任意两个码字相互间最少有两个比特位的差异。 因此, 如果任何信息中的一个比特位出错,

那么将成为一个不用的码字,接收方能检查出来。例如信息是 001,因出错成为了 101,101 不是 合法码字,这样接收方就能发现出错了。

海明研究发现, 检测 d 个错误,则编码系统码距≥d+1; 纠正 d 个错误,则编码系统码距>2d。 

2.海明码

海明码是一种多重奇偶检错系统, 它具有检错和纠错的功能。 海明码中的全部传输码字是由原 来的信息和附加的奇偶校验位组成的。 每一个这种奇偶校验位和信息位被编在传输码字的特定位置 上。这种系统组合方式能找出错误出现的位置,无论是原有信息位,还是附加校验位。

设海明码校验位为 k,信息位为 m,则它们之间的关系应满足 m+k+1≤2 。 下面以原始信息 101101 为例,讲解海明码的推导与校验的过程。

(1)确定海明码校验位长。 

m 是信息位长,则 m=6。根据关系式 m+k+1≤2 ,得到 7+k≤2 。解不等式得到最小 k 为 4,

即校验位为 4。信息位加校验的总长度为 10 位。

(2)推导海明码。 

1)填写原始信息。

从理论上讲,海明码校验位可以放在任何位置,但习惯上校验位被从左至右安排在  1、2、4、 

8、…的位置上。原始信息则从左至右填入剩下的位置。如图 3­4 所示,校验位处于 B1、B2、B4、 

B8 位,剩下位为信息位,信息位依从左至右的顺序先行填写完毕。

图 3­4  填入原始信息位

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  (3­1)

注:Å 表示异或运算。

这个公式常用,但是直接死记硬背比较困难,只能换个方式进行理解记忆。

把除去 1、2、4、8(校验位位置值编号)之外的 3、5、6、7、9、10 值转换为二进制位,如 表 3­1 所示。

表 3­1  二进制与十进制转换表

信息位 信息位编号的十进制 信息位编号的二进制

第 4 位 第 3 位 第 2 位 第 1 位 

B3 

B5 

B6 

B7 

B9 

B10  10 

将所有信息编号的二进制的第 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。

填入校验位后得到图 3­5。

图 3­5  加入校验码后的信息

1

(3)校验。

将所有信息位位置编号 1~10 的值转换为二进制位,如表 3­2 所示。

表 3­2  二进制与十进制转换表

信息位 信息位编号的十进制 信息位编号的二进制

第 4 位 第 3 位 第 2 位 第 1 位 

B1 

B2 

B3 

B4 

B5 

B6 

B7 

B8 

B9 

B10  10 

将所有信息编号的二进制的第 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  (3­2)

得到一个形式为 X8X4X2X1 的二进制,转换为十进制时,结果为 0,则无错;结果非 0(假设 为 Y),则错误发生在第 Y 位。

假设起始端发送加了上述校验码信息之后,目的端收到的信息为 0010111101,如图 3­6 所示。

图 3­6  接收信息为 0010111101

1 校验码 (Cyclical Redundancy Check, CRC) 进行错误检测。 CRC 编码又称为多项式编码 (polynomial  code)。CRC 的基本思想是把位串看成系数为 0 或 1 的多项式,一个 k 位的帧看成是一个 k­1 次多 项式的系数列表,该多项式有 k 项,从 x k­1 到 x 。这样的多项式就是 k­1 阶多项式,该多项式形为  A1k­1 +A2k­2 +⋯+An­2+An­1:。例如,1101 有 4 位,可以代表一个 3 阶多项式,系数为 1、1、0、 

1,即 x +x +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 +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 +x +x +x +x +x+1 。 该 多 项 式 用 于 校 验 以 太 网

(802.3) 帧 (不含前导和帧起始符)、 令牌总线 (802.4) 帧 (不含前导和帧起始符)、 令牌环 (802.5)

帧(从帧控制字段到 LLC 层数据)、FDDI 帧(从帧控制字段到 INFO)和 ATM 全帧和 PPP 除帧标 志位外的全帧。

相關文件