数据链路层的功能

3.1 的五个三级节都很短,合为一页。它们回答同一个问题:数据链路层到底负责什么、不负责什么。 后面七节都是这里某一项功能的展开——封装成帧展开成 3.2,差错检测展开成 3.3,流量控制与可靠传输展开成 3.4,而”怎么共享一条广播信道”是 3.5 的全部内容。

本节唯一难的地方在”不负责什么”:可靠传输到底是不是链路层的功能,教材的答案取决于链路是有线还是无线。

机制

三个基本问题,两种信道

数据链路层的主要任务是让帧在一段链路上或一个网络中传输。数据链路层协议有多种,但有三个基本问题是共同的:封装成帧、透明传输和差错检测。

数据链路层使用的信道主要有两种:

  1. 点对点信道,使用一对一的通信方式。PPP 是目前使用最广泛的点对点协议(3.7.2)。
  2. 广播信道,连接的主机很多,使用一对多的广播通信方式。采用共享广播信道的有线局域网普遍使用 CSMA/CD 协议,无线局域网则使用 CSMA/CA 协议(3.5.2)。

3.1.1 数据链路层所处的地位

以两台主机通过互联网通信为例:局域网 1 中的主机 H1 经过路由器 R1、广域网及路由器 R2,连接到局域网 2 中的主机 H2。H1 和 H2 都有完整的五层协议栈,而路由器在转发分组时仅使用协议栈的下三层。数据进入路由器后,要先从物理层上到网络层,在转发表中找到下一跳的地址后,再下到物理层转发出去。所以数据从 H1 送到 H2,要在路径中各节点的协议栈上下流动多次。

学习数据链路层时,通常只关心协议栈中水平方向的各数据链路层:

flowchart LR
    H1["H1<br/>链路层"] -- "局域网 1 的<br/>链路层协议" --> R1["R1<br/>链路层"]
    R1 -- "广域网的<br/>链路层协议" --> R2["R2<br/>链路层"]
    R2 -- "局域网 2 的<br/>链路层协议" --> H2["H2<br/>链路层"]
    classDef r fill:#dbeafe,stroke:#2563eb
    class R1,R2 r

即数据沿 H1 的链路层 → R1 的链路层 → R2 的链路层 → H2 的链路层传送,其中三段不同的数据链路可能采用不同的数据链路层协议。这是”链路层只管一跳”的直观图景:每一段链路各管各的,帧到了路由器就被拆开,换一种帧格式再发出去。

由此引出三个基本概念:

  • 链路:从一个节点到相邻节点的一段物理线路。两台计算机之间的通信路径往往要经过许多段这样的链路,链路只是一条路径的组成部分。
  • 数据链路:在一条链路上传送数据时,除了链路本身,还需要一些必要的通信协议来控制数据的传输。把实现这些协议的硬件和软件加到链路上,就构成了数据链路。有时也把链路称为物理链路,把数据链路称为逻辑链路。
  • 帧:数据链路层对等实体之间进行逻辑通信的协议数据单元。数据链路层把网络层下交的数据构成帧发送到链路上,并把接收到的帧中的数据取出上交给网络层。

3.1.2 链路管理

数据链路层连接的建立、维持和释放过程称为链路管理,它主要用于面向连接的服务。链路两端的节点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接;在传输过程中要能维持连接,传输完毕后要释放连接。PPP 的 LCP 链路建立就是链路管理的实例。

3.1.3 封装成帧与透明传输

封装成帧指在一段数据的前后分别添加首部和尾部,构成帧。帧是数据链路层的传送单元,帧长等于数据部分长度加上首部和尾部的长度。首部和尾部中含有很多控制信息,它们的一个重要作用是确定帧的界限,即帧定界——接收方要从收到的二进制比特流中区分出帧的开始与结束。例如 HDLC 协议用标识位 F(01111110)标识帧的开始和结束,检测到 F 即认为是帧的开始,再一次检测到 F 即表示帧的结束。

为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度;但帧长增加后,传输差错发生的概率随之提高,发生差错时重传的代价也越大。因此每种链路层协议都规定了帧的数据部分的长度上限,即最大传送单元(MTU)。 以太网的 MTU 是 1500 字节(3.6.2)。

“透明”是一个重要的计算机术语,表示某个实际存在的事物看起来却好像不存在一样。若数据中恰好出现与帧定界符相同的比特组合,接收方会误以为”传输结束”而丢弃后面的数据,就必须采取有效的措施解决这个问题。透明传输是指不论什么样的比特组合的数据,都能够按照原样无差错地在这个数据链路上传输。 对所传送的数据来说,它看不见数据链路层有什么妨碍数据传输的东西,也就是说,数据链路层对这些数据是透明的。实现方法见 3.2 组帧。

3.1.4 流量控制

链路两端节点的工作速率和缓存空间存在差异,发送方的发送能力可能大于接收方的接收能力。若此时不适当限制发送方的发送速率,前面来不及接收的帧就会被后面不断发送来的帧”淹没”,造成帧的丢失而出错。流量控制实际上就是限制发送方的发送速率,使之不超过接收方的接收能力。 这个过程需要某种反馈机制,使发送方知道什么情况下可以接着发送下一帧,什么情况下必须暂停发送,等待收到某种反馈信息后再继续发送。

在 OSI 体系结构中,数据链路层具有流量控制的功能;而在 TCP/IP 体系结构中,流量控制功能被移到了传输层。两者控制的对象不同:数据链路层控制的是相邻节点之间数据链路上的流量,传输层控制的则是从源端到目的端之间的流量。 具体机制见 3.4.1 与 第 5 章 TCP 流量控制。

3.1.5 差错检测

因为信道噪声等原因,帧在传输过程中可能出现错误,分为两类:

  • 位错:帧中某些位出现差错,通常采用循环冗余检验(CRC)来发现位错。
  • 帧错:帧丢失、帧重复或帧失序等错误,它们都属于传输差错。

对帧错如何处理,历史上有过变化。过去 OSI 的观点是:必须让数据链路层向上提供可靠传输,因此在 CRC 检错的基础上增加了帧编号、确认和重传机制——收到正确的帧就向发送方发送确认,发送方在一定期限内若未收到确认,就认为出现了差错而重传,直到收到确认为止。现在,在通信质量较差的无线传输中,数据链路层依然使用确认和重传机制,向上提供可靠的传输服务(802.11 的 ACK 见 CSMA/CA)。

对于通信质量良好的有线链路,数据链路层已不再使用确认和重传机制,即不要求向上提供可靠传输的服务,而仅需进行 CRC 检错,目的是将有差错的帧丢弃,保证上交的帧都是正确的;对出错的帧的重传任务则由高层协议(如传输层 TCP)完成。以太网和 PPP 都是这样,所以它们都提供不可靠服务。

边界

“数据链路层能提供可靠传输”是对的,“数据链路层一定提供可靠传输”是错的。 可靠传输是链路层可以具备的功能(无线链路至今在用),但有线链路已经把它交给了 TCP。题目问”下列哪项不属于数据链路层功能”时,可靠传输不能选。

错题复盘:为终端节点隐蔽物理传输细节是物理层的功能

王道 3.1.6 第 3 题:下列选项中,不属于数据链路层协议功能的是(A. 定义数据格式 B. 提供节点之间的可靠传输 C. 控制对物理传输介质的访问 D. 为终端节点隐蔽物理传输的细节)。答案 D。

数据链路层的主要功能包括组帧,组帧就是定义数据格式,A 正确;数据链路层在物理层提供的不可靠的物理连接上实现节点到节点的可靠性传输,B 正确;控制对物理传输介质的访问由数据链路层的介质访问控制(MAC)子层完成,C 正确。为终端节点隐蔽物理传输的细节是物理层的功能,数据链路层不必考虑如何实现无差别的比特传输,D 错误。

这道题的干扰项是 B。结合本节的边界,B 说的是链路层”能提供”的功能,所以不选;D 说的”隐蔽物理传输细节”听上去像链路层对网络层做的事,但教材把”屏蔽物理介质差异、提供无差别的比特传输”划给了物理层,见 第 2 章。

链路层的功能里没有”电路管理”和”拥塞控制”。 前者由物理层提供,后者是网络层或传输层的功能(王道 3.1.7 第 1、2 题)。链路管理 ≠ 电路管理:链路管理是链路层连接的建立、维持和释放;电路管理是物理层的事。

流量控制不是数据链路层独有的。 其他层也有相应的控制策略,只是各层的控制对象在相应层的实体之间(第 6 题)。数据链路层管相邻节点,传输层管端到端。

防止帧丢失靠”计时器超时重发”,防止重复帧靠”帧编号”。 海明码和 CRC 都是差错控制编码,管的是位错,不管帧丢失(第 4 题)。

信道可靠、实时性要求高时,用无确认的无连接服务。 线路上因噪声丢了帧,链路层既不检测也不回复,恢复任务交给高层;这对实时通信也非常合适,因为实时通信中数据迟到比数据损坏更不好(第 5 题)。

对照速查

功能归属本章展开
封装成帧、帧定界链路层3.2
透明传输链路层3.2
差错检测(位错)链路层3.3.1
可靠传输(帧错)链路层可选,有线链路交给 TCP3.4.2
流量控制(相邻节点)链路层3.4.1
介质访问控制链路层 MAC 子层3.5
链路管理链路层(面向连接时)PPP 的 LCP
电路管理、隐蔽物理传输细节物理层第 2 章
拥塞控制网络层或传输层第 4、5 章

考点

  • 三个基本问题:封装成帧、透明传输、差错检测
  • 链路 = 物理链路(相邻节点之间的线路);数据链路 = 逻辑链路(链路 + 协议软硬件)
  • 帧长 = 数据 + 首部 + 尾部;数据部分上限即 MTU
  • 流量控制:链路层管相邻节点,传输层管端到端;TCP/IP 中流量控制移到传输层
  • 有线链路不再提供可靠传输,只做 CRC 检错丢弃坏帧;无线链路仍用确认和重传
  • 不属于链路层:电路管理、拥塞控制、隐蔽物理传输细节

链接