Appearance
校验码总述:码距、奇偶校验与 CRC
2026 大纲的「二、数据的表示和运算」与「三、存储器层次结构」均已不含校验码,本篇不对应任何条目编号;但检错编码(奇偶校验、CRC)与纠错编码(海明码)在 408 计算机网络「三(三)差错控制」 中仍是纲内内容,原理完全通用。
怎么分配时间:备考 CN 差错控制的按纲内内容读;只复习 CO 的读一遍建立概念即可,不必做题训练。
冗余买的是一块"非法位串"缓冲区
衡量这块缓冲区厚度的量叫码距:两个等长码字对应位不同的个数(1011 与 1101 的码距是 2);最小码距
🔴 谈能力时说的永远是最小码距——整套编码的能力由最弱的那一对码字决定。
而全部能力只需要一个式子:
🔴 同时检
位、纠 位( )需要 。令 就退化成"纠 位"的 ;令 就退化成"只检 位"的 。另外两个式子不用背。
由它立刻能读出一条常被弄混的结论:
🔴
是"检 2 位"或"纠 1 位",不能兼得——兼得要求 。根源在于:检错只要求出错后的串落在球外,纠错却要求它落在正确那个球内,同一份距离预算一次只能满足一种解释。推论:纠错能力恒不大于检错能力。
一、冗余的本质:让合法码字变稀疏
所以有
二、码距决定的能力
| 最小码距 | 能力 |
|---|---|
| 1 | 无(任何一位错都变成另一个合法码字) |
| 2 | 检 1 位 |
| 3 | 检 2 位 或 纠 1 位 |
| 4 | 检 2 位 且 纠 1 位 |
| 纠 | |
| 检 |
三个不等式各自是怎么推出来的:从"落进非法区"到"半径 t 的球互不相交"(想弄清为什么纠错要 2t+1 而不是 t+1 时展开)
检错
错误就"走不到"另一个合法码字上,一定落进非法区。
纠错
设
即
同时检纠
即只要存在一对合法码字距离
三、三类校验码在这个框架里的位置
| 编码 | 最小码距 | 能力 | 冗余位数 |
|---|---|---|---|
| 奇偶校验 | 2 | 检出奇数位错,不能纠 | 1 位 |
| 海明码(SEC) | 3 | 纠 1 位 或 检 2 位 | |
| 海明码(SEC-DED) | 4 | 纠 1 位 且 检 2 位 | 上式再加 1 位 |
| CRC | 取决于生成多项式 | 检出所有长度 |
三者的差别可以只用码距解释:码距越大能力越强,而码距是靠冗余位数换来的。奇偶校验只加 1 位,能力最弱;海明码加
四、奇偶校验:只买了一位冗余
在数据位之外加 1 位校验位,使整个码字里 1 的个数满足奇偶约定:偶校验是全部位异或结果为 0(1 的个数为偶数),奇校验是异或结果为 1。
最小码距
🔴 奇偶校验只能检出奇数位错。 错偶数位时,1 的个数变化量是
或 ,奇偶性不变,一律漏检。
五、CRC:把码字看成多项式
把
为什么接收端除出来应该是 0:发送的码字
模 2 除法逐步走一遍:求校验位、验证无错、再制造一位错看余数怎么变(想核对自己的竖式或验证"余数只由错误图样决定"时展开)
数据 110101,生成多项式 1011,
求校验位:数据末尾补 3 个 0 得 110101000,对 1011 做模 2 除法。每一步只看当前最高位:是 1 就把 1011 对齐异或一次,是 0 就直接跳过。
| 步 | 当前余式 | 最高位 | 动作 | 结果 |
|---|---|---|---|---|
| 0 | 110101000 | 1 | 与 1011 从第 0 位对齐异或 | 011001000 |
| 1 | 011001000 | 1(第 1 位) | 与 1011 从第 1 位对齐异或 | 001111000 |
| 2 | 001111000 | 1(第 2 位) | 与 1011 从第 2 位对齐异或 | 000100000 |
| 3 | 000100000 | 1(第 3 位) | 与 1011 从第 3 位对齐异或 | 000001100 |
| 4 | 000001100 | 0(第 4 位) | 跳过 | 000001100 |
| 5 | 000001100 | 1(第 5 位) | 与 1011 从第 5 位对齐异或 | 000000111 |
低 3 位即余数 111,故发送码字 = 110101 + 111 = 110101111。(商是 111101,把每一步"做了/跳过"依次记下来就得到它。CRC 只要余数,商可以不算。)
接收端验证:把 110101111 整体除以 1011,余数为 000,判定无错。
出错的情形:设传输中第 3 位由 0 变成 1,接收到 111101111。再除以 1011,余数为 101
这个余数可以不重算:第 3 位(共 9 位)出错对应错误图样 101。余数是错误的函数,与数据无关——这也解释了 CRC 为什么只需要余数。
考点速记
- 检错的前提是让合法码字稀疏:
位串共 种,只让 种合法,其余作为"错误可落入"的缓冲区;能力由最小码距一个数决定。 - 同时检
纠 需 是唯一要记的一式(令 得 ,令 得 );因此 是"检 2 或纠 1"不能兼得,纠错能力恒不大于检错能力。 - 奇偶校验
只能检奇数位错;CRC 用模 2 除法(异或代替减法),能检出所有长度 的突发错误但不能定位(要定位得用海明码那种把位置编码进校验组的设计)。三者的差别可归结为:用多少冗余位换多大的码距,以及把能力做在随机错误还是突发错误上。
这一节在真题里的位置:
校验码在 408 真题里出题极少——下方「真题练习」挂的 error-detection-correction 这个 topic 至今只有一道题(问海明码纠一位错所需的校验位数),而且它属于兄弟篇 海明码的构造与纠错。本篇至今不单独成题,这不是漏挂标签。
复习优先级因此很清楚:把
易错:把
说成"既能检 2 位又能纠 1 位"。兼得要 。
易错:认为奇偶校验能检出所有 1 位以上的错。偶数位错一律漏检。
易错:以为 CRC 能定位错误位。它只报"有错"。
教材出处
- 编码最小距离的定义、
且 (检错位数不小于纠错位数)、" 时最多能检二位,或检一位纠一位":唐朔飞《计算机组成原理》第 3 版 第 4 章 存储器·汉明码,印刷页 p100