计算机网络 - 错误检测与纠正

  • 简述

    有很多原因,例如噪声、串扰等,这可能有助于数据在传输过程中被破坏。上层工作在网络架构的一些广义视图上,不知道实际的硬件数据处理。因此,上层期望系统之间的无差错传输。如果大多数应用程序接收到错误数据,它们将无法正常运行。语音和视频等应用程序可能不会受到太大影响,即使出现一些错误,它们仍可能运行良好。
    数据链路层使用一些错误控制机制来确保帧(数据比特流)以一定的精度传输。但要了解如何控制错误,必须了解可能发生的错误类型。
  • 错误类型

    可能存在三种类型的错误:
    • Single bit error
      单位错误
      在一个帧中,尽管任何地方都只有一个位是损坏的。
    • Multiple bits error
      多位错误
      接收到的帧超过一位处于损坏状态。
    • Burst error
      突发错误
      帧包含超过 1 个连续位损坏。
    错误控制机制可能涉及两种可能的方式:
    • 错误检测
    • 纠错
  • 错误检测

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

    奇偶校验

    一个额外的位与原始位一起发送,以使 1 在偶校验的情况下为偶数,或在奇校验的情况下为奇数。
    发送者在创建帧时计算其中 1 的数量。例如,如果使用偶校验且 1 的数量为偶数,则添加值为 0 的一位。这样 1 的数量保持偶数。如果 1 的数量是奇数,则添加一个值为 1 的偶数位。
    偶校验
    接收器只是简单地计算一帧中 1 的数量。如果 1 的计数是偶数并且使用了偶校验,则认为该帧没有损坏并被接受。如果 1 的计数是奇数并且使用奇校验,则该帧仍然没有损坏。
    如果单个位在传输过程中翻转,接收器可以通过计算 1 的数量来检测它。但是当多于一位错误时,接收器很难检测到错误。

    循环冗余校验 (CRC)

    CRC 是一种检测接收到的帧是否包含有效数据的不同方法。该技术涉及对正在发送的数据位的二进制划分。除数是使用多项式生成的。发送方对正在发送的位执行除法运算并计算余数。在发送实际位之前,发送方将余数添加到实际位的末尾。实际数据位加上余数称为码字。发送方以码字的形式发送数据位。
    CRC
    在另一端,接收器使用相同的 CRC 除数对码字执行除法运算。如果余数包含全零,则接受数据位,否则认为在传输过程中发生了一些数据损坏。
  • 纠错

    在数字世界中,纠错可以通过两种方式完成:
    • Backward Error Correction  当接收方检测到接收到的数据中有错误时,它会请求发送方重新发送数据单元。
    • Forward Error Correction  当接收器在接收到的数据中检测到一些错误时,它会执行纠错码,这有助于它自动恢复并纠正某些类型的错误。
    第一个,后向纠错,很简单,只能在重传成本不高的情况下有效使用。例如,光纤。但是在无线传输的情况下,重传可能会花费太多。在后一种情况下,使用前向纠错。
    为了纠正数据帧中的错误,接收器必须准确地知道帧中的哪个位被破坏。为了定位错误的位,冗余位被用作奇偶校验位进行错误检测。例如,我们取ASCII字(7位数据),那么我们需要8种信息:前7位告诉我们哪个位是错误,再多一点说明没有错误。
    对于 m 个数据位,使用了 r 个冗余位。r 位可以提供 2r 种信息组合。在 m+r 位码字中,r 位本身可能被损坏。因此,使用的 r 位的数量必须告知 m+r 位位置加上无错误信息,即 m+r+1。
    所需位