差错检测
本文最后更新于:2025年11月10日 下午
一、核心背景:比特差错与误码率
- 比特差错定义:实际通信链路非理想,传输中比特可能发生翻转(1 变 0 或 0 变 1),此现象称为比特差错。
- 误码率(BER):衡量差错程度的指标,指一段时间内传输错误的比特数占总传输比特数的比率。
- 差错检测的必要性:使用差错检测码检测传输中的比特差错,是数据链路层的重要任务之一,常见应用场景为以太网 V2 的 MAC 帧、PPP 帧等帧结构,二者均包含用于差错检测的 FCS(帧检验序列)字段,具体帧结构如下:
以太网 V2 的 MAC 帧:总长度最大为 1518 字节,各字段及长度如下表:
| 字段 | 目的地址 | 源地址 | 类型 | 数据载荷 | FCS |
|---|---|---|---|---|---|
| 长度(字节) | 6 | 6 | 2 | 46~1500 | 4 |
PPP 帧:各字段及长度如下表:
| 字段 | 标志 | 地址 | 控制 | 协议 | 数据载荷 | FCS | 标志 |
|---|---|---|---|---|---|---|---|
| 长度(字节) | 1 | 1 | 1 | 2 | 不超过 1500 | 2 | 1 |
二、主流差错检测方法
(一)奇偶校验
- 核心原理:在待发送数据后添加 1 位奇偶校验位,使整体数据(含校验位)中 “1” 的个数满足特定规则 —— 奇校验(“1” 的个数为奇数)或偶校验(“1” 的个数为偶数)。
- 差错检测能力:
- 可检出错误:当传输过程中发生奇数个位误码时,数据中 “1” 的奇偶性改变,可检测出错误。例如奇校验下,原数据 “11011”(含校验位共 5 个 1)传输中 1 位误码后,“1” 的个数变为 4(偶数),奇偶性改变,能检出错误。
- 不可检出错误:当发生偶数个位误码时,“1” 的奇偶性不变,无法检测出错误。例如偶校验下,原数据 “0111101”(含校验位共 5 个 1,偶校验时需调整校验位使 “1” 的个数为偶数)传输中 2 位误码后,“1” 的个数仍为偶数,奇偶性未变,漏检错误。
(二)循环冗余校验(CRC)
1. 核心机制
- 前提约定:收发双方预先约定一个生成多项式 G (x),且生成多项式必须包含最低次项。
- 发送方处理:
- 构造被除数:在待发送数据后添加生成多项式最高次数个 0;
- 构造除数:由生成多项式各项系数构成比特串;
- 计算冗余码:将被除数与除数进行 “异或除法”(仅做异或运算,无借位),得到的余数即为冗余码,其长度与生成多项式最高次数相同;
- 发送数据:将冗余码添加到待发送数据后,形成完整传输数据。
- 接收方处理:
- 构造被除数:直接将接收到的完整数据作为被除数;
- 构造除数:与发送方一致,由约定的生成多项式各项系数构成比特串;
- 验证差错:对被除数和除数进行 “异或除法”,若余数为 0,判定无差错;若余数不为 0,判定传输过程产生误码。
2. 生成多项式示例与常用类型
- 示例:生成多项式 G (x) = x⁴ + x² + x + 1,其各项系数构成的比特串为 10111(x⁴系数为 1,x³ 系数为 0,x² 系数为 1,x¹ 系数为 1,x⁰系数为 1)。
- 常用生成多项式:
- CRC-16:G(x) = x¹⁶ + x¹⁵ + x² + 1
- CRC-CCITT:G(x) = x¹⁶ + x¹² + x⁵ + 1
- CRC-32:G(x) = x³² + x²⁶ + x²³ + x²² + x¹⁶ + x¹² + x¹¹ + x¹⁰ + x⁸ + x⁷ + x⁵ + x⁴ + x² + x + 1
3. 计算示例
- 场景:待发送信息为 101001,生成多项式 G (x) = x³ + x² + 1(最高次数为 3,各项系数构成比特串 1101)。
- 发送方计算冗余码:
- 构造被除数:待发送信息 101001 后加 3 个 0,得到 101001000;
- 构造除数:1101;
- 异或除法计算:101001000 ÷ 1101(异或运算),最终余数为 001(因生成多项式最高次数为 3,余数需补 0 凑足 3 位),即冗余码为 001;
- 发送数据:101001 + 001 = 101001001。
- 接收方验证:
- 若接收到的信息为 101101001,以其为被除数,除数仍为 1101;
- 异或除法计算后余数不为 0,判定传输产生误码。
三、差错处理相关补充
- 检错码与纠错码的区别:
- 检错码:仅能检测帧传输中的差错,无法定位错误,因此不能纠正错误(如奇偶校验、CRC);
- 纠错码:通过更多冗余信息实现前向纠错(定位并纠正错误),但开销大,在计算机网络中较少使用。
- 计算机网络中的差错纠正策略:通常采用 “检错重传” 方式(检测到差错后要求发送方重传数据),或直接丢弃差错帧,具体取决于数据链路层向上层提供的是可靠传输服务还是不可靠传输服务。
- CRC 的优势:检错能力强(漏检率极低),虽计算复杂,但易于通过硬件实现,因此在数据链路层被广泛应用。
差错检测
https://hellowydwyd.github.io/2025/10/07/差错检测/