校验:怎样发现消息传错了
约 10 分钟
假设发送方传 1011,干扰把第二位翻成 1111。接收方如果只看到结果,不知道原文,就可能把错误当真。通信系统常在数据旁边加一点冗余信息,专门用来检查错误。
最简单的奇偶校验
约定每组数据里 1 的总数必须是偶数。1011 有三个 1,于是补一个校验位 1,得到 10111,总共四个 1。传输后如果收到的数据有奇数个 1,接收方就知道至少有一位出了问题。
奇偶校验能发现许多单比特错误,却不能发现所有情况:若同时翻转两位,1 的奇偶性可能没有变化。它像包裹上的封条,能发现不少异常,但不是万能证明。
校验和与指纹
更长的数据可以分组相加,得到校验和;网络和存储系统还会使用更强的循环冗余校验或哈希。发送方根据原数据算一个短结果,接收方重新计算并比较。不一致说明数据变了。
发现错误不等于修好错误
校验通常只能说「这包不可信」,未必知道哪一位错了。接下来可以请求重传,也可以使用更复杂的纠错码,让接收方根据额外信息直接修复少量错误。多带冗余会占用带宽,却能换来可靠性。
人类通信也在用校验
电话里把号码分组复述,航空通话用标准拼读字母,快递单有校验规则,都是为了降低误听误写。重要信息不要只说一次「你懂了吧」,应让对方复述关键字段。
练一练:给数据 1100 添加偶校验位。再举一个两位同时翻转、奇偶校验却发现不了的例子。
小纸条
奇偶校验发现错误后,能确定是哪一位错了吗?