系统分析师(3)- 奇偶校验、CRC校验、海明码纠错

奇偶校验

  • 码距:在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另个编码。一般来说,码距越大,越利于纠错和检错。

    • 码距 d=1:不能检错、纠错
    • d=2:可以检 1 位错,不能纠错(奇偶校验)
    • d=3:可以检 2 位错,纠正 1 位错(海明码)
    • CRC 码距取决于生成多项式,一般大于 2
  • 奇偶校验码:在编码中增加1位校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2。例如:

  • 奇校验:编码中含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个,则有误。

  • 偶校验同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错

一、核心概念

  • 定义:最基础、最简单的检错编码。通过在原始数据后附加1位校验位(Parity Bit),使得整个数据块(数据位 + 校验位)中 “1” 的个数满足约定的奇偶性。
  • 数学原理:本质上是模2加法(异或运算 XOR)。
  • 主要功能:只能检错,不能纠错(发现错误后通常要求重传)。

二、分类与工作原理

1. 偶校验(Even Parity)

  • 规则:数据位加上校验位后,“1” 的总个数为偶数。
  • 计算方式:如果数据位中“1”的个数已是偶数,校验位填 0;如果是奇数,校验位填 1。
  • 接收端校验:计算收到的所有位异或和,若结果为 0(偶数个1),则可能无错;若为 1,则一定出错。

2. 奇校验(Odd Parity)

  • 规则:数据位加上校验位后,“1” 的总个数为奇数。
  • 计算方式:如果数据位中“1”的个数已是奇数,校验位填 0;如果是偶数,校验位填 1。
  • 接收端校验:计算所有位异或和,若结果为 1(奇数个1),则可能无错;若为 0,则一定出错。

三、优缺点与局限性(高频考点)

维度 说明
优点 1. 开销极小:只增加1位冗余。
2. 实现极简:硬件上只需一个异或门或简单的触发器,速度极快。
3. 计算延迟极低。
缺点与局限性 1. 只能检测“奇数个”比特错误:若发生1位、3位、5位错误,校验码能发现。
2. 无法检测“偶数个”比特错误:若同时有2位、4位翻转,1的个数奇偶性保持不变,校验会失效(漏检)。
3. 不能纠错:只能判定“有错”,无法定位哪位出错。

四、与其他校验技术的对比

校验技术 冗余开销 检错能力 纠错能力 典型应用
奇偶校验 1 位 仅奇数个比特错(极弱) 无 串口通信(UART)、早期内存
CRC校验 16/32 位 极强(99.99%以上) 无 以太网、Wi-Fi、磁盘存储
海明码 按比例(如4位数据+3位校验) 强(可纠1位) 纠1位(或检2位) 服务器ECC内存、CPU缓存

五、工程应用

  • 串口通信(UART):常使用奇偶校验位来检测传输过程中的单比特翻转。
  • 早期计算机内存:早期的内存条曾使用奇偶校验(Parity RAM),但由于无法处理双比特错误,现已基本被 ECC 内存取代。
  • 简单的传感器数据:低成本的单片机通信中,作为最廉价的数据完整性检查手段。

六、一句话记忆

奇偶校验是“最廉价的安检仪”,只查“1的个数”对不对;能防单发事故(1位错),防不住连环车祸(偶数位错),且只管报错不管修。

CRC校验(循环冗余校验)重点提炼

  • CRC只能检错,不能纠错。使用CRC编码,需要先约定一个生成多项式\(G(x)\),生成多项式的最高位和最低位必须是1。假设原始信息有m位,则对应多项式\(M(x)\)。生成校验码思想就是在原始信息位后追加若干校验位。接收方接收到带校验位的信息,然后用\(G(x)\)整除。余数为0,则没有错误;反之则发生错误。

例:假设原始信息串为10110,CRC的生成多项式为\(G(x)=x^4+x+1\),求CRC校验码

  1. 在原始信息后面补0,本题中,\(G(x)\)阶为4,则在原始信息串后加4个0,得到的新串为101100000作为被除数。
  2. 由多项式得到除数,多项中x的幂指数存在的位置1,不存在的位置0。本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在,因此得到串10011
  3. 生成CRC校验码,将前两步得出的被除数和除数进行模2除法运算(即不进位也不借位的除法运算)。

一、核心概念

  • 全称:Cyclic Redundancy Check(循环冗余校验)。
  • 定位:一种检错编码(注意:通常不能纠错,需配合重传机制)。
  • 数学基础:基于模2除法(无进位/借位,本质上就是异或运算 XOR)。
  • 核心机制:收发双方约定一个生成多项式 (G(x)),发送端计算出余数附加在数据尾部,接收端用同样的多项式去除,看余数是否为0。

二、工作原理(以发送端为例)

  1. 左移补零:假设生成多项式G(X)最高次幂为 (r),在原数据后面补 (r) 个 0。
  2. 模2除法:用补零后的数据除以生成多项式(做异或运算)。
  3. 提取余数:除完后剩下的 (r) 位余数,就是 FCS(帧检验序列/CRC校验码)。
  4. 生成发送帧:将原数据加上这 (r) 位的 FCS 一起发出去。
    (接收端收到后,将整个帧对 (G(x)) 再做模2除法,余数为0则判定无错,余数不为0则判定有错。)

三、优缺点与局限性

维度 说明
优点 1. 检错能力极强:能检出所有奇数位错误、所有双比特错误、所有长度小于等于 (r) 的突发错误。
2. 硬件实现极简单:底层只需要移位寄存器和异或门,速度极快,适合高速网络。
3. 开销小,不占用过多网络带宽。
缺点与局限性 1. 只能检错,不能纠错:发现错误后只能丢弃并让发送端重传(ARQ机制)。
2. 存在漏检率:虽然概率极低,但如果错误恰好是生成多项式的倍数,则无法检出(实际工程通过选择合适的国际标准多项式将概率降至极低)。
3. 不具备防篡改能力:它不是密码学哈希,攻击者可以修改数据并重新计算合法的CRC值(常用于恶意篡改)。

四、常见国际标准与工程应用

应用场景 标准生成多项式 特点
以太网 (Ethernet) CRC-32 工业级网络数据链路层标配。
USB 协议 CRC-5 / CRC-16 用于令牌包和数据包的校验。
Wi-Fi (802.11) CRC-32 无线帧的完整性保护。
磁盘/存储系统 自定义(如 CRC-16) 扇区级数据防损坏。
压缩包 (ZIP/RAR) CRC-32 检查文件在压缩/解压时是否损坏。

五、与海明码的对比(考试高频考点)

对比维度 CRC 校验 海明码 (Hamming Code)
主要功能 只能检错(无法纠错) 能检错,也能纠错(通常纠1位)
数学原理 多项式模2除法 奇偶校验组合(重叠校验)
冗余开销 小(通常16位或32位固定长度) 较大(需要插入多位校验码)
适用场景 计算机通信、以太网、数据存储 计算机内存(ECC)、CPU缓存
硬件实现 移位寄存器 + 异或门 异或门网络

六、一句话记忆

CRC 是“通信界的廉价安检仪”,利用模2除法将数据算出一个指纹(FCS);它极擅长抓出坏数据(尤其突发错误),但只管抓不管修,坏了就让发送端重发。

海明码(Hamming Code)- 单比特纠错、双比特检验(增加1位全局校验位(SECDED))

  • 海明码:本质也是利用奇偶性来检错和纠错的检验方法,构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距实现检错和纠错,设数据位是n位,校验位是k位,则n和k必须满足以下关系:\(2^k \ge n+k+1\)。

  • 校验位的位数和具体的数据位的位数之间的关系

    所有位都编号,从最低位编号,从1开始递增,校验位处于\(2^n \ (n=0,1,2\cdots)\)位上,其余位才能填充真正的数据位,即处于第1,2,4,8,16,32,…。
    若信息数据为1011,则可知,第1,2,4位为校验位,第3,5,6,7位为数据位,用来从低位开始存放1011,得出信息位和校验位分布如下:

7 6 5 4 3 2 1 尾数
\(I_4\) \(I_3\) \(I_2\) \(I_1\) 信息位
\(r_2\) \(r_1\) \(r_0\) 校验位

一、核心概念

  • 定义:一种线性纠错码,通过在数据中插入冗余校验位,实现单比特错误的检测与纠正。
  • 发明者:Richard Hamming(1950年)。
  • 核心公式:$ 2^r \ge k + r + 1 $
    • $ k $:数据位数
    • $ r $:校验位数
    • $ n = k + r $:总码字长度
  • 经典示例:(7,4) 海明码(4位数据,3位校验)。

二、工作原理

  1. 校验位位置:放在第 $ 2^0, 2^1, 2^2, 2^3 \dots $ 位(即第 1, 2, 4, 8, 16... 位)。
  2. 校验覆盖范围:
    • P1(位置1)负责:1, 3, 5, 7, 9...(二进制最低位为1的位置)。
    • P2(位置2)负责:2, 3, 6, 7, 10...(二进制次低位为1的位置)。
    • P3(位置4)负责:4, 5, 6, 7, 12...(二进制第三位为1的位置)。
  3. 校验规则:通常采用偶校验,即每个校验位与其负责的数据位的异或和为 0。

三、编码与纠错过程

1. 编码过程

  • 将数据填入非 2 的幂次位置。
  • 根据偶校验规则,计算各校验位的值(使异或和为0)。
  • 将数据位与校验位组合,形成最终发送的码字。

2. 纠错过程

  • 接收端重新计算各校验组的异或和,得到校验子(Syndrome)。
  • 若校验子为 0:无错。
  • 若校验子不为 0:校验子的十进制值 = 出错位置的编号。将该位取反即可纠正。

四、优缺点与局限性

维度 说明
优点 1. 能检测并精确定位单比特错误。
2. 冗余位较少,编码效率相对较高。
3. 硬件实现极简(只需异或门)。
4. 延迟低,适合实时处理。
缺点与局限性 1. 只能纠正 1 位错误,面对 2 位及以上错误无能为力。
2. 无法处理突发错误(连续多位出错),需配合交织技术或 BCH/RS 码。
3. 标准海明码无法区分“1位错”和“2位错”,需增加1位全局校验位(SECDED)来实现“单纠双检”。

五、工程应用

  • 计算机内存(ECC内存):使用 SECDED 扩展海明码保护数据。
  • CPU 缓存(Cache):L1/L2/L3 缓存数据校验。
  • 存储系统:磁盘、闪存的数据完整性保护。
  • 卫星与深空通信:纠正传输过程中的随机误码。

六、一句话记忆

海明码是“单比特错误的精准狙击手”,用最少的冗余位实现“检测+定位+纠错”三合一;但面对多位错误和突发错误时力不从心。

几个相关概念、容易混的考点

系统分析师核心校验码就3种:奇偶校验、CRC、海明码,计算题几乎只考这三个;
但是有几个相关概念、容易混的考点,也会出选择题,不属于前面三类校验码,需要顺带记:

  1. 校验和(Checksum,求和校验)【选择题高频】
    原理:把数据按16bit/32bit分组,二进制求和(反码求和,溢出回卷),得到校验和;接收端重新求和验证。
    特点:检错,不能纠错;IP、UDP、TCP头部用的就是校验和。
    对比:
  • CRC:模2多项式除法,检错能力更强;
  • 校验和:简单加法,容易实现,检错弱一点。
    真题经常选项里把它和奇偶/CRC放一起区分。
  1. 汉明码的扩展:海明码的SEC-DED(双检错海明码)
    普通海明码:\(2^k \ge n+k+1\),只能纠正1位错、检测2位错。
    SEC-DED:增加1位校验位,可以纠正1位,同时检出2位错误,偶尔概念题会提到,一般不考计算。

  2. 卷积码、RS码(里德-所罗门码)【偏冷门,偶尔选项出现】

  • RS码:属于分组纠错码,光盘、卫星通信、存储介质常用,可以纠正多位错;
  • 卷积码:连续流的纠错编码,无线通信(4G/5G);

系统分析师一般只考概念区分,几乎不会让你计算,看到选项认识就行,不用深挖计算。

  1. 容易混淆:哈希/摘要(MD5、SHA系列)
    ⚠️ 严格来说不属于差错校验码,属于完整性摘要,不是用来解决传输比特错误的,是防篡改;
    考题偶尔放在选项干扰你:
  • 校验码:对付传输中比特翻转;
  • Hash摘要:防篡改、签名。
  1. 补充:码距这个底层概念(非常重要!)
    笔记最开头的码距是通用判断标准,选择题经常考这个判定:
  • 码距d=1:不能检错、纠错
  • d=2:可以检1位错,不能纠错(奇偶校验)
  • d=3:可以检2位错,纠正1位错(海明码)
  • CRC码距取决于生成多项式,一般大于2

📌备考优先级建议

  • 【必掌握,会算】奇偶校验、CRC、海明码(前面三份笔记)——上午计算题主力
  • 【熟记概念】校验和Checksum(高频选择)
  • 【了解、认名字】RS码、卷积码,知道用途和特点即可,不用算
  • 【分清边界】MD5/SHA不是校验码,是哈希摘要,别搞混

简单对比速记

编码 检错 纠错 考试形式
奇偶校验 检1位错 ❌不能纠错 选择、简单计算
CRC循环冗余 可检多位错 ❌不能纠错 计算题重点(模2除法)
海明码 检2位 ✅纠1位 计算题重点(公式\(2^k\ge n+k+1\))
校验和Checksum 检错 ❌不能纠错 概念选择题(TCP/IP)
RS码 检多位 ✅纠多位 冷门概念选项
posted on 2026-10-17 15:47  中年二班  阅读(7)  评论(0)    收藏  举报