【概述】
数据链路层,是在物理层所提供服务的基础上向网络层提供服务,负责通过一条链路,从一个结点向物理链路相连的另一结点传送数据
数据链路层将物理层提供的可能出错的物理连接,改造为逻辑上无差错的数据链路,使其对网络层表现为一条无差错的链路
其主要具有为网络层提供服务、链路管理、组帧、差错控制、流量控制与可靠性传输、介质访问控制的功能
【为网络层提供服务】
对网络层来说,数据链路层的基本任务就是将源机器中来自网络层的数据,传输到目标机器的网络层
链路层通常可为网络层提供以下服务:
- 无确认无连接服务:源机器发送数据帧无需建立连接,目的机器收到帧后无需返回确认,对于丢失的帧链路层不负责重发而是交由上层处理,适用于实时通信、误码率低的信道,如以太网
- 有确认无连接服务:源机器发送数据帧无需建立连接,目的机器收到帧后必须返回确认,源机器在规定时间内未收到确认信号,就重传丢失的帧,适用于误码率高的信道,如无线通信
- 有确认面向连接服务:帧传输分为建立链路、传输帧、释放链路三个过程,目的机器对收到的每一个帧都要给出确认,源机器收到确认后再发送下一帧,适用于要求高可靠性、高实时性的信道
【链路管理】
数据链路层连接的建立、维持、释放过程被称为链路管理,其主要用于面向连接的服务
当链路两端的结点进行通信前,需要确认对方已处于就绪状态,并交换必要的控制信息以对帧序号初始化,之后才能建立连接
在传输过程中,要能够保证为此连接不断开,在传输完毕后,则要释放该连接
在譬如局域网这样多个站点共享同一物理信道的情况下,对通信站点间分配、对信道的管理等,也属数据链路层链路管理的范畴
【组帧】
在两个工作站之间传递信息时,将比特封装为帧,以帧的格式进行传送,之所以要这样做,是为了在出错时只重发出错的帧,不重发全部的数据,从而提高效率
对于一段数据来说,要想将其封装为帧,只需要在其前后分别包含控制信息的添加头部和尾部,他们的一个重要作用就是利用帧定界符来确定帧的界限,即帧定界
由于在网络中是以帧为最小单位传输的,接收端要正确的接收帧,就要清楚的知道该帧在一串二进制比特流中区分出帧的起始与终止,即帧同步
如果数据中恰好出现与帧定界符相同的比特组合,那么终端将会误认为传输结束而丢弃后面的数据,为解决这种问题,采用透明传输的方法,使得无论传输的数据是何种比特组合,都可在链路上传输
【差错控制】
由于信道噪声等原因,帧在传输过程中可能会出现错误,这些错误可分为帧错和位错,令发送方确定接收方是否正确收到由其发送的数据的方法被称为差错控制
帧错,指帧的丢失、重复、失序等错误,通常在数据链路层引入定时器与编号机制,能保证每一帧都能有且仅有一次正确地交付目的结点
位错,指帧中某些位出现了差错,即 1
可能变成 0
,0
可能变成 1
,通常采用编码技术来进行控制,一种是自动重传请求 ARQ,在接收端检测出错后,就通知发送端重发,直到接收到正确的编码位置;另一种是前向纠错 FEC,在接收端检测出错后,可以确定二进制编码的出错位置,并加以纠正
【流量控制与可靠性传输】
由于收发双方各自的工作速率和缓冲空间的差异,可能会出现发送方发送速率大于接收方接收速率的情况
若不对发送方的发送速率(链路上的信息流量)进行适当的限制,接收方来不及接收的帧将会被发送方后续不断发来的帧所淹没,造成帧的丢失从而出错
因此,流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收速率
在流量控制的过程中,需要某种反馈机制,使得发送方知道在何种情况下发送下一帧,什么情况下暂停发送,目前,常见的方式有两种:停止-等待协议、滑动窗口协议
需要注意的是,流量控制不是数据链路层独有的功能,传输层的协议中也提供该功能,只是控制的对象不同,对于数据链路层来说,其控制的是相邻两结点间链路上的流量,对于传输层来说,其控制的是源端到目的端之间的流量
可靠传输保证了数据传输无误,通常采用确认、超时重传两种机制来实现
确认,是一种无数据的链路层控制帧,其可以使接收方能够让发送方知道哪些内容被正确接收,某些情况下,通常将确认捎带在一个回复帧中,称为捎带确认
超时重传,是指发送方在发送某个数据帧后就启动一个计时器,在一定时间内如果没有收到数据的确认帧,就重新发送该数据帧
自动重传请求(Auto Repeat ReQuest,ARQ)就是结合确认与超时重传两种机制的可靠传输方法,其通过接收方请求发送方重传出错的数据帧来恢复出错的帧
在数据链路层中,流量控制与可靠性传输两者是交织在一起的