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

浙公网安备 33010602011771号