Chapter 6-1:链路层、差错控制与多路访问协议

Chapter 6-1:链路层、差错控制与多路访问协议

引言:网络层决定下一跳,链路层完成这一跳

当一个 IP 数据报从源主机前往目的主机时,网络层负责判断它应当经过哪些网络、下一步应交给哪个节点。然而,仅仅知道“下一跳是谁”并不足以完成实际传输。数据还必须被封装成适合具体链路的格式,通过网卡、电缆、光纤或无线信道发送,并在共享介质中协调不同节点的发送行为。

这些工作属于链路层。

链路层关注的不是整个端到端路径,而是:

当前节点如何通过一条具体链路,把网络层数据报交给相邻节点。

它处理的数据单位是 帧(frame)。链路层将 IP 数据报封装进帧,在帧头中加入链路层地址和控制信息,再通过物理层转换为比特信号发送出去。

从整体协议栈看,各层承担的职责可以概括为:

层次 主要问题 数据单位
应用层 应用之间交换什么信息 message
传输层 进程之间如何通信 segment
网络层 分组如何跨网络到达目的主机 datagram / packet
链路层 数据报如何完成相邻节点间的一跳传输 frame
物理层 比特如何表现为电信号、光信号或无线电波 bits

❗ 链路层的核心不是决定完整路径,而是把网络层决定的“下一跳”真正发送出去。


❗ 本节核心结论:
网络层解决跨网络的路径与转发问题,链路层解决具体链路上的一跳交付问题,物理层负责比特信号的实际传播。


1. 链路层的一跳视角

一个 IP 数据报从源主机到目的主机,通常要经过多条性质不同的链路。例如:

1
2
3
4
5
6
7
8
9
笔记本电脑
│ Wi-Fi
无线路由器
│ 以太网或光纤
运营商路由器
│ 骨干链路
远端网络
│ 以太网
服务器

在这条路径上,同一个 IP 数据报可能先被封装进 IEEE 802.11 无线帧,随后被重新封装进以太网帧,再经过其他类型的链路协议。

因此,链路层不是一套从源主机一直保持到目的主机的统一协议。更准确地说:

  • 每一段链路可以使用不同的链路层协议。
  • 每经过一个路由器,原来的链路层帧通常会被拆除。
  • 路由器根据 IP 数据报确定下一跳。
  • 数据报随后被重新封装成适合下一段链路的新帧。

图中的帧 A、帧 B 和帧 C 可以采用不同格式,但它们内部承载的可能是同一个 IP 数据报。

❗ IP 数据报具有跨越多跳的意义,而链路层帧通常只在当前一跳上有效。


❗ 本节核心结论:
链路层协议具有逐跳性。数据报每经过一段新链路,都可能被封装进一种新的帧格式。


2. 链路层提供的主要服务

不同链路层协议提供的功能并不完全相同,但常见服务包括成帧、介质访问控制、差错处理、流量控制和局部可靠传输。

2.1 成帧:把数据报变成链路可以处理的单位

网络层交给链路层的是 IP 数据报。链路层会在数据报前后加入控制字段,形成帧。

帧中通常可能包含:

  • 源链路层地址;
  • 目的链路层地址;
  • 上层协议类型;
  • 数据载荷;
  • 差错检测字段;
  • 其他协议控制信息。

可以将这种关系理解为:

1
链路层帧 = 帧头 + IP 数据报 + 帧尾

成帧不仅是简单地“加一个外壳”,还要使接收方能够识别:

  • 一帧从哪里开始;
  • 一帧到哪里结束;
  • 这一帧交给哪个接口;
  • 帧中的数据属于哪种上层协议;
  • 帧在传输过程中是否发生错误。

2.2 链路接入:多个节点共享信道时谁可以发送

如果一条链路只连接两个节点,发送规则通常比较简单。但在广播链路中,多个节点可能共享同一个传输介质。如果多个节点同时发送,信号就可能互相干扰,产生冲突。

介质访问控制协议需要决定:

  • 节点在什么条件下可以发送;
  • 多个节点如何分配共享信道;
  • 发生冲突后如何恢复;
  • 如何在效率、公平性与复杂度之间折中。

2.3 差错检测与纠正

物理信号在传输过程中会受到噪声、衰减和干扰,可能导致某些比特发生翻转。因此,链路层通常会在原始数据之外加入冗余信息,用于检测或纠正错误。

2.4 相邻节点之间的流量控制

如果发送方发送帧的速度远高于接收方的处理速度,接收缓存可能溢出。某些链路层协议会通过流量控制协调相邻节点的发送速度。

2.5 局部可靠传输

部分链路层协议还会通过确认、超时和重传等机制,保证一帧在某一跳上可靠到达。

但这不是所有链路层协议的必备功能。是否提供局部可靠传输,通常取决于链路本身的差错率和协议设计目标。

服务 解决的问题
成帧 如何把数据报组织为链路层传输单位
MAC 接入 多个节点共享信道时谁可以发送
差错检测 如何发现传输中出现的比特错误
差错纠正 如何直接恢复部分错误
流量控制 如何避免接收方被发送方淹没
可靠传输 如何在当前一跳上恢复丢失或损坏的帧

❗ 本节核心结论:
链路层不仅负责“发送帧”,还要处理帧的边界、链路寻址、共享信道竞争、物理差错和相邻节点间的传输协调。


3. 帧为什么是一跳交付的基本单位

将帧称为“局域网的投递单位”是一种便于理解的说法,但更精确的表述是:

帧是链路层在一条具体链路上进行一跳传输的协议数据单位。

在常见以太网或 Wi-Fi 局域网中,设备之间的直接交付确实依赖帧,因此帧经常表现为局域网内部的投递单位。

假设主机 A 的地址为:

1
IP 地址:192.168.1.10

主机 B 的地址为:

1
IP 地址:192.168.1.20

如果二者属于同一 IP 子网,A 可以直接把帧发送给 B:

1
2
IP 数据报的目的 IP:192.168.1.20
帧的目的 MAC:主机 B 的 MAC 地址

如果 A 要访问远端服务器,例如:

1
2
目的 IP:8.8.8.8
默认网关:192.168.1.1

A 不会试图在本地链路上寻找远端服务器的 MAC 地址,而是将帧交给默认网关:

1
2
IP 数据报的目的 IP:8.8.8.8
帧的目的 MAC:默认网关接口的 MAC 地址

这里有一个非常关键的区别:

  • IP 目的地址仍然表示最终要到达的主机。
  • MAC 目的地址表示当前这一跳要交给的网络接口。

因此,在跨网络通信中,IP 地址通常在转发过程中保持其端到端含义,而源、目的 MAC 地址会在每一跳重新设置。

❗ IP 地址回答“最终去哪里”,MAC 地址回答“这一跳交给谁”。


❗ 本节核心结论:
帧只承担当前链路上的交付任务。跨网络发送时,目的 IP 指向最终主机,而目的 MAC 指向当前下一跳。


4. MAC 地址与 MAC 协议不是同一个概念

MAC 是 Media Access ControlMedium Access Control 的缩写,通常译为介质访问控制。

“MAC 地址”和“MAC 协议”都与链路层有关,但二者承担不同功能。

概念 本质 解决的问题
MAC 地址 链路层地址 当前一跳应交给哪个网络接口
MAC 协议 介质访问规则 多个节点共享信道时谁可以发送

4.1 MAC 地址

MAC 地址主要用于标识链路层接口。以太网帧中通常包含:

  • 源 MAC 地址;
  • 目的 MAC 地址。

交换机可以根据目的 MAC 地址决定帧应从哪个端口转发。

MAC 地址不负责规划整个互联网中的端到端路径,也不等同于 IP 地址。它主要服务于当前链路或广播域中的帧交付。

4.2 MAC 协议

MAC 协议规定节点如何使用共享介质。例如:

  • 是否要先监听信道;
  • 是否只能在固定时隙发送;
  • 发生冲突后等待多久;
  • 是否通过令牌或主节点分配发送权。

ALOHA、CSMA、CSMA/CD、CSMA/CA、TDMA 和轮询等,都可以放在多路访问控制机制的范畴中理解。

一个简单类比是:

1
2
MAC 地址:教室里每个人的身份或座位
MAC 协议:教室里谁可以在什么时候发言

❗ MAC 地址是寻址信息,MAC 协议是共享介质的使用规则。


❗ 本节核心结论:
MAC 地址与 MAC 协议共享同一个术语背景,但前者解决“交给谁”,后者解决“谁现在能发送”。


5. 子网、局域网与链路范围

“链路层负责同一子网内部的传输”和“链路层负责局域网内部的传输”都常用于入门解释,但二者都不是最严格的定义。

最准确的说法是:

链路层负责一条具体链路上相邻节点之间的一跳交付。

5.1 子网是网络层视角

IP 子网主要根据网络前缀划分。判断两个 IP 地址是否属于同一子网,需要结合子网掩码或前缀长度。

同一子网中的主机通常可以在不经过 IP 路由转发的情况下直接通信。发送方会通过链路层找到目的接口,并直接发送帧。

5.2 局域网是部署和链路技术视角

局域网强调的是:

  • 较小的地理范围;
  • 以太网、Wi-Fi、交换机等局部网络技术;
  • 组织内部或家庭内部的连接环境。

但局域网与 IP 子网并不必然一一对应。

例如:

  • 一个交换网络可以通过 VLAN 划分为多个广播域;
  • 不同 VLAN 通常配置不同 IP 子网;
  • 一个组织所称的“局域网”可能包含多个子网;
  • 同一物理基础设施也可能承载多个逻辑网络。
概念 主要视角 典型判断依据
链路 相邻节点之间的连接 是否能在当前链路上传输帧
广播域 二层广播传播范围 广播帧能传播到哪些接口
IP 子网 网络层地址范围 IP 前缀与子网掩码
局域网 地理与部署范围 组织结构、接入技术和网络规模

因此,“同一子网内部”比“同一局域网内部”更接近 IP 转发时的判断过程,但仍不能取代链路层的根本定义。

❗ 链路层最本质的边界是当前链路和相邻节点,而不是“局域网”这一宽泛的部署概念。


❗ 本节核心结论:
子网属于网络层地址划分,局域网属于部署与链路技术描述。链路层真正关注的是当前链路上的相邻节点交付。


6. 链路层为什么需要软硬件协同

链路层并不是完全由操作系统软件实现的,也不是完全由网卡硬件独立完成的。它通常分布在:

  • 操作系统网络协议栈;
  • 网卡驱动程序;
  • 网卡或网络适配器;
  • 交换机和路由器接口芯片;
  • DMA、缓冲区和中断机制。

6.1 软件侧的典型职责

操作系统和驱动程序通常负责:

  • 接收网络层提交的数据报;
  • 管理发送队列和接收队列;
  • 配置网卡地址、速率和工作模式;
  • 建立描述符和 DMA 缓冲区;
  • 处理中断或轮询事件;
  • 将收到的数据交给正确的上层协议;
  • 配合 ARP、IP、TCP 和 UDP 等协议工作。

6.2 硬件侧的典型职责

网卡硬件通常负责高速、实时的操作,例如:

  • 把帧转换为物理信号;
  • 从物理信号恢复比特;
  • 识别帧边界;
  • 过滤目的 MAC 地址;
  • 计算或验证 CRC/FCS;
  • 执行部分介质访问逻辑;
  • 将帧通过 DMA 写入主存;
  • 执行校验和或分段卸载等优化。

6.3 为什么不能全部交给软件

在高速网络中,帧到达间隔可能非常短。如果 CPU 必须逐比特处理信号、识别帧边界并计算所有校验值,就会产生巨大的处理开销。

因此,链路层通常遵循一种分工原则:

  • 高频、固定、对时序要求严格的工作交给硬件;
  • 配置、策略、资源管理和复杂协议处理交给软件。

❗ 链路层是典型的软硬件协同层:软件负责管理和协议衔接,硬件负责高速帧处理与信号收发。


❗ 本节核心结论:
链路层既靠软件组织数据和管理设备,也靠硬件满足高速、实时的发送、接收和校验需求。


7. 链路层可靠传输与 TCP 可靠传输

链路层可靠传输与 TCP 可靠传输并不冲突,因为它们作用于不同范围,提供不同层次的保证。

对比项 链路层可靠传输 TCP 可靠传输
作用范围 相邻节点之间的一跳 端系统之间的端到端通信
主要单位 frame 字节流与 segment
主要问题 当前链路上的帧损坏或丢失 整条路径上的丢失、乱序和重复
恢复位置 当前链路本地恢复 由通信端点恢复
典型用途 高误码率无线链路 端到端可靠字节流

假设通信路径为:

1
客户端 --Wi-Fi--> 路由器 --运营商网络--> 服务器

如果 Wi-Fi 这一跳出现错误,有两种恢复方式。

7.1 仅依赖 TCP

  1. 无线帧损坏,路由器未收到有效数据。
  2. TCP 最终发现某个数据段没有成功到达。
  3. 发送端从端到端重新发送数据。
  4. 重传数据再次经过整条网络路径。

这种方式可以保证最终可靠性,但恢复距离较长,反馈时间也可能较大。

7.2 链路层进行局部重传

  1. 无线接收方发现帧损坏或未收到帧。
  2. 当前无线链路直接触发重传。
  3. 帧只在客户端与路由器之间重新发送。
  4. 成功后,数据继续沿后续路径传输。

局部重传可以更快地修复无线链路上的偶发错误,减少端到端重传。

但链路层可靠传输不能取代 TCP,因为它只负责单跳,无法处理:

  • 后续链路上的丢失;
  • 路由器队列溢出;
  • 网络拥塞;
  • 路径变化;
  • 端到端乱序;
  • 重复数据;
  • 进程级可靠交付。

二者的关系可以概括为:

1
2
链路层可靠传输:局部修复
TCP 可靠传输:全局兜底

在误码率很低的有线链路上,逐跳确认和重传可能得不偿失;在无线链路上,局部恢复通常更有价值。

❗ 链路层可靠性优化某一跳的传输效率,TCP 可靠性保证整个端到端通信的最终语义。


❗ 本节核心结论:
逐跳可靠传输和端到端可靠传输不是重复设计,而是局部优化与全局保证之间的分层协作。


8. 差错检测与差错纠正

链路层直接面对真实物理介质,因此必须考虑比特错误。

基本模型可以表示为:

1
2
发送方:数据 D + 冗余检测信息 EDC
接收方:收到 D' + EDC',执行检查

EDC 是 Error-Detection and-Correction bits,即用于差错检测或纠正的冗余比特。

冗余信息越充分,通常越有能力发现复杂错误,但也会消耗更多传输空间和计算资源。

8.1 差错检测不等于绝对正确

任何有限的差错检测字段都存在漏检可能。因此,校验通过只能表示:

接收方没有根据当前校验机制发现错误。

它不能在逻辑上证明数据绝对没有发生变化。

8.2 奇偶校验

单比特偶校验会添加一个校验位,使整个比特串中 1 的数量为偶数。

例如原始数据中有奇数个 1,发送方就把校验位置为 1;如果已有偶数个 1,校验位置为 0

它可以检测奇数个比特翻转,尤其可以检测单比特错误。但如果两个比特同时翻转,1 的奇偶性可能保持不变,因此错误可能被漏检。

二维奇偶校验将数据排列成矩阵,同时对每一行和每一列添加校验。若单个比特翻转,可以通过异常行与异常列的交点定位错误位置。

8.3 Internet checksum

Internet checksum 通常把数据划分为固定长度的整数,执行反码加法,再对结果取反。

接收方重新计算并比较校验结果。如果结果不一致,可以确定数据发生错误;如果一致,只能说明没有检测出错误。

8.4 CRC

CRC 是循环冗余校验,广泛用于链路层帧的差错检测。它把比特串视为多项式,通过模 2 除法计算余数,并把余数作为冗余字段附加到数据后。

接收方使用同一个生成多项式进行检查。如果不能整除,则判定帧发生错误。

方法 主要能力 局限
单比特奇偶校验 检测单比特及其他奇数个错误 容易漏检偶数个错误
二维奇偶校验 可定位并纠正单比特错误 冗余和结构更复杂
Internet checksum 计算简单,适合软件实现 检测能力相对有限
CRC 对常见突发错误具有较强检测能力 实现和理解相对复杂

❗ 差错检测的目标是把错误概率降到足够低,而不是提供数学意义上的绝对无错证明。


❗ 本节核心结论:
链路层通过增加冗余信息识别物理传输错误。奇偶校验、checksum 和 CRC 在开销与检测能力之间采取了不同折中。


9. 为什么广播链路需要多路访问协议

链路可以分为两类。

9.1 点对点链路

点对点链路主要连接两个节点。由于不存在大量节点同时竞争同一介质,访问控制通常比较简单。

9.2 广播链路

广播链路由多个节点共享。一个节点发送的信号可能被多个节点接收到。

如果两个或多个节点同时发送,信号就可能叠加,造成接收失败,这种现象称为 冲突(collision)

多路访问协议需要回答:

在共享信道上,每个节点什么时候可以发送?

理想的多路访问协议希望同时满足:

  • 只有一个节点发送时,它能使用完整速率 R
  • M 个活跃节点时,每个节点平均获得 R/M
  • 不依赖容易失效的中心协调节点;
  • 不要求复杂的全局同步;
  • 实现简单,控制开销低。

现实协议通常不能同时完美满足这些目标,因此形成了三类基本方案:

  1. 信道划分;
  2. 随机访问;
  3. 依次轮流。

❗ 本节核心结论:
多路访问协议的根本任务,是协调多个节点对共享信道的竞争,在利用率、公平性和控制成本之间取得平衡。


10. 信道划分协议

信道划分协议会预先把共享资源切分后分配给不同节点。

10.1 TDMA

TDMA 按时间划分信道。一个周期被切分为多个时隙,每个节点拥有固定时隙。

优点是:

  • 不会发生发送冲突;
  • 高负载时分配稳定;
  • 节点之间较为公平。

缺点是:

  • 节点没有数据时,其时隙仍可能空置;
  • 只有一个节点活跃时,也不能长期使用完整信道;
  • 需要维护时隙边界。

10.2 FDMA

FDMA 按频率划分信道。不同节点使用不同频段,可以同时发送。

它同样避免了直接冲突,但某节点没有数据时,其频段可能处于闲置状态。

10.3 CDMA

CDMA 允许不同节点在相同时间和频率范围内发送,但为每个节点分配不同编码。接收方利用编码特征区分不同发送者。

CDMA 提高了共享能力,但需要更复杂的编码、同步和信号处理机制。

协议 划分维度 优点 主要问题
TDMA 时间 规则简单、公平、无冲突 空闲时隙浪费
FDMA 频率 可并行发送、无直接冲突 空闲频段浪费
CDMA 编码 可同时同频传输 实现复杂

❗ 信道划分适合持续高负载,但在节点活跃程度不均匀时容易浪费预留资源。


❗ 本节核心结论:
信道划分通过提前分配资源消除竞争,代价是资源不能始终根据实时需求灵活流动。


11. 随机访问协议:从 ALOHA 到 CSMA/CD

随机访问协议不提前为节点固定分配信道。节点有数据时自行尝试发送,发生冲突后再通过随机化机制恢复。

ALOHA、CSMA 和 CSMA/CD 都属于链路层的随机访问 MAC 协议。

11.1 纯 ALOHA

纯 ALOHA 的基本规则是:

  • 节点有帧时立即发送;
  • 如果发送失败,随机等待后重传。

它不需要时隙同步,规则非常简单。但节点可以在任意时间开始发送,因此一帧发送期间,前后较大的时间范围内都可能受到其他帧干扰。

其最大信道利用率约为:

1
1 / (2e) ≈ 18%

11.2 时隙 ALOHA

时隙 ALOHA 将时间划分为等长时隙,每个时隙刚好可以发送一帧。

节点只能在时隙开始处发送,因此帧不会出现任意程度的部分重叠。一个时隙只有三种结果:

  • 没有节点发送:空闲;
  • 恰好一个节点发送:成功;
  • 两个或更多节点发送:冲突。

发生冲突后,节点不会在下一时隙必然重发,而是以概率 p 决定是否重传。

例如:

1
p = 0.3

表示一个等待重传的节点在每个新时隙中:

  • 有 30% 的概率尝试发送;
  • 有 70% 的概率继续等待。

这样做是为了避免所有冲突节点在下一时隙再次同时发送。

11.3 时隙 ALOHA 利用率的推导

假设:

  • 共有 N 个节点;
  • 每个节点在一个时隙中发送的概率为 p
  • 各节点的选择相互独立。

指定节点成功发送,需要:

  1. 该节点发送,概率为 p
  2. 其他 N-1 个节点都不发送,概率为 (1-p)^(N-1)

所以指定节点成功的概率为:

1
p(1-p)^(N-1)

任意一个节点成功即可,因此整个时隙成功传输的概率为:

1
S = Np(1-p)^(N-1)

p 太小时,大量时隙无人发送;当 p 太大时,大量时隙发生冲突。

最大值在:

1
p = 1/N

附近取得。当 N 很大时:

1
S_max → 1/e ≈ 0.37

这意味着,即使参数最优,长期来看也只有约 37% 的时隙真正成功传输帧,其余时隙为空闲或冲突。

11.4 什么是时钟同步

时钟同步不是要求所有设备的绝对时间完全相同,而是要求所有节点对时隙边界有一致认识。

例如,所有节点都必须知道:

1
2
3
时隙1:0 ms 到 1 ms
时隙2:1 ms 到 2 ms
时隙3:2 ms 到 3 ms

如果节点 A 和节点 B 对时隙起点理解不同,它们可能在不同时间开始发送,使帧部分重叠,破坏时隙 ALOHA 的基本假设。

11.5 CSMA

CSMA 是 Carrier Sense Multiple Access,即载波侦听多路访问。

它比 ALOHA 增加了一条规则:

发送前先监听信道。

  • 信道空闲:开始发送;
  • 信道忙:暂缓发送。

这种方法类似于讲话前先判断是否有人正在讲话。

但 CSMA 不能彻底消除冲突,因为信号传播需要时间。

假设节点 A 已经开始发送,但其信号还没有传播到远端节点 B。此时 B 监听到的本地信道仍然空闲,于是也开始发送。两个信号随后在链路上相遇,形成冲突。

因此:

先听再发只能降低冲突概率,不能保证绝不冲突。

11.6 CSMA/CD

CSMA/CD 在 CSMA 基础上增加了 Collision Detection,即冲突检测。

其基本流程是:

  1. 发送前监听信道;
  2. 信道空闲时开始发送;
  3. 发送过程中继续检测冲突;
  4. 发现冲突后立即停止;
  5. 发送阻塞信号;
  6. 随机退避后再次尝试。

CSMA/CD 不是为了保证冲突永远不发生,而是为了:

  • 发送前尽量避免冲突;
  • 发生冲突后尽快停止浪费;
  • 通过随机退避降低再次冲突的概率。

11.7 二进制指数退避

如果所有冲突节点都立即重新发送,它们很可能再次碰撞。因此,节点在第 m 次冲突后,从一个不断扩大的范围中随机选择等待时间。

简化表示为:

1
2
K ∈ {0, 1, ..., 2^m - 1}
等待时间 = K × 基本时隙

冲突次数越多,说明当前竞争越激烈,因此等待范围应当越大。

这种设计具有自适应性:

  • 负载较低时,等待时间通常较短;
  • 负载较高时,退避范围扩大,减少反复碰撞。
协议 发送前监听 发送中检测冲突 是否需要时隙同步
纯 ALOHA
时隙 ALOHA
CSMA 通常不需要统一时隙
CSMA/CD 通常不需要统一时隙

❗ 随机访问协议的演进方向,是逐步利用更多信道状态信息,减少冲突发生率及冲突造成的浪费。


❗ 本节核心结论:
ALOHA 依赖随机重传,CSMA 增加发送前监听,CSMA/CD 又增加发送中冲突检测。它们都不能完全消除竞争,只是在不同阶段降低竞争代价。


12. 依次轮流协议

依次轮流协议试图结合信道划分和随机访问的优点:

  • 避免高负载下的大量冲突;
  • 不为每个节点永久预留固定资源;
  • 让节点按照某种顺序获得发送权。

12.1 轮询

轮询系统中存在一个主节点。主节点依次询问各从节点是否需要发送。

优点是:

  • 不会发生普通的随机竞争冲突;
  • 可以集中管理发送顺序;
  • 高负载下较为稳定。

缺点是:

  • 轮询消息本身占用信道;
  • 节点必须等待被询问;
  • 主节点可能成为性能瓶颈;
  • 主节点失效可能导致整个访问机制失效。

12.2 令牌传递

令牌传递系统中,一个特殊控制帧在节点之间循环。只有获得令牌的节点才能发送。

优点是:

  • 节点获得发送机会的顺序明确;
  • 高负载时不会因随机竞争产生大量冲突;
  • 可以提供较好的公平性。

缺点是:

  • 令牌传递本身产生开销;
  • 节点要等待令牌到来;
  • 令牌丢失后需要恢复机制;
  • 节点或链路故障可能破坏令牌循环。
类型 核心思想 优势 主要代价
信道划分 提前分配固定资源 高负载稳定 低负载浪费
随机访问 有数据就竞争 低负载灵活 高负载冲突严重
依次轮流 按顺序获得发送权 公平、冲突少 控制开销和故障处理

❗ 不同 MAC 协议不存在脱离场景的绝对优劣,其差异来自对负载、同步、控制开销和故障风险的不同取舍。


❗ 本节核心结论:
轮询和令牌传递通过显式分配发送权减少冲突,但需要额外控制机制,并可能面临单点故障或令牌恢复问题。


13. 一次完整的一跳传输过程

将前面的概念组合起来,链路层一次典型发送过程如下。

13.1 发送端

  1. 网络层确定下一跳。
  2. 网络层把 IP 数据报交给链路层。
  3. 发送端获得下一跳的链路层地址。
  4. 链路层创建帧并填写源、目的 MAC 地址。
  5. 链路层加入差错检测字段。
  6. 如果使用共享介质,MAC 协议判断何时发送。
  7. 网卡将帧转换为比特和物理信号。
  8. 信号进入电缆、光纤或无线信道。

13.2 接收端

  1. 网卡从物理信号中恢复比特。
  2. 识别帧的开始和结束。
  3. 检查目的 MAC 地址。
  4. 验证 CRC 或其他差错检测字段。
  5. 如果帧无效,根据协议丢弃、纠错或触发重传。
  6. 如果帧有效,移除链路层头部和尾部。
  7. 将内部 IP 数据报交给网络层。

❗ 本节核心结论:
一次链路层传输贯穿网络层决策、软件驱动管理、网卡硬件处理、物理信号传播以及接收端校验与解封装。


14. 常见理解误区

14.1 链路层负责从源主机直接送到目的主机

错误。链路层只负责当前链路上的一跳。端到端路径由多次逐跳交付组成。

14.2 MAC 地址就是设备在互联网中的最终地址

错误。MAC 地址主要用于当前链路上的帧交付,不能代替 IP 地址进行跨网络路由。

14.3 同一局域网一定等于同一 IP 子网

错误。一个组织所称的局域网可以包含多个 VLAN 和多个 IP 子网。

14.4 TCP 可靠传输使链路层可靠传输没有必要

错误。TCP 负责端到端兜底,链路层可靠传输可以对高误码率链路进行更快的局部修复。

14.5 校验通过说明数据绝对没有错误

错误。校验机制可能漏检,只能说明当前方法没有发现错误。

14.6 CSMA 发送前监听,因此不会发生冲突

错误。由于传播延迟,两个节点仍可能在不知道对方已经发送的情况下同时开始发送。

14.7 CSMA/CD 的作用是完全避免冲突

错误。它的主要价值是检测冲突并及时停止发送,从而减少冲突造成的资源浪费。

14.8 时隙 ALOHA 中的概率 p 是帧出错概率

错误。p 表示节点在某个时隙中尝试发送或重传的概率,用于随机分散竞争节点的发送时间。


结论

链路层是网络协议栈中最接近实际传输介质的协议层之一。网络层决定数据报的下一跳,而链路层负责把这一决定落实为一次真实的一跳传输。

这一过程涉及多个相互联系的机制:

  • 帧为一跳传输提供结构化封装;
  • MAC 地址标识当前链路上的源和目的接口;
  • MAC 协议协调多个节点对共享介质的使用;
  • 差错检测和纠正处理物理信号的不可靠性;
  • 局部可靠传输减少高误码链路对端到端通信的影响;
  • 网卡硬件、驱动程序和操作系统协议栈共同完成高速帧处理。

在多路访问机制中,信道划分、随机访问和依次轮流分别代表三种基本设计思路。TDMA、FDMA 和 CDMA通过预分配资源避免冲突;ALOHA、CSMA 和 CSMA/CD通过竞争与恢复提高低负载下的灵活性;轮询和令牌传递则通过显式分配发送权兼顾公平性与高负载稳定性。

❗ 最终核心结论:链路层解决的是相邻节点之间如何完成一次可靠、高效且可协调的一跳传输。帧是这一跳的承载单位,MAC 地址决定这一跳交给谁,MAC 协议决定共享信道中谁可以发送。