数据链路层中的错误检测和纠正
数据链路层 使用错误控制技术,以确定从源到目的地传输的帧(即数据的位流)具有一定的准确性。
错误
当位在计算机网络上传输时,它们可能会因干扰和网络问题而受损。损坏的位导致目的地接收到虚假数据,称为错误。
错误类型
错误可以分为三种类型,即单比特错误、多比特错误和突发错误。
- 单比特错误 - 在接收到的帧中,只有一个位被损坏,即从0变为1或从1变为0。
-
多比特错误 - 在接收到的帧中,多个位被损坏。
-
突发错误 - 在接收到的帧中,多个连续位被损坏。
错误控制
错误控制可以通过两种方式进行
- 错误检测 - 错误检测是检查是否发生了任何错误。错误比特的数量和错误的类型都无关紧要。
-
错误纠正 - 错误纠正是确定已损坏的比特数量和损坏比特的位置。
对于错误检测和错误纠正,发送方需要在数据比特之外发送一些附加比特。接收方根据附加的冗余比特进行必要的检查。如果发现数据没有错误,它会在将消息传递给上层之前移除冗余比特。
错误检测技术
有三种主要的帧错误检测技术: 奇偶检验 , 校验和 和 循环冗余检查 (CRC)。
奇偶检验
奇偶检验是通过向数据添加一个额外的比特,称为奇偶校验位,使得1的数量在偶奇校验的情况下要么是偶数,要么是奇数。
在创建帧时,发送方计算其中1的数量,并以以下方式添加奇偶校验位
- 对于偶校验:如果1的数量是偶数,则奇偶校验位值为0。如果1的数量是奇数,则奇偶校验位值为1。
-
对于奇校验:如果1的数量是奇数,则奇偶校验位值为0。如果1的数量是偶数,则奇偶校验位值为1。
收到帧后,接收器计算其中的1的数量。在偶校验检查中,如果1的数量是偶数,则接受该帧,否则拒绝。奇校验检查也采用类似的规则。
校验位适用于单比特错误检测。
校验和
在这种错误检测方案中,采用以下过程
- 将数据分成固定大小的帧或片段。
-
发送方使用1的补码算法将这些片段相加以得到和。然后对和进行取反得到校验和,并将其与数据帧一起发送。
-
接收方使用1的补码算法将传入的片段和校验和相加以得到和,然后对其进行取反。
-
如果结果为零,则接受接收到的帧;否则,将其丢弃。
循环冗余检查(CRC)
循环冗余检查(CRC)涉及到由通信系统约定的预定除数对发送的数据位进行二进制除法。除数使用多项式生成。
- 在这里,发送方通过除数对数据段进行二进制除法。然后将余数称为CRC位附加到数据段的末尾。这使得结果数据单元能够被除数整除。
-
接收方通过除数对接收到的数据单元进行除法。如果没有余数,则认为数据单元是正确的并接受它。否则,认为数据已损坏,因此拒绝。
纠错技术
纠错技术可以找出被损坏的位的确切数量和位置。有两种主要的方式
- 向后纠错(重传) - 如果接收方检测到传入帧中的错误,则请求发送方重新传输该帧。这是一种相对简单的技术。但它只能在重传不昂贵(如光纤)且重传时间相对于应用需求较短的情况下高效使用。
-
向前纠错 - 如果接收方检测到传入帧中的某些错误,则执行纠错码,生成实际的帧。这样可以节省重传所需的带宽。在实时系统中是不可避免的。但是,如果错误太多,需要重新传输帧。
四种主要的纠错码有:
- 汉明码
- 二进制卷积码
- Reed-Solomon码
- 低密度奇偶校验码