首页/计算机网络/03-data-link/差错控制 🔗 在 Obsidian 中打开
计算机网络 · 03-data-link

差错控制

重要度 ⭐⭐⭐⭐⭐ 计算机网络/数据链路层差错控制CRC奇偶校验海明码
速查
差错控制 = 检错(CRC、奇偶校验,发现错误后重传)+ 纠错(海明码)。数据链路层通常只检错不纠错。CRC 是模 2 除法求 FCS,只能检错不能纠错;海明码可纠错,校验位在 2 的幂次 位置。考试频率 ⭐⭐⭐⭐⭐。

核心概念

差错类型

  • 比特差错:1 变 0 或 0 变 1(数据链路层主要处理)
  • 帧丢失 / 帧重复 / 帧乱序:由可靠传输机制处理

差错原因

  • 热噪声 → 随机差错;冲击噪声 → 突发差错
  • 信道质量越差,误码率越高

检错 vs 纠错

  • 检错:只能发现错误(CRC、奇偶校验)
  • 纠错:既能发现又能纠正(海明码)
  • 数据链路层通常只检错,靠重传恢复

奇偶校验

在数据后附加 1 位校验位,使整个数据中 1 的个数为奇数(奇校验)或偶数(偶校验)。

数据: 1011001 (4个1)
偶校验位: 0 → 发送: 10110010 (4个1, 偶数)
奇校验位: 1 → 发送: 10110011 (5个1, 奇数)

局限性

  • 只能检测奇数个比特错误
  • 两个比特同时出错时检测不到
  • 检错能力弱

CRC 校验(循环冗余校验)⭐

将数据看作多项式,用生成多项式 G(x)模 2 除法,余数作为 FCS(帧校验序列)。

1. 数据后补 r 个 0(r = G(x) 的最高次幂)
2. 对 G(x) 做模 2 除法
3. 余数作为 FCS 附加到数据后

例:数据 M=101001,G(x)=1101(x³+x²+1)
步骤1: M 后补 3 个 0 → 101001000
步骤2: 101001000 ÷ 1101 → 余 011
步骤3: 发送帧 = 101001 011

接收方验证

收到: 101001011
用 G(x)=1101 做模 2 除法
余数 = 0  → 无差错
余数 ≠ 0 → 有差错

关键性质

  • CRC 只能检错不能纠错
  • 能检测所有奇数个比特错误
  • 能检测所有长度 ≤ r 的突发错误(r 为余数位数)
  • 以太网使用 CRC-32(32 位 FCS)

海明码

在数据位中插入 r 个校验位,满足:2^r ≥ m + r + 1(m 为数据位数)。

码距与检错 / 纠错能力

  • 码距:两个码字中不同位的个数
  • 检错能力:码距 d 可检测 d − 1 个错误
  • 纠错能力:码距 d 可纠正 ⌊(d − 1)/2⌋ 个错误

校验位位置

位号: 1  2  3  4  5  6  7
类型: P1 P2 D1 P3 D2 D3 D4
      ↑   ↑      ↑
   校验位(2 的幂次位置:1, 2, 4, 8...)

校验位覆盖

P1 覆盖位号: 1,3,5,7,...(二进制末位为 1)
P2 覆盖位号: 2,3,6,7,...(二进制倒数第 2 位为 1)
P3 覆盖位号: 4,5,6,7,...(二进制倒数第 3 位为 1)

S1 = P1⊕D1⊕D2⊕D4
S2 = P2⊕D1⊕D3⊕D4
S3 = P3⊕D2⊕D3⊕D4
S = S3S2S1 = 错误位号(000 表示无错)

常见考法

考点说明
CRC 计算给定数据和 G(x),计算 FCS
CRC 检错接收后验证是否出错
海明码计算给定数据,计算校验位
海明码纠错给定接收码,定位并纠正错误
检错纠错能力码距与检错 / 纠错能力的关系

易错点

注意
  • CRC 是模 2 运算(异或),不是普通除法
  • CRC 只能检错不能纠错
  • 海明码校验位在 2 的幂次 位置(1,2,4,8…)
  • 海明码检错与纠错能力公式不同
  • 以太网 CRC-32 在硬件实现,软件不需计算

核心结论

必背
  1. CRC 是数据链路层最常用的检错方法,检错能力强
  2. 海明码可以纠错,适用于信道质量差的场景
  3. 码距 d:检错 d − 1 个,纠正 ⌊(d − 1)/2⌋
  4. 数据链路层通常用 CRC 检错 + 重传 恢复

记忆卡片

CRC 校验能纠错吗?
不能,只能检错。纠错需海明码或重传。
海明码校验位的位置?
2 的幂次位置(1, 2, 4, 8…)。
码距为 d 能检错几个、纠错几个?
检错 d − 1 个,纠正 ⌊(d − 1)/2⌋ 个。
以太网使用什么校验?
CRC-32(32 位帧校验序列)。

图示 · 检错与纠错

三种方式 奇偶校验 仅检错 · 奇数位错 CRC 仅检错 · 能力强 海明码 可纠错 数据链路层常用策略 CRC 检错 → 若有误则通过重传恢复(不靠编码直接纠错)
图:奇偶校验与 CRC 只能检错;海明码能纠错。数据链路层常用"检错 + 重传"而非直接纠错。

交互动画 · 检错纠错与 ARQ 逐步演示

相关知识点

data-link-layer-functions reliable-transmission

↑ 站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。