CRC循环冗余校验
CRC(Cyclic Redundancy Check)是数据链路层最重要的差错检测机制,几乎所有帧(以太网、PPP、802.11)都用CRC作为帧校验序列(FCS)。
工作原理
发送端(生成FCS)
- 在数据 \(M\) 末尾附加 \(r\) 个零(\(r\) = 生成多项式次数)
- 对扩展后的数据 \(M \cdot 2^r\) 做模2除法(即异或除法),除以生成多项式 \(P(x)\)
- 余数(\(r\) 位)即为 FCS
- 发送 \(T = M \cdot 2^r + FCS\)(此时 \(T\) 能被 \(P\) 整除)
接收端(验证)
- 对收到的帧 \(T'\) 做模2除法,除以相同的 \(P(x)\)
- 若余数为零 → 帧正确,接收
- 若余数非零 → 帧有错,丢弃
常用生成多项式
| 标准 | 多项式 | 应用 |
|---|---|---|
| CRC-8 | \(x^8+x^2+x+1\) | ATM首部 |
| CRC-16 | \(x^{16}+x^{15}+x^2+1\) | USB, BISYNC |
| CRC-32 | \(x^{32}+x^{26}+x^{23}+...+1\) | 以太网, 802.11, PPP |
以太网使用 CRC-32,FCS字段为4字节。
模2运算规则
模2加法(即异或):
模2除法(商的每一位由异或决定,不借位)。
CRC的能力
CRC-32 能检测: - 所有1位错、2位错 - 所有奇数位错 - 所有突发长度 ≤ 32 位的突发错 - 大多数更长的突发错(漏检率约 \(2^{-32}\))
重要限制
CRC 只能检测错误,不能纠正错误。
检测到错误的帧直接丢弃,依靠上层(TCP)的重传机制处理。
参见
- [[03-数据链路层]] — 数据链路层三个基本问题
- [[03-数据链路层|PPP]] — 使用CRC-16/32的广域网协议
- [[以太网与MAC地址|MAC帧格式]] — CRC-32的具体应用