计算机网络 - 错误检测与纠正
有很多原因,例如噪音、串扰等,都可能导致数据在传输过程中损坏。上层基于某种通用的网络架构视图工作,并不了解实际的硬件数据处理。因此,上层期望系统之间实现无错误传输。如果收到错误数据,大多数应用程序将无法正常运行。语音和视频等应用程序可能不会受到太大影响,即使出现一些错误,它们仍可能正常运行。
数据链路层使用某种错误控制机制来确保帧(数据比特流)以一定的准确度传输。但要了解如何控制错误,必须知道可能发生哪些类型的错误。
错误类型
可能存在三种类型的错误:
单比特错误
在一个帧中,无论在何处,只有一个比特是损坏的。
多比特错误
收到的帧中有多个比特处于损坏状态。
突发错误
帧包含 1 个以上连续损坏的位。
错误控制机制可能涉及两种可能的方式:
错误检测
错误更正
错误检测
通过奇偶校验和循环冗余校验 (CRC) 检测接收帧中的错误。在这两种情况下,都会与实际数据一起发送一些额外的位,以确认另一端收到的位与发送的位相同。如果接收端的计数器检查失败,则认为这些位已损坏。
奇偶校验
将与原始位一起发送一个额外的位,以使 1 的数量在偶校验的情况下为偶数,在奇校验的情况下为奇数。
发送方在创建帧时会计算其中 1 的数量。例如,如果使用偶校验并且 1 的数量为偶数,则添加一个值为 0 的位。这样 1 的数量就保持为偶数。如果 1 的数量为奇数,则添加一个值为 1 的位以使其为偶数。
接收方只需计算帧中的 1 的数量。如果 1 的数量为偶数,并且使用偶校验,则认为该帧未损坏并被接受。如果 1 的数量为奇数,并且使用奇校验,则该帧仍然未损坏。
如果单个位在传输过程中翻转,接收器可以通过计算 1 的数量来检测它。但是当多个位错误时,接收器很难检测到错误。
循环冗余校验 (CRC)
CRC 是一种不同的方法来检测接收的帧是否包含有效数据。该技术涉及对正在发送的数据位进行二进制除法。除数是使用多项式生成的。发送方对正在发送的位执行除法运算并计算余数。在发送实际位之前,发送方将余数添加到实际位的末尾。实际数据位加上余数称为码字。发送方将数据位作为码字传输。
在另一端,接收器使用相同的 CRC 除数对码字执行除法运算。如果余数全为零,则数据位被接受,否则认为在传输过程中发生了一些数据损坏。
错误校正
在数字世界中,错误校正可以通过两种方式完成:
向后错误校正 当接收器检测到收到的数据中的错误时,它会请求发送方重新传输数据单元。
前向错误校正 当接收器检测到收到的数据中的某些错误时,它会执行错误校正代码,这有助于它自动恢复并纠正某些类型的错误。
第一个,向后错误校正,很简单,只能在重传成本不高的地方有效使用。例如,光纤。但在无线传输的情况下,重传可能成本太高。在后一种情况下,使用前向纠错。
要纠正数据帧中的错误,接收器必须确切知道帧中的哪个位已损坏。要找到错误位,冗余位用作错误检测的奇偶校验位。例如,我们采用 ASCII 字(7 位数据),那么我们可能需要 8 种信息:前七位告诉我们哪个位是错误的,还有一位告诉我们没有错误。
对于 m 个数据位,使用 r 个冗余位。r 位可以提供 2r 种信息组合。在 m+r 位码字中,r 位本身可能会损坏。因此,使用的 r 位的数量必须告知 m+r 位位置加上无错误信息,即 m+r+1。