📖 3.2.2 差错检测
🎯 课程摘要:本节课介绍数据链路层的差错检测技术。比特在传输过程中可能产生误码,需通过在帧尾部添加检错码(FCS)来检测。重点讲解两种常用检测技术:奇偶校验(Parity Check)与循环冗余校验(CRC),其中 CRC 模 2 除法计算过程及检错能力是核心考点。
📝 详细笔记
1. 误码与误码率(BER)
- 概念定义:比特在传输过程中因噪声干扰、传输媒体质量等因素,比特 1 变成 0 或比特 0 变成 1,称为比特差错(简称误码)。
- 原理解析:
- 误码率 BER(Bit Error Rate):一段时间内传输错误的比特数占传输总比特数的比率。
- 提高链路信噪比可降低误码率,但实际通信链路上不可能使误码率降为零。
- 因此数据链路层必须使用差错检测技术来检测数据是否产生比特差错。
- ⚠️ 重点/考点:误码率不可能为零,这是差错检测技术存在的根本原因。
2. 帧检验序列 FCS
- 概念定义:帧尾部中用来存放检错码的字段,称为帧检验序列 FCS(Frame Check Sequence)。
- 原理解析:
- 发送方数据链路层采用某种检测技术,根据帧的内容计算出检错码,将其填入帧尾部的 FCS 字段。
- 接收方数据链路层从帧尾部取出 FCS,采用与发送方相同的检测技术,即可检测帧在传输过程中是否出现误码。
- 助教补充:FCS 是字段名称,而具体填入的检错码由所选检测技术(如 CRC)决定,二者不可混淆。
- 举例:
- PPP 帧格式:帧尾部包含 2 字节 FCS 字段。
- 以太网 V2 的 MAC 帧格式:帧尾部包含 4 字节 FCS 字段。
3. 奇偶校验(Parity Check)
- 概念定义:在待发送数据后面添加 1 个校验位,使整个数据中比特 1 的个数满足约定的奇偶性。
- 原理解析:
- 奇校验:添加校验位后,比特 1 的总数为奇数。
- 偶校验:添加校验位后,比特 1 的总数为偶数。
- 以奇校验为例:若传输中数据位产生 1 位误码,比特 1 总数变为偶数(而非约定的奇数),接收方可检出误码。
- 检错能力分析:
误码位数 比特 1 数量的奇偶性 能否检出 奇数个位出错 发生改变 ✅ 可检出 偶数个位出错 不发生改变 ❌ 漏检 - ⚠️ 重点/考点:奇偶校验只能检出奇数个位错误,无法检出偶数个位错误(漏检)。
- 助教补充:实际应用中可细分为垂直奇偶校验、水平奇偶校验、水平垂直奇偶校验(二维偶校验可检出偶数个错误),有兴趣可自行查阅。
4. 循环冗余校验 CRC
- 概念定义:收发双方约定一个生成多项式 G(x),发送方基于待发送数据和 G(x) 计算出冗余码,添加到数据后面一起发送;接收方用同样的 G(x) 检验是否产生误码。
- 基本思想:
- 收发双方约定生成多项式 G(x)。
- 发送方基于待发送数据和 G(x) 计算冗余码,添加到数据尾部发送。
- 接收方收到"数据 + 冗余码"后,用 G(x) 进行检验,判断是否产生误码。
CRC 发送方操作步骤
- 构造被除数:在待发送数据后面添加 G(x) 最高次个 0,构成被除数。
- 构造除数:取 G(x) 各项系数构成的比特串作为除数。
- 模 2 除法:进行二进制模 2 除法,得到商和余数。
- 得到冗余码:余数位数应与 G(x) 最高次数相同,位数不够则前面补 0;将冗余码添加到待发送数据后面发送。
CRC 接收方操作步骤
- 将收到的"数据 + 冗余码"作为被除数。
- 用 G(x) 系数比特串作为除数进行模 2 除法。
- 余数为 0 → 未发现误码;余数不为 0 → 出现误码。
二进制模 2 除法要点
- 既不向上位借位,也不比较除数和被除数对应位数值大小。
- 以相同位数相除,相当于对应位进行逻辑异或(XOR)运算。
- 商仅作为标记,防止计算过程对错位。
CRC 计算示例
假设待发送数据为 101001,生成多项式 G(x) = x³ + x² + 1(系数比特串 1101,最高次为 3):
步骤1 构造被除数:101001000 (数据后加3个0)
步骤2 构造除数: 1101
步骤3 模2除法:
110101 ← 商(仅作标记)
--------
1101 /101001000
1101
----
1110
1101
----
1100
1101
----
0100
0000 ← 不够除
----
100 ← 余数
步骤4 余数 100(3位,与最高次相同)→ 冗余码 = 100
发送数据 = 101001 100
- ⚠️ 重点/考点:余数位数必须与生成多项式最高次数相同,不足时前面补 0 凑足位数。
常用国际标准生成多项式
- CRC 要求生成多项式必须包含最低次项(x⁰ 项)。
- 生成多项式直接关系到 CRC 的漏检率。
5. 差错检测 vs 纠错
- 原理解析:
- 奇偶校验、CRC 等差错检测技术只能检测出错,不能定位错误,也无法纠正错误。
- 想要纠正差错,需使用冗余信息更多的纠错码(如海明码 Hamming Code)进行前向纠错,但开销较大,计算机网络中较少使用。
- 计算机网络中通常采用检测重传方式纠正差错,或仅丢弃检测到差错的帧,取决于数据链路层提供可靠传输还是不可靠传输服务。
- ⚠️ 重点/考点:CRC 漏检率极低、计算复杂但易于用硬件实现,因此被广泛应用于数据链路层。
💡 核心总结
- 误码率不可能为零,数据链路层需通过 FCS 字段实现差错检测。
- 奇偶校验只能检出奇数个位错误,偶数个位错误会漏检。
- CRC 通过生成多项式和模 2 除法(异或运算)计算冗余码,漏检率极低,硬件实现简单,应用最广。
- 差错检测只能"检错"不能"纠错";纠错需用海明码等纠错码,或采用检测重传方式。
❓ 课后思考 / 经典考题
- 奇偶校验为何无法检出偶数个位错误?如何改进?
- 给定生成多项式 G(x) = x⁴ + x³ + 1 和待发送数据,请用模 2 除法计算冗余码。
- 为什么 CRC 比奇偶校验更适合数据链路层?从漏检率与硬件实现两方面分析。
- 帧检验序列 FCS 与检错码是同一个概念吗?请说明二者关系。