概述
数据链路层是OSI模型的第二层,介于物理层和网络层之间。它在物理层提供的服务的基础上,为网络层提供服务。其提供的基本服务是:将来自源主机的网络层的数据可靠地传输到目标主机的网络层。
引入数据链路层的主要原因是:
- 因为物理线路上存在着噪声,所以接收信号必然是数据信号和噪声信号的叠加,这就是差错出现的原因。设计数据链路层的目的是:在原始的、有差错的物理线路的基础上,采取差错检测、差错控制、流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,向网络层提供高质量的服务
- 从网络参考模型的角度看,物理层之上的每一层都有改善数据传输质量的责任,其中,数据链路层是最重要的一层
其主要功能有:
-
链路管理
- 通信开始前,建立数据链路连接
- 数据传输过程中,维护数据链路连接
- 通信结束后,释放数据链路连接
-
透明传输
-
帧同步
- 数据链路层将来自上层的数据封包(packet)转换成帧(frame),帧是数据链路层传输数据的单位,有了帧之后,就可以只将传输过程中发生差错的帧进行重发
- 帧的数据结构必须被设计成:使接收方能从物理层收到的比特流中区分出帧的起始与终止。并且,每个帧除了包含要传送的数据之外,还要包含校验码,以使接收方能够发现传输过程中发生的差错
-
差错控制
- 接收端在收到帧之后,先根据校验码进行差错检测,然后向发送端反馈一个是否正确接收的信息,发送端据此来决定是否需要重发
- 物理线路上的突发噪声可能导致反馈信息帧丢失,进而导致发送方永远接收不到接受方的反馈信息,从而使传输过程停滞,为了避免这种状况,发送方在发送一个帧的时候,需要启动一个定时器,若在限定的时间间隔内未收到接收方的反馈信息,则认为帧已丢失或出错,会重新发送该帧
- 通过上段描述可知,同一个帧可能被重复发送多次,如果不采取任何措施,就会导致同一个帧被多次提交给接收端的网络层,为了防止这种危险,发送端需要赋予每个帧一个序号,接收端根据这个序号来判断接收到的帧是否已经被成功接收过
- 综上,数据链路层通过使用定时器和序号,来保证每帧都被正确地提交给接收端的网络层
-
流量控制
- 流量控制并不是数据链路层所特有的功能,许多高层协议也提供流控功能,只不过流控的对象不同而已。数据链路层控制的是相邻两个节点之间的流量;传输层控制的是从源端到目的端之间的流量
- 流量控制是对发送方的数据流量进行控制,使其发送速率不能超过物理线路的处理能力或接收方的接收能力。这个过程需要通过某种反馈机制,使发送方知道接收方能够跟上发送方、发送方什么时候可以发送下一帧、发送方什么时候必须暂停发送,在收到某种反馈信息后继续发送
分层
数据链路层比较特殊,因为它的下层是物理实体的定义,上层是软件封包的定义。因此,它分为两个子层:
-
介质访问层
- 偏硬件介质的部分
- 介质访问层主要负责Media Access Control。它经由通讯协议获取网络介质的访问权,然后将帧通过物理层发送到接收方。目前最常用的协议有以太网协议和PPP协议
-
逻辑链路层
- 偏软件的部分
- 主要负责将来自网络层的数据封包(packet)转换成帧(frame),并负责流量控制、差错控制等工作
滑动窗口协议
数据链路层的差错控制和流量控制采用了滑动窗口协议。关于滑动窗口协议,可以参考:https://blog.csdn.net/jeffleo/article/details/53932693。
也可以参考传输层的滑动窗口协议:http://blog.timd.cn/tcp-window/。
参考文档