文档

主题 2 · 数据传输

检测错误

数据为什么会损坏,以及奇偶校验、校验和、回送校验、校验位和 ARQ 如何发现错误。

第 2 课,共 3 课大纲 2.2更新于 2026年10月31日

错误为什么会发生

从发送方到接收方的途中,干扰可能让位翻转,数据包可能丢失,数据也可能乱序到达。接收方需要一种方法发现自己收到的不是发出的内容。

下面每种方法的原理都一样:发送方根据数据算出一些额外信息一起发送,接收方重新计算,看看是否仍然一致。

奇偶校验

每个字节中留出一位作为奇偶校验位。偶校验时,校验位的取值让整个字节中 1 的个数为偶数;奇校验时,1 的总数为奇数。

接收方数一数 1 的个数。如果个数不符合约定的校验方式,就说明出错了。在下面先翻转一位,再翻转两位试试。

奇偶校验器可交互
发送(校验位在最前)
接收:点击翻转某一位
共 4 个 1,奇偶校验通过。
先翻转一位,再翻转两位。
奇偶校验能发现奇数个位翻转;但如果翻转了两位,1 的个数仍然“正确”,错误就会被漏掉。

奇偶校验块

奇偶校验块给每个字节(每一行)加一个校验位,再给每一列加一个校验位。各列的校验位合在一起,构成数据块下方的校验字节。如果某一位出错,它所在的行和列都会校验失败,两者交叉的位置正好指出要纠正的那一位。

校验和

发送方用约定的算法把一块数据中的字节加起来,把结果(校验和)和数据一起发送。接收方做同样的计算,如果结果不同,说明数据已损坏,需要重新请求。

回送校验

接收方把收到的数据原样发回,发送方把副本与原始数据比较。如果不同,就重新发送。

注意: 回送校验无法判断错误发生在去程还是回程,而且发送的数据量翻了一倍。

校验位

校验位是附在编码(如条形码或 ISBN)末尾、由其他数字算出的额外一位。它能发现输入或扫描编码时的错误,例如输错一位或两位数字颠倒。

以 ISBN-13 为例:把各位数字交替乘以 1 和 3,结果相加,再选一个校验位使总和成为 10 的倍数。点击下面的某个数字来模拟输错。

ISBN-13 校验位可交互
×1
×3
×1
×3
×1
×3
×1
×3
×1
×3
×1
×3
7校验
加权和 = 93,93 MOD 10 = 3,校验位 = 7
校验位一致,编码被接受。
点击某个数字来模拟输错。

自动重传请求(ARQ)

ARQ 使用确认和超时。接收方收到数据包后进行错误检查(例如用校验和),没问题就回送肯定确认,有问题就回送否定确认。

如果发送方收到否定确认,或者超时前什么都没收到,就重新发送该数据包。

  1. 1
    发送数据包
    启动计时器。
  2. 2
    接收方检查
    对数据包做错误检查。
  3. 3
    回送确认
    正确就回肯定确认,错误就回否定确认。
  4. 4
    必要时重发
    收到否定确认或超时 → 重新发送。

关键术语

奇偶校验位
为让 1 的个数为偶数(偶校验)或奇数(奇校验)而加上的一位。
校验和
根据一块数据算出并随之发送的值,供接收方核对。
回送校验
接收方把数据发回,由发送方与原始数据比较。
校验位
由编码中其他数字算出的一位,用来发现数据输入错误。
ARQ
自动重传请求:通过确认和超时触发重发。

自我检测

使用偶校验时,1101001 应加上什么校验位?查看答案

已有四个 1,已经是偶数,所以校验位是 0。

说出奇偶校验的一个局限。查看答案

如果翻转了偶数个位,1 的个数仍然正确,错误无法被发现;它也无法指出是哪一位出错。

在 ARQ 中,如果一直收不到确认会怎样?查看答案

到达超时时间后,发送方认为数据包已丢失,会重新发送。

校验位用于发现传输错误还是数据输入错误?查看答案

数据输入错误,例如输错或扫错编码。