系统分析师(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校验码
- 在原始信息后面补0,本题中,\(G(x)\)阶为4,则在原始信息串后加4个0,得到的新串为101100000作为被除数。
- 由多项式得到除数,多项中x的幂指数存在的位置1,不存在的位置0。本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在,因此得到串10011
- 生成CRC校验码,将前两步得出的被除数和除数进行模2除法运算(即不进位也不借位的除法运算)。
一、核心概念
- 全称:Cyclic Redundancy Check(循环冗余校验)。
- 定位:一种检错编码(注意:通常不能纠错,需配合重传机制)。
- 数学基础:基于模2除法(无进位/借位,本质上就是异或运算 XOR)。
- 核心机制:收发双方约定一个生成多项式 (G(x)),发送端计算出余数附加在数据尾部,接收端用同样的多项式去除,看余数是否为0。
二、工作原理(以发送端为例)
- 左移补零:假设
生成多项式G(X)最高次幂为 (r),在原数据后面补 (r) 个0。 - 模2除法:用补零后的数据除以生成多项式(做异或运算)。
- 提取余数:除完后剩下的 (r) 位余数,就是 FCS(帧检验序列/CRC校验码)。
- 生成发送帧:将原数据加上这 (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位校验)。
二、工作原理
- 校验位位置:放在第 $ 2^0, 2^1, 2^2, 2^3 \dots $ 位(即第 1, 2, 4, 8, 16... 位)。
- 校验覆盖范围:
- P1(位置1)负责:1, 3, 5, 7, 9...(二进制最低位为1的位置)。
- P2(位置2)负责:2, 3, 6, 7, 10...(二进制次低位为1的位置)。
- P3(位置4)负责:4, 5, 6, 7, 12...(二进制第三位为1的位置)。
- 校验规则:通常采用偶校验,即每个校验位与其负责的数据位的异或和为 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、海明码,计算题几乎只考这三个;
但是有几个相关概念、容易混的考点,也会出选择题,不属于前面三类校验码,需要顺带记:
- 校验和(Checksum,求和校验)【选择题高频】
原理:把数据按16bit/32bit分组,二进制求和(反码求和,溢出回卷),得到校验和;接收端重新求和验证。
特点:检错,不能纠错;IP、UDP、TCP头部用的就是校验和。
对比:
- CRC:模2多项式除法,检错能力更强;
- 校验和:简单加法,容易实现,检错弱一点。
真题经常选项里把它和奇偶/CRC放一起区分。
-
汉明码的扩展:海明码的SEC-DED(双检错海明码)
普通海明码:\(2^k \ge n+k+1\),只能纠正1位错、检测2位错。
SEC-DED:增加1位校验位,可以纠正1位,同时检出2位错误,偶尔概念题会提到,一般不考计算。 -
卷积码、RS码(里德-所罗门码)【偏冷门,偶尔选项出现】
- RS码:属于分组纠错码,光盘、卫星通信、存储介质常用,可以纠正多位错;
- 卷积码:连续流的纠错编码,无线通信(4G/5G);
系统分析师一般只考概念区分,几乎不会让你计算,看到选项认识就行,不用深挖计算。
- 容易混淆:哈希/摘要(MD5、SHA系列)
⚠️ 严格来说不属于差错校验码,属于完整性摘要,不是用来解决传输比特错误的,是防篡改;
考题偶尔放在选项干扰你:
- 校验码:对付传输中比特翻转;
- Hash摘要:防篡改、签名。
- 补充:码距这个底层概念(非常重要!)
笔记最开头的码距是通用判断标准,选择题经常考这个判定:
- 码距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码 | 检多位 | ✅纠多位 | 冷门概念选项 |
浙公网安备 33010602011771号