**错误检测(error detection)**是知道数据已经改变。**错误纠正(error correction)**是把数据修复。题目常问某个方法属于哪一种,所以答案里的动词要用对。
每种方法做什么?
| 方法 | 作用 | 能修复数据吗? |
|---|---|---|
| 奇偶位 | 检测奇数个位的翻转 | 不能 |
| 校验和 | 检测大多数意外改动 | 不能 |
| 校验位(check digit) | 检测代码在输入或扫描时的错误 | 不能 |
| 回显校验 | 发送方把返回的数据与原数据比较 | 不能 |
| ARQ | 接收方说“收到”或“请重发”;超时则发送方重试 | 靠重发恢复 |
| 重复编码 | 每一位发送多次,多数表决 | 能,限于有限数量的翻转 |
请对照大纲,确认哪些名称会出现,因为内容由 Cambridge 制定,也可能更新。
ARQ 如何运作?
- 发送方发送带有校验数据的数据包。
- 接收方执行校验。
- 通过则发出肯定确认。失败则发出否定确认,或什么也不回复。
- 发送方等待超时(timeout)。没有确认或收到否定确认,就重发。尝试达到设定次数后放弃。
ARQ 不会修复受损的数据,它是用一份新的副本取代它。
例题详解:用重复来纠正
发送方想发送比特 1, 0, 1。它把每一位发三次:111 000 111。
接收方收到 111 010 111。对每一组,它数 1 的个数并取多数。
ones ← 0
FOR i ← 1 TO 3
IF Group[i] = 1 THEN
ones ← ones + 1
ENDIF
NEXT i
IF ones >= 2 THEN
result ← 1
ELSE
result ← 0
ENDIF
**中间一组 0, 1, 0 的追踪:**i=1 时 ones 为 0,i=2 时 ones 为 1,i=3 时仍为 1。因为 1 小于 2,所以 result = 0。于是中间那一位被纠正为 0。
111 和 111 两组各有 3 个 1,result 都是 1。信息被修复为 1, 0, 1,不需要要求重发。代价是数据发送量变成三倍。
学生常犯什么错误?
常见说法:“奇偶校验检查数据并纠正任何错误。”
它不会纠正。奇偶校验只检测。
要纠正,接收方需要足够的额外信息来推出正确的值,就像上面的多数表决,或者必须请求一份新的副本。奇偶校验和校验和要写“检测”,ARQ 要写“重发”。
自我检测
1. 判断下列各项是检测还是纠正:(a) 奇偶位,(b) 对一位的三份副本做多数表决。
查看答案
(a) 检测。(b) 纠正,前提是三份副本中只有一份出错。
2. 一组三位以 1, 1, 0 到达。原本发送的最可能是哪一位?
查看答案
两个 1 和一个 0,多数是 1。发送的位很可能是 1。
3. ARQ 发送方在超时前没有收到回复。它会怎么做?
查看答案
它会重发数据包,直到设定的尝试次数。
下一步
把学到的带进练习题,它混合了五课的内容。如果需要知道主题的顺序,回到模块概览。
检测和纠正最容易在用词上混淆。如果你想知道自己的答案在哪里丢分,一对一线上计算机科学补习的老师可以逐句帮你批改。