4.0链路层概述及差错检测和纠正技术

链路层概述

链路层提供的服务

任一链路层的基本服务是将数据报通过单一通信链路从一个结点移动到相邻结点,但不同链路层协议能提供不同服务细节:

  • 成帧  几乎所有的链路层协议都要讲网络层数据报用链路层帧封装起来。
  • 链路接入  媒体访问控制(MAC)协议规定了帧在链路上传输的规则。
  • 可靠交付  保证无差错的经链路层移动每个网络层数据报。链路层的可靠交付服务时通过确认和重传取得的
  • 差错检测和纠正  通过让发送结点在震中包括差错检测比特,让接受结点进行差错检查,以此完成这项工作

链路层的实现

在网络中,链路层是实现在路由器的线路卡中。主机的链路层主体部分是在网络适配器(网络接口卡)中实现的,但也有一些高层链路层功能是在链路层软件组建中实现的。所以链路层是硬件和软件的结合体,是协议栈中软件与硬件交接的地方

差错检测和纠正技术

奇偶校验

差错检测最简单的方式就是用单个奇偶校验位。如下图所示

只需要在发送数据后面添加一个附加比特,选择它的值使得这d+1个比特中1的总数为偶数个则为偶校验(奇数个则为奇校验)。接收方只需要数一数接收的d+1个比特中1的数目即可。 偶校验方案中出现了奇数个值为1的比特,则出现差错,反之亦然。但如果发生两个比特差错,则会有未检出的差错。

对单个奇偶校验的一种简单改进是使用二维奇偶校验。将d个比特划分为i行j列。对每行每列计算奇偶值,产生的i+j+1奇偶比特构成了链路层帧的差错检测比特。如下如所示

显然,二维就校验可以检测并纠正出一个比特差错,能检测出两个比特差错。

检验和方法

在检验和方法中,d比特数据作为一个k比特证书的序列处理。将这k比特整数加起来,并且用得到的和作为差错检测比特。这个和的反码形成了携带在报文段首部的因特网检验和。接收方通过对接收的数据(包括检验和)的和取反码,并且检测其结果是否为全1比特来检测加盐和。如果出现0,就可以指示出差错。

循环冗余检测(CRC)

CRC编码也称为多项式编码,因为该编码能够将要发送的比特串看为系数是0和1的一个多项式,对比特串的操作被解释为多项式算术。

CRC编码的关键思想如下图所示:对于一个给定的数据段D,发送方要选择r个附加比特R,并将它们附加到D上,使得得到的d+r比特模式用模2算术恰好能被G(发送方和接收方协商的一个r+1比特模式,称为生成多项式,通常由国际标准决定)整除。检测过程也很简单:接收方用G去除接收到的d+r比特。如果余数为非零,接收方知道出现了差错,否则认为数据正确被接收。

所有CRC计算采用模2算术来做,在加法中不进位,在减法中不借位。即这两种操作等价于操作数的按位异或(XOR) 。乘法和除法与在二进制中是相同的(乘以2^k)就是以一种比特模式左移k个位置。

如何计算R使得G能够除以D*2^r XOR R没有余数?

从上面式子可以推导出R为D*2^r除以G的余数

在D=101110,d=6,G=1001和r=3的计算过程如下所示:

可以看到,每个CRC标准都能检测小于r+1比特的突发差错,此外,在适当的假设下,长度大于r+1比特的突发差错以概率1-0.5^r被检测到。

运输层使用检验和,链路层使用CRC进行差错检测。原因:运输层通常是在主机中作为用户操作系统的一部分用软件实现,采用简单而快速的差错检测方案是重要的。而链路层的差错检测在适配器中用专用的硬件实现,它能快速执行更复杂的CRC操作

猜你喜欢

转载自blog.csdn.net/weixin_39722922/article/details/88690475