摘要:本章围绕数据链路层展开,先说明它在物理层与网络层之间的定位——在相邻结点之间把比特流封装成有边界、可校验、可交付的帧;随后讲解封装成帧、透明传输与 CRC 差错检测三个基本问题,并介绍点对点协议 PPP 的特点与帧格式。接着进入广播信道,剖析 CSMA/CD 的载波监听、碰撞检测、争用期与最短帧长 64B 的推导,以及二进制指数退避算法和 MAC 帧格式;再讨论以太网的扩展方式,包括集线器、网桥与交换机自学习、VLAN 广播域隔离。最后对比停止等待、GBN、SR 三种可靠传输机制,并给出本章考点速查与小结。

3.1 数据链路层到底在做什么

数据链路层夹在物理层和网络层之间,它解决的问题很具体:在相邻的两个结点之间,把一段一段的比特流变成有边界、可校验、可交付的“帧”。

这里要先区分两个容易混淆的概念:

  • 链路:一条无源的点到点物理线路段,只负责传输信号。
  • 数据链路:链路加上实现通信协议的硬件和软件(典型就是网卡),它才具备“通信”能力。

数据链路层交付的协议数据单元叫帧(frame),而网络层的 PDU 是 IP 数据报(分组)。可以这样理解:网络层负责“从源主机到目的主机”的端到端传输,数据链路层只负责“从这一跳结点到下一跳结点”的相邻传输,逐跳接力,最终把分组送到终点。

数据链路层的工作可以归纳为三个基本步骤:

  1. 封装成帧:给数据加上首部和尾部,形成帧。
  2. 差错检测:用校验码判断传输过程中是否出错。
  3. 透明传输:保证无论数据里出现什么比特组合,都不会被误认为是帧的边界。

下面逐一展开。

下图梳理了本章的知识脉络,后续各节都围绕这条主线展开:

数据链路层

点对点信道

广播信道

封装成帧

透明传输

差错检测 CRC

PPP 协议

CSMA/CD

MAC 帧格式

以太网扩展

集线器

交换机

VLAN

可靠传输机制

停止等待

GBN

SR

3.2 三个基本问题:封装成帧、透明传输、差错检测

3.2.1 封装成帧

封装成帧就是在数据前后各加一段控制信息,形成帧的首部和尾部。首尾中最重要的部分是帧定界符,接收方靠它判断一个帧从哪里开始、到哪里结束。

帧的数据部分长度有上限,这个上限就是 MTU(Maximum Transmission Unit,最大传送单元)。MTU 不是随便定的,它受限于物理链路的特性和差错检测的效率——帧越长,一个比特出错导致整帧重传的代价就越大。

3.2.2 透明传输

“透明”的意思是:数据链路层对上层交下来的数据内容不做任何限制,看起来就像不存在这一层一样。

问题在于,如果数据部分恰好出现了和帧定界符相同的比特组合,接收方就会误判帧的边界。解决办法有两种:

  • 字节填充(字符填充):在数据中出现的特殊字符前插入转义字符 ESC。例如 PPP 协议中,数据里出现 0x7E 就变成 0x7D 0x5E,出现 0x7D 就变成 0x7D 0x5D。
  • 比特填充:发送方在数据中每遇到 5 个连续的 1,就自动插入一个 0;接收方每遇到 5 个连续的 1 后面跟一个 0,就把这个 0 删掉。HDLC 协议用的就是这种方法。

两种方法本质相同:都是通过“插入—删除”的约定,让数据中的任何比特组合都不会与定界符冲突。

3.2.3 差错检测:CRC 循环冗余检验

数据在传输中可能因为噪声发生比特翻转,数据链路层用 CRC(循环冗余检验) 来检测这类错误。

CRC 的核心是模 2 除法——一种不考虑进位和借位的二进制除法,本质上就是异或运算。

计算步骤:

  1. 设生成多项式 G(x)G(x)G(x) 共 nnn 位,则在待发送数据后面补 n−1n-1n−1 个 0;
  2. 用补 0 后的数据除以 G(x)G(x)G(x),做模 2 除法;
  3. 得到的余数(n−1n-1n−1 位)就是 FCS(帧检验序列),用它替换掉刚才补的 0;
  4. 接收方用同样的 G(x)G(x)G(x) 去除收到的数据,余数为 0 则认为无差错。

举个具体例子:数据为 101001,生成多项式 G(x)=x3+x2+1G(x) = x^3 + x^2 + 1G(x)=x3+x2+1,对应比特串 1101(4 位),所以补 3 个 0,得到 101001000,再对 1101 做模 2 除法,余数即为 FCS。

注意:CRC 只能检测差错,不能纠正差错。它能检测出所有单比特错误、双比特错误以及奇数个比特错误,但理论上仍存在漏检可能(只是概率极低)。要纠正错误,需要靠重传机制,这就引出了后面的可靠传输。

3.3 点对点协议 PPP

PPP 是目前使用最广泛的点对点数据链路层协议,拨号上网、宽带接入都曾大量使用它。

3.3.1 PPP 的特点

  • 简单:这是 PPP 设计的首要原则。它不提供序号,不提供确认,不保证可靠传输——可靠性交给上层 TCP 负责。
  • 封装多种协议:同一个 PPP 帧可以承载 IP、IPX 等多种网络层协议。
  • 支持多种链路类型:串行、并行、同步、异步、电信号或光信号都可以。
  • 有差错检测:用 FCS 检测错误,出错就丢弃,不纠错。
  • 可协商选项:通过 LCP 协商链路参数。

PPP 由三部分组成:封装方法、链路控制协议 LCP、网络控制协议 NCP。

3.3.2 PPP 帧格式

字段长度说明
标志 F1B0x7E,帧定界符
地址 A1B0xFF,实际上无意义
控制 C1B0x03
协议2B标识上层协议类型
信息可变不超过 1500B
FCS2BCRC 校验序列
标志 F1B0x7E,帧定界符

PPP 的透明传输采用字节填充:信息字段中出现 0x7E 就转义为 0x7D 0x5E;出现 0x7D 就转义为 0x7D 0x5D;ASCII 控制字符(小于 0x20 的字符)前加 0x7D 并异或 0x20。

PPP 帧的字段排布与字节填充规则可以用下图表示:

出现 0x7E

出现 0x7D

ASCII 控制字符

标志 F
0x7E

地址 A
0xFF

控制 C
0x03

协议
2B

信息字段
≤1500B

FCS
2B

标志 F
0x7E

转义为 0x7D 0x5E

转义为 0x7D 0x5D

前加 0x7D 并异或 0x20

3.4 广播信道与 CSMA/CD

局域网使用广播信道,多个站点共享同一传输介质,这就带来了一个核心问题:如何协调多个站点对共享信道的访问。以太网给出的答案是 CSMA/CD。

3.4.1 局域网拓扑的演变

  • 总线型:早期以太网,所有站点挂在同一条总线上,共享信道。
  • 环形:令牌环网,靠令牌控制发送权。
  • 星形:现在的主流形态,用集线器或交换机连接各站点。

3.4.2 CSMA/CD 协议

CSMA/CD 全称是载波监听多点接入/碰撞检测,三个要点:

  1. 多点接入:总线型网络,多个站点共享一条信道。
  2. 载波监听:发送前先监听信道,信道忙就等待。监听策略有 1-坚持、非坚持、p-坚持三种。
  3. 碰撞检测:边发送边监听,一旦检测到冲突立即停止发送,并发送人为干扰信号通知其他站点。

为什么会有冲突? 因为信号在介质上传播需要时间。站点 A 检测到信道空闲开始发送,但此时站点 B 的发送信号可能还在路上,B 也检测到"空闲"并开始发送,两者就在介质上撞车了。

争用期(碰撞窗口):从发送开始到信号传遍整个网络所需的时间是 2τ2\tau2τ(τ\tauτ 是单程传播时延)。在这段时间内都可能发生冲突,所以 2τ2\tau2τ 称为争用期。以太网规定争用期为 51.2 μs,对应 10 Mb/s 速率下发送 512 bit。

最短帧长:为了让发送方在发送完毕之前就能检测到冲突,帧必须足够长。最短帧长计算如下:

最短帧长=2τ×数据率=51.2 μs×10 Mb/s=512 bit=64 B最短帧长 = 2\tau \times 数据率 = 51.2\,\mu s \times 10\,Mb/s = 512\,bit = 64\,B最短帧长=2τ×数据率=51.2μs×10Mb/s=512bit=64B

  • 小于 64B 的帧被视为无效帧(碎片),直接丢弃。
  • 最大帧长为 1518B(MTU 1500 + 首部 14 + FCS 4)。

二进制指数退避算法:检测到冲突后,站点需要等待一段随机时间再重试。第 iii 次重传时,从 {0,1,…,2k−1}\{0, 1, \dots, 2^k - 1\}{0,1,…,2k−1} 中随机取一个数,其中 k=min⁡(i,10)k = \min(i, 10)k=min(i,10),退避时间 = 取到的数 × 2τ2\tau2τ。重传 16 次仍失败则放弃并报错。

把上面的要点串起来,CSMA/CD 的完整工作流程如下:

忙

空闲

否

否

是

是

否

是

准备发送

监听信道是否空闲

继续监听,等待空闲

开始发送帧,同时继续监听

检测到冲突?

发送完毕?

发送成功

立即停止发送,发送人为干扰信号

执行二进制指数退避,等待随机时间

重传次数超过 16?

放弃发送并向上层报错

3.4.3 MAC 帧格式

以太网 V2 的 MAC 帧格式:

字段长度
目的地址6B
源地址6B
类型2B
数据46–1500B
FCS4B
  • MAC 地址共 48 位,全球唯一,由 IEEE 分配。
  • 全 1 的 MAC 地址是广播地址。
  • 帧间最小间隔为 9.6 μs,给接收方留出处理时间。

3.4.4 高速以太网

标准速率介质特点
100BASE-T100 Mb/s双绞线快速以太网,仍用 CSMA/CD
1000BASE-T1 Gb/s双绞线千兆以太网
10GBASE10 Gb/s光纤/双绞线全双工,不再使用 CSMA/CD

关键变化在于:全双工模式下不存在冲突,因此 CSMA/CD 协议不再需要。这也是以太网从共享介质走向交换式网络的技术基础。

3.5 扩展的以太网

3.5.1 物理层扩展:集线器

用集线器(Hub)把多个网段连起来,本质上是把信号放大后转发到所有端口。这样做的问题很明显:

  • 所有端口仍属于同一个冲突域,冲突概率反而增加;
  • 总带宽不增加,多个站点竞争同一份带宽。

3.5.2 数据链路层扩展:网桥与交换机

交换机(本质是多端口网桥)工作在数据链路层,它的关键能力是:

  • 每个端口是独立的冲突域,可以同时转发多帧,总带宽成倍增加;
  • 自学习:收到帧时,把"源 MAC 地址—端口—时间"记录到转发表;转发时查目的 MAC 地址,查到就定向转发,查不到就泛洪到所有其他端口;
  • 转发表项有过期时间,长期不用的表项会被删除,以适应网络拓扑变化。

需要特别注意:交换机隔离冲突域,但不隔离广播域。广播帧仍会被转发到所有端口,广播风暴的风险依然存在。要隔离广播域,需要用到 VLAN。

交换机的自学习与转发过程可以概括为下面这张流程图:

有

是

否

无

收到一个帧

记录源 MAC 地址、入端口与时间到转发表

转发表中有目的 MAC 地址?

目的端口与入端口相同?

丢弃该帧,不再转发

定向转发到对应端口

泛洪到除入端口外的所有端口

表项超时后自动删除

3.5.3 虚拟局域网 VLAN

VLAN 用 802.1Q 标签(4 字节,其中包含 12 位 VLAN ID)把物理上的一个局域网划分为多个逻辑上的广播域。

VLAN 的主要优点:

  • 限制广播风暴:广播帧只在同一 VLAN 内传播;
  • 提高安全性:不同 VLAN 之间的通信必须经过路由器,便于控制;
  • 便于管理:按部门、功能划分 VLAN,不受物理位置限制。

3.6 可靠传输机制

前面说过,CRC 只能检错,不能纠错。要真正实现可靠传输,需要一套确认与重传机制。这一节是第 3 章的重点。

3.6.1 停止等待协议

最简单的可靠传输协议:发送方发一帧,然后停下来等确认;收到确认再发下一帧,超时未收到确认就重传。

它的信道利用率是:

U=TDTD+RTT+TAU = \frac{T_D}{T_D + RTT + T_A}U=TD​+RTT+TA​TD​​

其中 TDT_DTD​ 是数据帧的发送时延,RTTRTTRTT 是往返时间,TAT_ATA​ 是确认帧的发送时延。

可以看出,当 RTTRTTRTT 远大于 TDT_DTD​ 时(比如卫星链路),停止等待协议的信道利用率会非常低。这就是需要流水线传输的原因。

3.6.2 后退 N 帧(GBN)

GBN 允许发送方连续发送多个帧而不必等待确认,但接收方只能按序接收:

  • 发送窗口 W≤2n−1W \le 2^n - 1W≤2n−1(nnn 为序号位数);
  • 接收窗口为 1;
  • 一旦某帧出错,该帧及其之后的所有帧都要重传。

3.6.3 选择重传(SR)

SR 进一步优化:接收方可以缓存乱序到达的帧,发送方只重传出错的那一帧。

  • 发送窗口与接收窗口均 ≤2n−1\le 2^{n-1}≤2n−1;
  • 只重传出错帧,效率更高,但实现更复杂。

3.6.4 三种机制对比

机制发送窗口接收窗口重传范围
停止等待11当前帧
GBN2n−12^n - 12n−11出错帧及之后全部
SR2n−12^{n-1}2n−12n−12^{n-1}2n−1仅出错帧

窗口大小的限制不是随意规定的,而是为了保证序号不会产生歧义。以 GBN 为例,如果发送窗口超过 2n−12^n - 12n−1,接收方就无法区分一个新帧和一个重传的旧帧。

三种可靠传输机制在时间轴上的行为差异,可以用下面的示意图直观对比:

接收方发送方接收方发送方停止等待:发一帧等一个确认GBN:连续发送,出错帧及之后全部重传帧 2 丢失SR:只重传出错的那一帧缓存帧 3,等待帧 2帧 0ACK 0帧 1ACK 1帧 0、1、2、3ACK 0、ACK 1丢弃帧 3,重复 ACK 1重传帧 2、3帧 0、1、2、3ACK 0、ACK 1、ACK 3仅重传帧 2

3.7 本章考点速查

  1. CRC 手算:掌握模 2 除法,能根据生成多项式算出 FCS。
  2. 最短帧 64B 的推导:理解争用期 51.2 μs 与最短帧长的关系。
  3. CSMA/CD 工作流程:载波监听、碰撞检测、二进制指数退避。
  4. 交换机自学习过程:转发表的建立、转发与更新。
  5. VLAN 的作用与 802.1Q 标签:理解广播域隔离。
  6. GBN 与 SR 的差异:窗口大小、重传策略。
  7. 停止等待协议的信道利用率计算:能代入公式求解。

3.8 小结

数据链路层虽然只是“相邻结点之间”的一跳传输,但它把物理层原始的比特流变成了有结构、可校验的帧,是整个网络可靠通信的基础。

回顾本章的逻辑主线:

  • 封装成帧解决“数据边界”问题;
  • 透明传输解决“数据与定界符冲突”问题;
  • CRC 解决“差错检测”问题;
  • CSMA/CD 解决“共享信道争用”问题;
  • 交换机与 VLAN 解决"网络扩展与广播域隔离"问题;
  • 停止等待、GBN、SR 解决"可靠传输"问题。

每一个机制都对应一个具体的问题,理解了问题本身,机制的设计思路就自然清晰了。下一章将进入网络层,看 IP 协议如何在这些逐跳传输的基础上,实现端到端的寻址与路由。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐