错误检测与纠正

有很多原因,例如噪音、串扰等,可能会导致数据在传输过程中损坏。 上层工作在网络架构的一些广义视图上,不知道实际的硬件数据处理。因此,上层期望系统之间的无差错传输。 如果大多数应用程序接收到错误数据,它们将无法正常运行。 语音和视频等应用程序可能不会受到太大影响,即使出现一些错误,它们仍然可以正常运行。

数据链路层使用一些错误控制机制来确保帧(数据比特流)以一定的精度传输。 但要了解如何控制错误,就必须了解可能发生的错误类型。


错误类型

可能存在三种类型的错误:

  • 单位错误

    单位错误

    在一个帧中,尽管任何地方都只有一个位是损坏的。

  • 多位错误

    多位错误

    接收到的帧中不止一位处于损坏状态。

  • 突发错误

    突发错误

    帧包含超过 1 个连续损坏的位。

错误控制机制可能涉及两种可能的方式:

  • 错误检测

  • 纠错


错误检测

通过奇偶校验和循环冗余校验 (CRC) 检测接收帧中的错误。 在这两种情况下,都会与实际数据一起发送一些额外的位,以确认在另一端接收到的位与发送的位相同。 如果接收端的反检查失败,则认为这些位已损坏。

奇偶校验

一个额外的位与原始位一起发送以使 1 的数量在偶校验的情况下为偶数,或在奇校验的情况下为奇数。

发送者在创建帧时计算其中 1 的数量。 例如,如果使用偶校验且 1 的数量为偶数,则添加值为 0 的一位。 这样 1 的数量保持偶数。如果 1 的数量是奇数,则添加一个值为 1 的偶数位。

奇偶校验

接收方只是简单地计算一帧中 1 的数量。 如果 1 的计数是偶数并且使用了偶校验,则认为该帧没有损坏并被接受。 如果 1 的计数是奇数并且使用奇校验,则帧仍然没有损坏。

如果单个位在传输过程中翻转,接收器可以通过计算 1 的数量来检测它。 但是当多于一位错误时,接收端很难检测到错误。

循环冗余校验 (CRC)

CRC 是一种检测接收到的帧是否包含有效数据的不同方法。 该技术涉及对正在发送的数据位的二进制划分。 除数是使用多项式生成的。 发送方对正在发送的位执行除法运算并计算余数。 在发送实际位之前,发送方将余数添加到实际位的末尾。 实际数据位加上余数称为码字。 发送方以码字的形式传输数据位。

CRC

在另一端,接收器使用相同的 CRC 除数对码字执行除法运算。 如果余数全为零,则接受数据位,否则认为在传输过程中发生了一些数据损坏。


纠错

在数字世界中,纠错可以通过两种方式完成:

  • 后向纠错  当接收方检测到接收到的数据有错误时,它会请求发送方重新发送数据单元。

  • 前向纠错  当接收方检测到接收到的数据中存在错误时,它会执行纠错码,这有助于它自动恢复并纠正某些类型的错误。

第一个,后向纠错,很简单,只能在重传成本不高的情况下有效使用。 例如,光纤。 但是在无线传输的情况下,重传可能会花费太多。 在后一种情况下,使用前向纠错。

要纠正数据帧中的错误,接收方必须准确知道帧中的哪个位被破坏。 为了定位错误的位,冗余位被用作奇偶校验位进行错误检测。例如,我们取ASCII字(7位数据),那么我们需要8种信息:前7位告诉我们哪个位 是错误,多一点说明没有错误。

对于 m 个数据位,使用了 r 个冗余位。 r 位可以提供 2r 种信息组合。 在 m+r 位码字中,r 位本身可能被损坏。 所以使用的 r 位的数量必须告知 m+r 位位置加上无错误信息,即 m+r+1。

Required bits