文章目录
- 一:数据链路层概述
- (1)为什么要有数据链路层
- (2)数据链路层定义
- (3)点对点信道和广播信道
- 二:数据链路层需要解决的一些问题
- (1)三个最基本问题
- ①:封装成帧
- ②:差错检测
- ③:可靠传输
- (2)其他问题
- ①:编址
- ②:冲突避免
一:数据链路层概述
(1)为什么要有数据链路层
为什么要有数据链路层:上一章节中说到的物理层,它只负责比特流的传输,因此是无法保证传输的可靠性的,因为比特流在传输的过程极易发生跳变、错位、乱序等问题。所以我们需要一种控制手段施加物理层上,来保证物理层传输的可靠性,这一层便是数据链路层
(2)数据链路层定义
数据链路层:负责通过一条链路从一个结点向另一个相邻结点传送帧
- 链路(Link):是指从一个结点到相邻结点的一段物理线路,中间没有其他任何交换结点
- 数据链路(Data Link):想要在链路上传输数据,仅有链路还远远不够,还需要一些通信协议来控制这些数据的传输。因此如果把实现这些协议的硬件和软件加到链路上就构成了数据链路
- 帧(Frame):在数据链路层传输的数据包称之为帧,因此数据链路层以帧为单位传输和处理数据
在大多数情况下,研究数据链路层的相关问题时可以不考虑网络体系结构中的其他层,因此可以想象:数据包只在数据链路层从左向右沿水平方向传送
如下图,从数据链路层看,主机H1到H2的通信可以看成是由4段不同链路上的通信所组成的
(3)点对点信道和广播信道
数据链路层使用的信道主要有两种类型
- 点对点信道:这种信道使用一对一的点对点通信方式(如上图)
二:数据链路层需要解决的一些问题
(1)三个最基本问题
封装成帧、差错检测和可靠传输是数据链路层需要解决的最基本也是最重要的问题,在后面小节中会详细介绍,这里了解概念即可
以点对点信道为例进行介绍
①:封装成帧
封装成帧:我们将数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作称之为封装成帧,添加帧头和帧尾的目的都是为了在链路上以帧为单元来传送数据,也就是为了实现数据链路层本身的功能
例如下图是以太网V2的MAC帧格式
②:差错检测
差错检测:帧在传输过程中可能会因为各种原因(例如信道噪声)而产生误码,接收方主机用以确定是否产生误码的方法称之为差错控制
这可以通过添加检错码(或校验码)来发现。具体来说,发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾,接收方主机在收到帧后,通过检错码和检错算法判断传输过程中是否出现了误码
- 例如以太网V2的MAC帧的帧尾,就是4字节的帧检验序列FCS
③:可靠传输
可靠传输:误码是不可能完全避免的,但若能实现发送方发送什么,接收方就能接收到什么,就可以称数据链路层提供的是可靠传输。换句话说,接收方接收到错误的帧后会丢弃,如果它提供的是不可靠传输,那么丢了就丢了,不会再有任何补救措施;而如果它提供的是可靠传输,那么它会通过各种方法拿到该帧的正确版本,以交付给上一层
(2)其他问题
对于使用广播信道的数据链路层来说,除了要解决上面的三个最基本问题之外,还有一些其他问题需要解决
①:编址
编址:如下图,对于使用一根总线互连的各主机来说,所传输的数据会在总线上流动,因此如何确定帧的来源和目的称之为编址
如下图是以太网V2 的MAC帧格式,其首部三个字段中,就有两个字段分别是目的地址和源地址
②:冲突避免
冲突避免:当总线上多台主机同时使用总线来传输帧时,传输信号就会产生碰撞,这是采用广播信道的共享式局域网不可避免的问题,所以数据链路层必须解决这样的问题
例如以太网采用CSMA/CD协议进行控制