数据传输的3大差错检测方法 奇偶校验、检验和、CRC循环冗余检验——网络蛋老师
🔗资源链接
数据传输的3大差错检测方法 | 奇偶校验、检验和、CRC循环冗余检验_哔哩哔哩_bilibili
✍我的笔记
一、奇偶校验(类比老鼠实验)
1.1 原理
- 核心思想:通过添加一个校验位,使数据中「1」的数量符合奇偶规则
- 两种类型:
- 偶数校验:总「1」的数量为偶数(含校验位)
- 奇数校验:总「1」的数量为奇数(含校验位)
- 流程:
- 发送方在数据后附加校验位
- 接收方校验「1」的数量是否符合规则
- 若不符则要求重传
1.2 局限性
- 仅检测奇数次错误:
- 偶校验下,若发生
2n次比特翻转(如双比特错误)无法检测 - 例:米粒实验中,老鼠吃两粒米(奇→奇)导致无法检测
- 偶校验下,若发生
二、IP数据包的检验和
2.1 校验和计算步骤
- 数据预处理:
- 将IP首部分割为16 位二进制的多个组
- 原始的校验和字段置零
- 二进制加法求和:
- 所有组相加(包括溢出进位循环累加)
- 结果记为「手部和」
- 取反生成校验和:
- 手部和按位取反(0→1,1→0) → 最终校验和
2.2 接收方验证
- 相加得出全 1: 接收方将首部所有数据(含校验和)二进制相加 → 结果应为全 1(取反后为全 0,校验通过)
2.3 潜在问题
- 固有缺陷: 若数据中某位的 0→1 与另一位的 1→0 相互抵消 可能导致校验和未被检测
三、循环冗余校验(CRC)
3.1 核心原理
- 模 2 除法(异或运算):
- 通过选定除数多项式(如 1101)
- 数据末尾补零(补位数=除数位数-1)
- 执行多项式除法,余数作为冗余码(CRC校验码)送至接收方
3.2 操作示例
- 发送方:
数据:100110
补 3 个零后:100110000(假定除数为 1101,4 位需补 3 零)
执行步骤:
- 以 1101 为除数,不断从高位开始异或运算
- 最终余数 101 → 附加到原始数据末尾发送
- 接收方: 用相同除数对完整数据(含冗余码)做模 2 除法 → 余数为 0 则无误
3.3 优势
- 抗干扰能力强:
- 大位数除数降低余数巧合概率
- 检测单比特、多比特及突发错误效率高
- 实时性: XOR运算速度远快于传统除法
四、方法对比
| 方法 | 校验方式 | 检测能力 | 典型应用场景 |
|---|---|---|---|
| 奇偶校验 | 奇偶位 | 仅单比特错误(奇数次错误) | 简单通信协议 |
| IP检验和 | 反码求和 | 部分多比特错误(无法覆盖所有) | IP数据包首部校验 |
| CRC | 多项式模 2 除法 | 强抗干扰性(检测绝大部分错误) | 以太网、Wi-Fi等 |
五、关键类比总结
- 老鼠吃米(奇偶校验) → 依靠数量奇偶变化检测偶然干扰
- 称重饼干(检验和) → 通过整体特征变化发现篡改
- 筛面粉(CRC) → 系统性过滤检测细微异常
(注:校验方法均存在理论缺陷,但实际中CRC可靠性最高)