【计算机网络】数据链路层——1.功能、组帧、差错控制

1.数据链路层的功能

数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。

(1)为网络层提供服务

对网络层而言,数据链路层的基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。
数据链路层为网络层提供如下服务:
1)无确认的无连接服务。源机器发送数据帧时不需先建立链路连接,目的机器收到数据帧时不需发回确认。对丢失的帧,数据链路层不负责重发而交给上层处理。适用于实时通信或误码率较低的通信信道,如以太网。
2)有确认的无连接服务。源机器发送数据帧时不需先建立链路连接,但目的机器收到数据帧时必须发回确认。源机器在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。该服务适用于误码率较高的通信信道,如无线通信。
3)有确认的面向连接服务。帧传输过程分为三个阶段:建立数据链路、传输帧、释放数据链路。目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧,因而该服务的可靠性最高。该服务适用于通信要求(可靠性、实时性)较高的场合。

注意:有连接就一定有确认,不存在无确认的面向连接的服务。

(2)链路管理

数据链路层连接的建立、维持和释放过程称为链路管理,主要用于面向连接的服务。
链路两端的结点到进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接;在传输过程中要维持该连接;在传输完成后要释放该连接。

(3)帧定界、帧同步、透明传输

两个工作站之间传输信息时,必须将网络层的分组封装成帧,以帧的格式进行传送。
将一段数据的前后分别添加首部和尾部,就构成了帧。首部和尾部中含有很多控制信息,它们的一个重要作用是确定帧的界限,即帧定界。
帧同步指接收方应能从接收到的二进制比特流中区分出帧的起始与终止。
如果在数据中恰好出现与帧定界符相同的比特组合(会误认为“传输结束”而丢弃后面的数据),那么就要采取一定措施来解决,即透明传输。透明传输就是不管所传送数据是什么样的比特组合,都应该能在链路上传送。

(4)流量控制

由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接受能力的现象,如果此时不限制发送方的发送速率,前面来不及接收的帧将会被后面不断发送来的帧“淹没”,造成帧的丢失而出错。
因此,流量控制其实就是限制发送方的数据流量,使其发送速率不超过接收方的接受能力。

流量控制并不是数据链路层特有的功能,许多高层协议中也提供此功能,只不过控制的对象不同而已。对于数据链路层来说,控制的是相邻两结点之间数据链路上的流量,而对于运输层来说,控制的则是从源端到目的端之间的流量。

数据链路层流量控制

(5)差错控制

用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。通常分为位错和帧错。
位错指帧中某些位出现了差错。通常采用循环冗余校验(CRC)方式发现位错,通过自动重传请求(Automatic Repeat reQuest,ARQ) 方式来重传出错的帧。具体做法是:让发送方将要发送的数据帧附加一定的CRC冗余检错码一并发送,接收方则根据检错码对数据帧进行错误检测,若发现错误则丢弃,发送方超时重传该数据帧。这种差错控制方法称为ARQ法。ARQ法只需返回很少的控制信息就可有效地确认所发数据帧是否被正确接收。
帧错指帧的丢失、重复或失序等错误。在数据链路层引入定时器和编号机制,能保证每一帧最终都能有且仅有一次正确地交付给目的结点。

2.组帧

数据链路层之所以要把比特组合成帧为单位传输,是为了在出错时只重发出错的帧,而不必重发全部数据,从而提高效率。为了使接收方能正确地接收并检查所传输的帧,发送方必须依据一定的规则把网络层递交的分组封装成帧(称为组帧)。组帧主要解决帧定界、帧同步、透明传输等问题。通常有以下4种方法实现组帧。

注意:组帧时既要加首部,又要加尾部。原因是,在网络中信息是以帧为最小单位进行传输的,所以接收端要正确地接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(即IP数据报)仅是包含在帧中的数据部分,所以不需要加尾部来定界。

(1)字符计数法

字符计数法是指在帧头部使用一个计数字段来标明帧内字符数。目的结点的数据链路层收到字节计数值时,就知道后面跟随的字节数,从而可以确定帧结束的位置(计数字段提供的字节数包含自身所占用的一个字节)。
这种方法最大缺点是,如果计数字段出错,就失去了帧边界划分的依据,那么接收方就无法判断所传输帧的结束位和下一帧的开始位,收发双方将失去同步,造成灾难性后果。
字符计数法

(2)字符填充的首尾定界符法

字符填充法使用一些特定的字符来定界一帧的开始(DLE STX)与结束(DLE ETX)。为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可以在特殊字符前面填充一个转义字符(DLE)来加以区分,以实现数据的透明传输。接收方收到转义字符后,就知道其后面紧跟的是数据信息,而不是控制信息。
如下图(a)所示的字符帧,帧的数据段中出现DLE字符,发送方在每个DLE字符前再插入一个DLE字符(图b),接收方收到数据后会自己删除这个插入的DLE字符,结果仍得到原来的数据(图c)。这也正是字符填充法名称的由来。

注意:转义字符是ASCII码中的控制字符,是一个字符,而非“D”“L”“E”三个字符的组合。

字符填充法

(3)零比特填充的首位标志法

零比特填充法允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式,即以0111110来标志一帧的开始和结束。为了不使信息位中出现的比特流0111110被误判为帧的首尾标志,发送方的数据链路层在信息位中遇到5个连续的“1”时,将自动在其后插入一个“0”;而接收方做该过程的逆操作,即每收到5个连续的“1”时,自动删除后面紧跟的“0”, 以恢复原信息。
零比特填充法很容易由硬件来实现,性能优于字符填充法。
比特填充法

(4)违规编码法

在物理层进行比特编码时,通常采用违规编码法。例如,曼彻斯特编码方法将数据比特“1”编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对,而“高-高”电平对和“低-低”电平对在数据比特中是违规的(即没有采用)。可以借用这些违规编码序列来定界帧的起始和终止。局域网IEEE 802标准就采用了这种方法。
违规编码法不需要采用任何填充技术,便能实现数据传输的透明性,但它只适用于采用冗余编码的特殊编码环境。
由于字节计数法中计数字段的脆弱性和字符填充法实现上的复杂性与不兼容性,目前较常用的组帧方法是比特填充法违规编码法

3.差错控制

实际通信链路都不是理想的,比特在传输过程中可能会产生差错,1可能会变成0,0也可能会变成1,这就是比特差错。比特差错是传输差错中的一种,这里只讨论比特差错。
通常利用编码技术进行差错控制,主要有两类:自动重传请求ARQ前向纠错FEC
在ARQ方式中,接收端检测出差错时,就设法通知发送端重发,直到接收到正确的码字为止。在FEC方式中,接收端不但能发现差错,而且能确定比特串的错误位置,从而加以纠正。因此,差错控制又可分为检错编码和纠错编码。

(1)检错编码

检错编码采用冗余编码技术,其核心思想是在有效数据(信息位)被发送前,先按某种关系附加一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到的码字是否仍符合原规则来判断是否出错。
常见的检错编码有奇偶校验码和循环冗余码。

  • 奇偶校验码
    奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。它由n-1位信息元1位校验元组成,如果是奇校验码,那么在附加一个校验元后,码长为n的码字中“1”的个数为奇数;如果是偶校验码,那么在附加一个校验元以后,码长为n的码字中“1”的个数为偶数。它又分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验。
  • 循环冗余码
    循环冗余码(Cyclic Redundancy Code, CRC)又称多项式码,任何一个由二进制数位串组成的代码都可以与一个只含有0和1两个系数的多项式建立对应关系。一个k位帧可以视为从xk-1到 x0的k次多项式的系数序列,这个多项式的阶数为k-1,高位是xk-1项的系数,下一位是xk-2的系数,以此类推。例如,1110011 有7位,表示成多项式是x6+x5+x4+X+1,而多项式x5+X4+X2+X对应的位串是110110,其运算过程如图所示。
    循环冗余码
    给定一个m bit的帧或报文,发送器生成一个r bit的序列,称为帧检验序列(FCS)。 这样所形成的帧将
    m+r比特组成。发送方和接收方事先商定一个多项式G(x) (最高位和最低位必须为1),使这个带检验码的帧刚好能被预先确定的多项式G(x)整除。接收方用相同的多项式去除收到的帧,如果无余数,那么认为无差错。
    假设一个帧有m位,其对应的多项式为M(x),则计算冗余码的步骤如下:
    1)加0。假设G(x)的阶为r, 在帧的低位端加上r个0。
    2)模2除。利用模2除法,用G(x)对应的数据串去除1)中计算出的数据串,得到的余数即为冗余码(共r位,前面的0不可省略)。
    多项式以2为模运算。按照模2运算规则,加法不进位,减法不借位,它刚好是异或操作。乘除法类似于二进制的运算,只是在做加减法时按模2规则进行。
    冗余码的计算举例:设G(x)=1101 (即r=3), 待传送数据M= 101001 (即m=6),经模2除法运算后的结果是:商Q= 110101,余数R= 001。所以发送出去的数据为101001 001 (即2rM+FCS),共有m+r位。

(2)纠错编码

在数据通信的过程中,解决差错问题的一种方法是在每个要发送的数据块上附加足够的冗余信息,使接收方能够推导出发送方实际送出的应该是什么样的比特串。
最常见的纠错编码是海明码,其实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,而且能指出错位的位置,为自动纠错提供依据。
下面以数据码1010为例说明海明码的编码原理和过程。

  • 1)确定海明码的位数
    设n为有效信息的位数,k为校验位的位数,则信息位n和校验位k应满足 n+k<=2k -1(若要检测两位错,则需要再加1位校验位,即k+1位),海明码位数为n+k=7<=23-1成立,则n、k有效。设信息位为D4D3D2D1(1010),共4位,校验位为P3P2P1,共3位,对应的海明码位H7H6H5H4H3H2H1
  • 2)确定校验位的分布
    规定校验位Pi在海明位号为2i-1 的位置上,其余各位为信息位,因此有:
    P1的海明位号2i-1 =20 =1,即H1为P1
    P2的海明位号2i-1 =21 =1,即H2为P2
    P3的海明位号2i-1 =22 =1,即H4为P3
    将信息位按原来的顺序插入,则海明码各位的分布如下:
    H7 H6 H5 H4 H3 H2 H1
    D4 D3 D2 P3 D1 P2 P1
  • 3)分组以形成校验关系
    每个数据位用多个校验位进行校验,但要满足条件:被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和。另外,校验位不需要再被校验。分组形成的校验关系如下。
    在这里插入图片描述
  • 4)校验位取值
    校验位Pi的值为第i组(由该校验位校验的数据位)所有位求异或。
    根据上面的分组有
    P1=D1⊕D2⊕D4=0⊕1⊕1=0
    P2= D1⊕D3⊕D4=0⊕0⊕1= 1
    P3= D2⊕D3⊕D4=1⊕0⊕1=0
    所以,1010 对应的海明码为1010010 (下划线为校验位,其他为信息位)。
    每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验检查,构成k个校验方程:
    S1=P1⊕D1⊕D2⊕D4
    S2=P2⊕D1⊕D3⊕D4
    S3=P3⊕D2⊕D3⊕D4
    若S3S2S1的值为“000”,则说明无错;否则说明出错,且这个数就是错误位的位号,如S3S2S1 = 001,说明第1位出错,即H1出错,直接将该位取反就达到了纠错的目的。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值