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



在数据传输过程中,噪声、串扰等多种原因都可能导致数据损坏。上层协议基于网络架构的某种通用视图工作,并不了解实际的硬件数据处理过程。因此,上层协议期望系统之间的数据传输无误。如果接收到的数据有误,大多数应用程序将无法按预期工作。语音和视频等应用程序可能不会受到太大影响,即使存在一些错误,它们仍然可以正常运行。

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

错误类型

可能有三种类型的错误

  • 单比特错误

    Single bit error

    在一个帧中,只有一个比特(无论在何处)被损坏。

  • 多比特错误

    Multiple bits error

    接收到的帧中有多个比特处于损坏状态。

  • 突发错误

    Burst error

    帧包含多个连续损坏的比特。

错误控制机制可能涉及两种方法

  • 错误检测

  • 错误纠正

错误检测

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

奇偶校验

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

发送方在创建帧时会计算其中1的个数。例如,如果使用偶校验并且1的个数为偶数,则添加值为0的一个比特。这样,1的个数保持为偶数。如果1的个数为奇数,则添加值为1的一个比特以使其为偶数。

Even Parity

接收方只需计算帧中1的个数。如果1的个数为偶数且使用偶校验,则认为帧未损坏并被接受。如果1的个数为奇数且使用奇校验,则帧仍未损坏。

如果传输过程中单个比特翻转,接收方可以通过计算1的个数来检测它。但是,当多个比特出错时,接收方很难检测到错误。

循环冗余校验 (CRC)

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

CRC

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

错误纠正

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

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

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

第一种,后向纠错,很简单,只有在重新传输成本不高的情况下才能有效使用。例如,光纤。但在无线传输的情况下,重新传输的成本可能过高。在这种情况下,使用前向纠错。

为了纠正数据帧中的错误,接收方必须准确知道帧中哪个比特已损坏。为了定位错误的比特,冗余比特用作奇偶校验比特进行错误检测。例如,我们采用 ASCII 字(7 位数据),那么我们需要 8 种信息:前七位告诉我们哪个比特出错,还有一位告诉我们没有错误。

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

Required bits
广告