2.3数据链路层
2.3.1数据链路层概述
1、数据链路层在网络体系结构中所处的地位
如下图所示:主机H1给主机H2发送数据,中间要经过三个路由器、电话网、局域网、广域网等多种网络。
从五层协议原理体系结构的角度来看,主机应该具有体系结构中的各个层次,而路由器只需要具有体系结构中的网络层、数据链路层、物理层。网络中的各个设备通过传输媒体进行互连,主机H1将需要发送的数据逐层封装后通过物理层将构成数据包的各个比特转换为电信号发送到传输媒体,数据包进入到路由器后,从下往上逐层解封到网络层,路由器根据数据包的目的网络地址和自身的转发表确定数据包的转发端口,然后从网络层向下逐层封装数据包,最后通过物理层将数据包发送到传输媒体,最后到达主机H2,主机H2在接收到数据包后再逐层解封。
当我们研究数据链路层时,我们可以只关心数据链路层,而不考虑其他各层。我们可以想象,数据只在数据链路层从左至右沿水平方向传送。从数据链路层来看,主机H1到主机H2的通信可以看作是在4段不同的链路上的通信所组成的。
所谓的链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。要在链路上传输数据,仅有链路还不够,还需要一些通信协议来控制这些数据的传输,如果把实现这些协议的硬件和软件加到链路上就构成了数据链路(DataLink)
在数据链路上传输的数据包,又称为帧。(数据链路层是以帧作为单位传输和处理的)
注意:结点就是网络中的一台主机。
数据链路层的协议有很多种,但是有三个基本问题是共同的。这三个基本问题就是:封装成帧、透明传输和差错检测。
2.3.2 封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
数据链路层的上层是网络层,数据在5层协议体系结构中的传输是逐层封装的。
-
帧头和帧尾中包含有重要的控制信息
以太网V2的MAC帧:前14个字节是帧头,后4个字节是帧尾
目的地址和源地址都是MAC地址
PPP帧:前5个字节是帧头,后3个字节是帧尾
-
帧头和帧尾的作用之一就是帧定界
- 例如:PPP帧的第一个字节和最后一个字节就是帧定界,通过这两个字节就能够从物理层交付的比特流中提取出一个一个的帧。
- 例如:PPP帧的第一个字节和最后一个字节就是帧定界,通过这两个字节就能够从物理层交付的比特流中提取出一个一个的帧。
-
并不是每种数据链路层协议的帧都包含有帧定界标志,例如MAC帧在帧头和帧尾中是没有包含帧定界的标志的,那么接收方是如何从物理层交付的比特流中提取出一个个的以太网帧的呢?
知道怎么打包就知道怎么解包
数据链路层封装MAC帧的步骤:- 第一步:数据链路层封装好MAC帧,将其交付给物理层。
- 第二步:物理层在MAC帧的前面添加8字节的前导码,前导码的前7个字节为前同步码,其作用是使接收方的时钟同步,之后的1个字节为帧开始定界符,表明其后紧跟着的就是MAC帧。
2.3.3透明传输
1、透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
- 当数据帧中的数据是帧定界标志时,发送端的数据链路层该如何处理呢?
-
当物理链路提供的是面向字符的传输服务时(物理链路以字符为单位传输数据)
SOH表示帧头,EOT表示帧尾
网络层传输的数据通常使用数据包(Packet)进行传输。数据包是在传输层(Transport Layer)上封装了网络层(Network Layer)的数据,并添加了一些必要的控制信息。
在数据包中,每个数据包通常包含了帧头(Frame Header)和帧尾(Frame Footer)作为边界标识。帧头和帧尾的目的是帮助接收端正确解析和提取数据,以便恢复原始的传输数据。
上图所示意思为:网络层传输的数据中有与帧尾相同的内容,可能会导致接收端在解包时出现错误。这种情况被称为帧同步错误(Frame Synchronization Error),即接收端无法准确地确定帧的起始和结束位置,从而导致数据解析错误。解决办法:
数据链路层在交付数据给物理层时,对帧进行扫描,首先扫描到SOH,然后每扫描到一个SOH或者EOT就在前面加转义字符ESC,直至扫描到最后一个EOT,这种方式称之为:字节填充(byte stuffing)或字符填充(character stuffing)
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符 -
当物理链路提供的是面向比特的传输服务时(物理链路以比特为单位传输数据)
在数据发送前采用零比特填充法:对数据进行扫描,每5个连续的比特1后面就插入1个比特0
-
考研真题:
2、为了提高帧的传输效率,应当使帧的数据部分(IP数据报)的长度尽可能大些,即减少封装次数。
3、考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(MaximumTransferUnit)。
2.3.4差错校验
1、实际的通信链路都不是理想的,比特流在传输过程中由于受到各种干扰可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错,或者称为误码。
2、一段时间内,传输错误的比特占所传输比特总数的比率称为误码率(Bit Error Rate)
3、接收方是如何知道数据在传输的过程中出现差错了呢?使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
4、在封装好的帧中利用若干个字节表示帧校验序列FCS字段。FCS:Frame Check Sequence(帧校验序列)。FCS字段由一些差错校验算法计算得出,常用的校验算法为:循环冗余校验CRC(Cyclic Redundancy Check)。
5、接收方在接收到数据后计算出一个FCS,然后将计算得出的FCS与接收到的数据帧中的FCS进行比较。
数据载荷是网络层封装后的ip报文
由于判断FCS是否正确只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。接收方可以通过检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。