数据传输的3大差错检测方法 奇偶校验、检验和、CRC循环冗余检验——网络蛋老师

🔗资源链接

数据传输的3大差错检测方法 | 奇偶校验、检验和、CRC循环冗余检验_哔哩哔哩_bilibili

✍我的笔记

一、奇偶校验(类比老鼠实验)

1.1 原理

  • 核心思想:通过添加一个校验位,使数据中「1」的数量符合奇偶规则
  • 两种类型:
    • 偶数校验:总「1」的数量为偶数(含校验位)
    • 奇数校验:总「1」的数量为奇数(含校验位)
  • 流程:
    1. 发送方在数据后附加校验位
    2. 接收方校验「1」的数量是否符合规则
    3. 若不符则要求重传

1.2 局限性

  • 仅检测奇数次错误:
    • 偶校验下,若发生 2n 次比特翻转(如双比特错误)无法检测
    • 例:米粒实验中,老鼠吃两粒米(奇→奇)导致无法检测

二、IP数据包的检验和

2.1 校验和计算步骤

  1. 数据预处理:
    • 将IP首部分割为16 位二进制的多个组
    • 原始的校验和字段置零
  2. 二进制加法求和:
    • 所有组相加(包括溢出进位循环累加)
    • 结果记为「手部和」
  3. 取反生成校验和:
    • 手部和按位取反(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 零) 执行步骤:
    1. 以 1101 为除数,不断从高位开始异或运算
    2. 最终余数 101 → 附加到原始数据末尾发送
  • 接收方: 用相同除数对完整数据(含冗余码)做模 2 除法 → 余数为 0 则无误

3.3 优势

  • 抗干扰能力强:
    • 大位数除数降低余数巧合概率
    • 检测单比特、多比特及突发错误效率高
  • 实时性: XOR运算速度远快于传统除法

四、方法对比

方法校验方式检测能力典型应用场景
奇偶校验奇偶位仅单比特错误(奇数次错误)简单通信协议
IP检验和反码求和部分多比特错误(无法覆盖所有)IP数据包首部校验
CRC多项式模 2 除法强抗干扰性(检测绝大部分错误)以太网、Wi-Fi等

五、关键类比总结

  • 老鼠吃米(奇偶校验) → 依靠数量奇偶变化检测偶然干扰
  • 称重饼干(检验和) → 通过整体特征变化发现篡改
  • 筛面粉(CRC) → 系统性过滤检测细微异常

(注:校验方法均存在理论缺陷,但实际中CRC可靠性最高)