数据链路层
1、数据链路层的作用及主要功能
作用:利用物理层提供的“比特有序传送功能”,在相邻的结点之间实现透明、可靠的数据传送。
相邻——两个结点之间存在物理链路
可靠——保证正确(数据正确,顺序正确等)
透明——无论何种类型的数据,都按其原有形式传送
1.1、数据链路层的基本概念
链路(Link):一条无源的点-点物理线路段,中间没有任何交换接点。链路是基本的单元,两台机器之间的通信路经就是由许多链路串接而成的
数据链路(Data Link):把实现控制数据传送规程的硬件和软件加到链路上,就构成的数据链路。数据链路如同“数字管道”,可在其上进行数据通信。当使用复用技术时,一条链路上可以有多条数据链路
1.2、数据链路层的主要功能
(1)数据链路管理
建立一条数据链路
在传输数据时,维持数据链路
数据传输结束时,释放数据链路
(2)数据的帧化(Framing)
以易于处理的数据长度对数据进行分段
每一段为一帧(frame)
以帧为单位进行传输
实现定界和帧同步
(3)帧同步(Synchronization)
接收方能从收到的比特流中准确区分出一帧的开始和结束
(4)帧顺序化(Sequencing)
为保证分段后的数据的连续性,需要确定帧的顺序
(5)流量控制
当接收方来不及接收时,必须控制发送的速度
(6)差错控制
由于传送过程中可能出现错误,在发送的帧中应附加冗余信息,以便接收方检查所接收的帧有无错误
(7)透明传输
当所传送的数据中的比特组合恰好与某一控制信息的比特组合一样时,必须采取措施,使接收方不会将这样的信息误认为是控制信息
(8)寻址
在多点连接的情况下,必须保证每一帧都能送到正确的接收结点。接收方也应该知道谁发送的帧
2、数据链路层服务
数据链路层为网络层提供透明、可靠的数据传送服务。可以提供不同类型的服务,基本上有三种:
无确认、无连接服务
有确认、无连接服务
面向连接的服务
2.1、无确认、无连接服务
事先不建立连接,向目的结点发出独立的帧,目的结点对接收的帧不作确认。若帧丢失,数据链路层不恢复它,而由上层负责。主要适用于误码率较低的情况,或语音等实时信息的传送
2.2、有确认、无连接服务
事先不建立连接,对每一个发出的帧要单独确认
2.3、面向连接的服务
在传送数据之前,需要建立连接(数据链路),在建立的连接上传送帧,数据传送完毕后,需要释放连接
3、帧、帧同步和透明传输
数据链路层利用物理层提供的服务实现数据传送。为了检测、纠正物理层比特传输错误,数据链路层将比特流分割成帧(有限长度)。通过检查帧,而不是长比特流,数据链路层可以发现错误,并采取措施
3.1、字符计数
特点:在帧首部(header)设置一个计数字段,记录帧中的字符数
3.2、起始/结束字符
特点:在帧开始和帧结束处插入ASCII字符序列(面向字符),易于实现帧同步
3.3、起始/结束标识
特点:支持任意位长数据的传输(面向位),在帧开始和帧结束处插入例如01111110
3.4、非常规物理层编码
特点:利用数据编码中不可能出现的非常规编码标识帧的开始或结束
4、差错控制
4.1、差错检测与纠正
用于帧错误检测和纠正,两种基本策略:
纠错码:在每个要发送的帧上附加足够的冗余信息,使接收方能够推导出实际发送的数据
检错码:为提高效率,通常只进行检错,然后通过重发纠错
4.2、重发、应答和顺序
我们将自动请求重发丢失的帧或出错的帧的系统(机制)称为ARQ(自动重发请求)
有三种常用方法实现ARQ:停-等ARQ,连续ARQ,选择重传ARQ
重发:
纠错的有效手段,网络协议大量使用
发送方发现错误后,重发出错的帧
但重发可能会带来重复,必须解决
编号是解决重复的一种有效的方法
为进行重发,发送方必须缓存所发送的帧
编号:
数据链路层将用户数据分割成帧来传输,因此存在先后顺序问题
编号可以解决顺序问题和帧重复问题,可以提高传输效率
由于编号空间有限,引入编号会带来其它问题。
应答:
发送方如何确定接收方正确接收了帧?
应答是一种有效的方法
若接收帧正确,则发送肯定应答帧(Positive Acknowledgment—ACK)。发送方继续发送后面的帧
若接收帧错误,则发送否定应答帧(Negative Acknowledgment—NAK)。发送方重发出错的帧
发送方为每个发送的帧设置一个定时器(Time-out Timer)
若发送方在规定时间内未收到应答,则认为数据帧丢失,发送方重发丢失的帧
5、基本的数据链路层协议
5.1、理想协议
完全理想化的数据传输,任何数据都不会出错,接收方总来得及收下,并及时上交,传输是单向的,网络层一直处于“准备好”状态,显然不需要差错控制和流量控制机制,可以连续发送,不需要应答
5.2、单向停-等协议
假设:任何数据都不会出错,不会丢失,传输是单向的,但接收方的接收、处理能力有限。显然需要流量控制功能
基本思想:发送方一次只发送一帧,然后停下,等待接收方应答。若收到应答,继续发送下一帧,否则继续停下等待。具有最简单的流量控制功能
5.3、实用的停-等协议
假设:任何数据都可能出错、丢失,接收方的接收、处理能力有限,传输是双向的。显然需要具有差错控制和流量控制
基本思想:
发送方:
一次只发送一帧,并启动定时器,然后停下,等待接收方应答
若收到肯定应答ACK,继续发送下一帧
若收到否定应答NAK,则重发该帧
若定时器超时,则重发该帧
接收方:
接收帧,检查帧校验和
正确,将帧交给上层,回送肯定应答ACK
错误,丢弃该错误帧,回送否定应答NAK
5.4、管道传输协议
停-等ARQ的问题:信道的利用率低,单向传输,传输延迟的影响
解决:
连续发送多个帧(称为流水传输)(pipelining)
利用同一信道实现双向传输
载答,利用双向传输的功能,将应答放到数据帧中发送回去,减少应答开销
根据重发处理的不同,流水传输分为两种:
连续ARQ
选择重传ARQ
5.4.1、连续ARQ
基本思想:
发送方一次可以连续发送多个帧,需要对每个帧进行编号
接收方按顺序接收帧,并应答,应答帧也需要编号
若收到ACK,发送方从ACK指示的序号处开始继续发送其它帧
若定时器超时,发送方重发超时帧,及其以后的各个帧
注意:
需要缓存帧,但发送方必须缓存已经发出但还未被ACK的帧
接收方只能按顺序接收,在接收到帧i之前,不能接收帧i+1,按顺序将报文提交给上层
5.4.2、选择重传ARQ
基本思想:
与连续ARQ相同,但只重传出错的帧
接收方可以不按顺序接收帧
注意:
发送方必须缓存已经发出但还未被ACK的帧
接收方必须缓存接收的帧,直到能提交给上层
接收方ACK应答所有正确接收的帧,为减少ACK开销,只需肯定应答最高编号的数据帧即可
6、流量控制
如果发送方发送过快,而接收方又来不及处理,会导致帧丢失。因此必须对发送速度进行控制——流量控制
流量控制方法:设置通信缓冲区,XON/XOFF控制,协议控制
6.1、设置通信缓冲区
开辟一块存贮区暂存数据,以补偿发送和接收的速度差异。通常,在发送端和接收端都设置缓冲区
6.2、XON/XOFF控制
一种主动技术,适合异步传输。利用XON/XOFF控制,交替开关数据流
当接收端的数据量接近接收缓冲区大小时,发送XOFF。发送端收到XOFF后,停止发送
当接收端处理完毕,有足够的可用缓冲区时,发送XON。发送端收到XON后,继续发送
6.3、协议控制
一种主动技术。利用协议的方法控制数据块在二个系统之间的传送。
7、滑动窗口协议
发送端和接收端分别设定发送窗口和接收窗口。发送窗口用来对发送的帧数量及序号进行控制,接收窗口用来对接收的帧数量及序号进行控制
发送窗口:发送进程维持的一张帧的发送序号表,表的大小(长度)指示可以连续发送的帧的数量,即在未收到确认帧的情况下,发送方可以连续发送多少个帧。表项指示连续发送时的帧的序号范围(注意:序号循环使用)。显然,表的可能的最大长度为2的n次幂
接收窗口:接收进程维持的一张帧的接收序号表,表的大小(长度)指示可以接收的帧的数量,表项指示允许接收的帧的序号范围。显然,表的可能的最大长度为2的n次幂。只有当收到的数据帧的发送序号落入接收窗口内才允许将该数据帧收下,若接收到的数据帧落在接收窗口之外,则一律将其丢弃
8、数据链路层协议
主要分为两类:
面向字符型协议——以字符为传输信息的基本单位,如IBM BSC (或BISYNC) 协议
面向比特型协议——以比特为传输信息的基本单位,如IBM SDLC,ISO HDLC,CCITT LAP-B