考研—计算机网络—数据链路层
数据链路层的功能
数据链路层在物理层提供服务的基础上向网络层提供服务,主要作用是加强物理层传输原始比特流的功能,将物理层中可能出错的物理连接改造成逻辑上无差错的数据链路。让网络层看来,是一条无差错的链路。
为网络层提供服务
1)无确认的无连接服务:源机器发送数据帧时,不建立连接,目的机器收到后也不发回确认,对于丢失的帧不负责重发,交给上层处理。适合实时通信和误码率较低的通信。如以太网。
2)有确认的无连接服务:依旧是不建立连接,但是目的机器收回时,发回确认,在规定时间内目的机器没有收到确认,就重传,提高可靠性。适用于误码率较高的通信,比如无线通信。
3)有确认面向连接服务:帧传输经过三个阶段:建立数据链路、传输帧、释放数据链路。目的机器每收到一帧就发回确认,可靠性、实时性高。
链路管理
链路的管理主要对于面向连接服务的管理。
1、两结点要通信前,先确定对方已处于就绪状态
2、交换必要信息进行帧序号初始化
3、建立连接
4、传输过程中维持连接
5、传输结束时释放连接
帧定界:在数据链路层中,要将网络层的分组封装成帧,以帧的格式传送。将分组前后加上首部尾部就变成了帧,首部尾部中的控制信息可以确定帧的界限。此所谓帧定界。
帧同步:指接收方在收到帧时,应该能根据帧的首部和尾部的特点,从二进制比特流中确定帧的起始和终止。(在HDLC通信规程中,标识位F 01111110来标识帧的开始和结束 )
透明传输:透明传输是针对帧同步中出现的问题, 透明传输就是指不管传输的是什么数据,都不会因为与帧同步中的标识位相同而提前结束传输。
流量控制
由于存在收发双方的速度不一致的情况,流量控制就是用来解决速度不一致的问题,实际上就是限制发送方的数据流量,使发送方的数据不会超车。发送方在发送过程中应该能够接收到某种反馈来感知接收方的速度,然后来调整自己的速度。
【注意】流量控制在很多层都有,只是作用对象不一样,数据链路层中的流量控制针对的是相邻两结点之间的数据链路上面的流量。
差错控制
由于信道中有噪声,以及各种现实因素的干扰,所以帧在传输过程中会有错误发生。错误通常分为两种:位错和帧错
位错是指某一位出现了错误,可以用循环冗余校验CRC方式发现位错,通过自动重传请求ARQ方式重传出错的帧。
帧错是指帧的丢失、重复、失序的错误。在数据链路层引入计数器和编号机制,就可以避免帧错。
组帧
数据链路层之所以不像物理层那样用比特直接做单位,而是使用帧,是基于分段的思想,为了实现差错控制时不用把所有数据重新发一遍,并且分段检错更容易一些。所以用帧作为数据单位。所以发送方应该将网络层的分组组成帧。组帧主要解决帧定界、帧同步、透明传输的问题。
1)字符计数法
在帧头部使用一个计数字段来标明帧内的字符数,从而就可以确定结束的位置了。(字符数中包含计数字段本身的一个字节)
特点:这种方法的问题在于对错误非常敏感,一旦头部的计数字段出了问题,收发双发将失去同步,后面的数据应该全部错误。
2)字符填充的首尾定界符法
使用特殊的字符来标识一帧的开始和结束,为了实现透明传输,数据链路层应该首先对网络层的数据进行处理,把信息位中出现的特殊字符前面加一个转义字符DLE,然后再组帧传输。接收方收到帧后,遇到转义字符就知道如何还原了。
3)比特填充的首尾标志法
比特填充法允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个比特数。它使用一个特殊的比特串来表示帧的开始和结束。即01111110来表示。为了不让信息位中错误识别成特殊位,要把信息位进行填充处理,每遇到连续的5个1就在后面填充一个0,接收方再逆操作。
特点:硬件上比字符填充更易于实现,性能优于字符填充。
4)违规编码法
物理层中的比特编码通常采用违规编码法,例如曼彻斯特编码方法中,将高低看作0 底高看做1 那么高高和低低就是违规的。违规就表示没有采用,那么可以在帧的起始和结束的时候使用违规的编码来区分,这样不需要填充就能实现透明传输。局域网IEEE802标准就使用了这种方法。
特点:只适用于采用冗余编码的特殊编码环境。现在常用的方法就是比特填充和违规编码两种方法。
差错控制
差错的原因都是噪声引起的,噪声有两类,一种是信道固有的随机热噪声,是可以通过提高信噪比来避免的,但是另一种是由于外界短暂原因造成的冲击噪声,是无法避免的。
通常利用编码技术进行差错控制,自动重传请求ARQ和前向纠错FEC。ARQ是发现错误后,自动请求重续传输错误帧,FEC不仅能发现差错,还能确认错的二进制位,可以纠正。因此差错控制可以分为检错编码和纠错编码
1)检错编码1、奇偶校验码2、循环冗余码CRC
2)纠错编码:海明码
流量控制
流量控制主要是对发送方的速度控制,这里主要涉及到如何将接收方的速度信息很好的反馈给发送方。常见的方式有两种:停止等待协议和滑动窗口协议
1)停止等待协议基本原理
发送方每发送一帧,都要等待接收方的应答信号,之后才能发生下一帧。弱智方法,效率很低。
2)滑动窗口协议基本原理
发生方有一个发送窗口,窗口内的帧都是可以发送的,窗口外的帧是不能发送的,当发送窗口中的帧发送完时,就停止发送。当接收方返回一个确认帧时,发送窗口就像前移动一个。其本质就是停止等待协议中加了一些缓冲空间。
【简而言之】从滑动窗口的角度来看,后面的所有流量控制算法之间的区别只是窗口大小不同罢了。
【ps】在数据链路层中,窗口的大小是固定的。接收窗口为1时,可以保证帧的有序传输。
3)可靠传输机制
数据链路层中的可靠机制主要依靠确认和超时重传来实现。发送方在发送一个数据帧后,会有一个计数器,计时,在有限时间范围内如果没有收到确认就重新发,直到收到为止。
自动重传请求和窗口滑动机制结合,就有三种方式:停等式ARQ、后退N帧ARQ、选择性重发ARQ。后两种都是窗口与重传的结合。
单帧滑动窗口(停止等待协议)
停止等待协议本质上就是发送窗口和接收窗口都为1的单帧滑动窗口。
在停止等待协议中,一共有三种错误的可能:
1)数据帧丢失:重传就好了