链路层负责通过链路将数据报从一个节点传输到物理上相邻的节点。
介质访问控制
介质访问控制(MAC,Media Access Control)可以分为以下3种类型:
- 信道划分:将信道划分为更小的“部分”(时隙、频率、代码)分配给节点专用。
- 随机访问:信道未划分,允许发生冲突,需要能从碰撞中“恢复”。
- 轮流使用:节点轮流进行传输,但会导致节点可能需要更长的等待时间。
信道划分
频分多路复用(FDM):将可用带宽划分为若干个不重叠的 频段,每个信号占用一个频段。各个信号可以同时传输,但彼此之间不会干扰,因为它们占用不同的频率。
时分多路复用(TDM):将时间划分成若干个 时隙,每个信号在不同的时隙中传输。所有信号在时间上轮流使用同一传输介质。
ALOHA协议
ALOHA协议是一种早期开发的 随机访问协议,用于在共享信道上传输数据。可分为纯 ALOHA 和时隙 ALOHA。
纯 ALOHA (Pure ALOHA)是一种简单、无同步机制的协议。允许用户在 任意时刻 发送数据包,而无需对时间进行任何同步或分时。
也就是说,若数据包的接收需要 $1$ 个单位时间,则在 $t_0$ 时刻发送的数据包会与 $[t_0-1,t_0+1]$ 时间段内发送的冲突。
纯 ALOHA 的效率只有 18%。
时隙 ALOHA(Slotted ALOHA)在纯 ALOHA 的基础上引入了时间同步,将时间划分为一系列等长的时隙。用户只能在时隙的开始发送数据包。
如果多个用户在同一时隙发送数据包,发生了冲突,相关用户等待随机时间后重传。

时隙ALOHA的优势:
- 单个数据包可以以信道的全速率连续传输。
- 高度去中心化:只有节点中的插槽需要同步。
- 简单易实现。
缺点:
- 空闲时隙的数量较多。
- 需要时钟同步。
CSMA协议
CSMA(Carrier Sense Multiple Access)含义为载波监听多路访问,它包含两个方面的内容:
- 载波监听(Carrier Sense):在发送数据前,必须确定当前通信介质中没有其他设备正在发送数据。载波监听就是监听信道当在前位置是否可以传输数据。
- 多路访问(Multiple Access):多个设备可以访问同一个通信介质,意味着在任何给定时间,任何设备都可以尝试发送数据。
简单的CSMA协议,只实现传输前先监听:
- 如果信道检测到空闲:传输整个数据帧。
- 如果通道检测到繁忙:延迟传输。
备注这意味着:即使开启载波监听,仍可能发生碰撞。因为传播延迟的存在意味着两个节点可能无法听到彼此刚刚开始的传输信息。如果发生碰撞,整个数据包传输的时间将被浪费。
距离和传播延迟的大小决定了碰撞的频率。

CSMA/CD协议
CSMA/CD比CSMA多出一个CD(Collision Detection,碰撞检测)的功能。

以太网中,CSMA/CD的工作流程如下:
- 准备发送:适配器从网络层获得一个分组,封装成帧,放入网络适配器缓存准备发送。
- 检测信道:监听信道是否空闲,若信道空闲,则开始发送该帧;若信道忙,则持续检测直至信道空闲。
- 发送过程中,适配器仍然持续检测信道。这里只有如下两种可能:
- 发送成功:在争用期内一直未检测到冲突,该帧肯定能发送成功。
- 发送失败:在争用期内检测到冲突,此时立即停止发送,并且广播碰撞通知信号。接着适配器执行 指数退避算法,等待一段随机时间后返回到步骤 2。若重传 16 次仍不能成功,则停止重传并向上报错。
指数退避算法通过动态调整等待时间,减少连续冲突的概率,提高网络效率。它的核心思想是当冲突发生时,设备随机选择一个等待时间,并在每次冲突后成倍增加等待时间范围,以降低后续冲突的可能性。
如果是第 $k$ 次重传,则节点会从
$$[0, 2^k-1]$$的范围内随机选择等待时间槽的个数,每个时间槽的长度为一个基本单位(在 $10 \text{BaseT}$ 以太网中为 51.2 微妙),之后网络适配器将等待 $k$ 倍的基本单位时间再尝试重传。
当 $n \geqslant 10$ 或更大时,退避范围的上限固定为 1023(即 $2^{10}-1$ )。
备注在随机选择的前提下,两个发生冲突的站点再次选择同一个延迟时间的概率极低。利用指数级扩大的随机窗口,确保总有一个站点能抢先占据信道。同时在高负载时自动降低发送频率,避免网络瘫痪。
CSMA/CD在早期以太网类型的LAN(局域网)中被广泛应用。随着交换机技术的发展,目前已很少被使用。
CSMA/CA协议
在无线局域网中,不能使用 CSMA/CD 协议,因为:
- 无线设备不能同时“听”和“说”:无线收发器在发送数据时,无法同时监听信道来判断是否发生碰撞。
- 信道干扰和损失:无线信号受环境干扰更大,误判空闲或碰撞的概率更高,信号极易损失。
- 碰撞检测复杂:存在“隐藏节点”现象。
隐藏节点现象:
假设 $A$ 和 $C$ 两台无线设备都想给 $B$ 发送数据,但 $A$ 和 $C$ 彼此“看不到”,只看到 $B$ 是空闲的。结果就是 $A$ 和 $C$ 同时给 $B$ 发送,发生碰撞,但它们却以为没事。
为此,无线局域网使用 CSMA/CA 协议,它对 CSMA/CD 协议进行修改,将冲突检测改为冲突避免(Collision Avoidance,CA)。
“冲突避免” 并不是指协议可以完全避免冲突,而是指协议的设计要尽量降低冲突发生的概率。
CSMA/CA 的流程如下:
- 侦听信道(Carrier Sense):设备在发送数据前侦听,判断信道是否空闲。若信道忙碌,设备进入随机退避机制,等待随机时间后再次侦听,以降低碰撞风险。

- 发送请求(RTS,Request to Send):若信道空闲超过特定时间($\text{DIFS}$,分布式帧间间隔),发送方可发送
RTS帧,通知其他设备其传输意图及所需时间。 - 清除发送请求(CTS,Clear to Send):接收方在确认信道空闲后(等待 $\text{SIFS}$,短帧间间隔),回复
CTS帧,确认传输许可并通知附近设备保持沉默。
CTS帧增强了信道保护,有助于减少隐藏节点问题。
- 数据传输:发送设备收到
CTS帧后,等待 $\text{SIFS}$,开始传输数据帧。其他设备通过 NAV 设置避免干扰,确保信道专用于当前传输。 - 确认帧(ACK,Acknowledgment):接收设备成功接收数据后,等待 $\text{SIFS}$,发送
ACK帧确认。若发送端未收到ACK(可能因碰撞或干扰),启动重传机制,重新执行上述步骤。

局域网
MAC地址
MAC地址,也称LAN地址、物理地址或以太网地址,用于在本地将帧从一个接口传输到另一个物理连接的接口(即 IP 寻址意义上的同一子网)。
它是一个48位的地址(适用于大多数局域网),一般直接刻录在网络适配器中,有时也可通过软件设置。例如 1A-2F-BB-76-09-AD。

在一个局域网中,每个设备既有48位的MAC地址,也有32位的IP地址。
MAC 地址可以在不同的局域网中使用。IP地址则要受到网络的约束,并且不同的网络中不能有相同的公网IP地址。
ARP协议
ARP(Address Resolution Protocol,地址解析协议) 是一种在 TCP/IP 网络 中使用的协议,用于将 IP 地址转换为物理硬件地址(例如 MAC 地址)。
ARP 的主要目的是确定要通过网络传输数据的目标设备的物理硬件地址,以便将数据帧正确地传送到目标设备。
在计算机中存储一个ARP表,包含以下条目:
- IP地址和MAC地址的映射关系。
- TTL:地址映射的缓存时间。
ARP 请求构建了 IP地址 与 MAC地址的映射关系,它主要包括以下步骤:
- 广播 ARP 请求:当一台设备(主机 $A$)需要发送数据包到同一局域网内的另一台设备(主机 $B$),但它只知道目标设备的 IP 地址时,它会在本地网络上广播一个 ARP 请求。
该 ARP 请求的目的 MAC 地址 为
ff-ff-ff-ff-ff-ff-ff-ff,源 MAC 地址为自己的 MAC 地址。每一台设备都会收到这个请求,但只有 IP 地址匹配请求中 IP 地址的设备会回应这个请求。
-
ARP 响应:当主机 $B$ 收到这个 ARP 请求 后,它会识别出请求中的 IP 地址与自己的 IP 地址 相匹配,然后向主机 $A$ 发送一个 ARP 响应。这个响应包含了主机 $B$ 的 MAC 地址,并且响应直接发送给主机 $A$ 。
-
更新 ARP 缓存:主机 $A$ 收到 ARP 响应后,它会在自己的 ARP 缓存表中更新映射信息,将主机 $B$ 的 IP 地址 与其 MAC 地址关联起来。
主机 $A$ 现在知道了主机 $B$ 的 MAC 地址,它可以构建一个以太网帧,将数据包含在其中,并使用 $B$ 的 MAC 地址 作为目的地址发送出去。
局域网的数据传输
局域网的数据传输过程综合利用了IP和MAC地址。

考虑在如图所示的局域网中,$A$ 知道 $B$ 的 IP地址、$R$ 的 IP 与 MAC 地址。
- 从 $A$ 到 $R$:
- 源MAC地址:$A$ 的MAC地址(
74-29-9C-E8-FF-55) - 目标MAC地址:$R$ 的左端口MAC地址(
E6-E9-00-17-BB-4B) - 源IP地址:$A$ 的IP地址(
111.111.111.111) - 目的IP地址:$B$ 的IP地址(
222.222.222.222)
- 源MAC地址:$A$ 的MAC地址(
- 从 $R$ 到 $B$
- 源MAC地址:$R$ 的右端口MAC地址(
1A-23-F9-CD-06-9B) - 目的MAC地址:$B$ 的MAC地址(
49-BD-D2-C7-56-2A) - 源IP地址:$A$ 的IP地址(
111.111.111.111) - 目的IP地址:$B$ 的IP地址(
222.222.222.222)
- 源MAC地址:$R$ 的右端口MAC地址(
在局域网传输的过程中,IP地址始终不变。
以太网
备注在实际的局域网应用中,几乎都是以太网形式,因此以太网基本成为了局域网的代名词。
以太网有集线器型和交换机型两种架构。
- 集线器型:
- 内部连接所有线缆,逻辑上等同于单根总线的经典以太网。
- 所有站都位于同一个冲突域,必须使用 CSMA/CD 协议。
- 交换机型:
- 内部通过高速背板连接所有端口。
- 每个端口都有独立的冲突域,在全双工模式下端口可以同时收发,不需要CSMA/CD。
- 可以实现并行传输。

以太网帧的格式:

| 字段 | 大小 | 内容 |
|---|---|---|
| 前导码(Preamble) | 7字节 | 由7字节交替的 1 和 0 位组成,用于同步接收方的时钟 |
| 帧开始分隔符(Start of Frame Delimiter, SFD) | 1字节 | 通常为 10101011,标志帧的开始 |
| 目的地址(Destination Address) | 6字节 | 指定帧的接收者的物理 MAC 地址 |
| 源地址(Source Address) | 6字节 | 指定帧发送者的物理 MAC 地址 |
| 类型/长度字段(Type/Length) | 2字节 | 如果值大于或等于 0x0600(1536),则表示帧携带的数据的类型(例如 IPv4、IPv6、ARP 等);如果值小于或等于 0x05DC(1500),则表示数据字段的长度 |
| 数据和填充(Data and Padding) | 46-1500字节 | 携带帧的有效载荷,即要传输的数据。如果数据少于 46 字节,则需要填充,确保数据字段的最小长度为 46 字节 |
| 帧校验序列(Frame Check Sequence, FCS) | 4字节 | 一个循环冗余校验(CRC)值,用于错误检测。接收方计算帧的 CRC,并与这个字段进行比较,以确定帧是否在传输过程中被损坏 |
以太网连接的特点:
- 无连接:发送和接收的网络适配器之间没有握手
- 不可靠:接收方不会向发送方发送ACK或NAK
只有当初始发送方使用更高层rdt(如TCP)时,丢弃帧中的数据才能恢复,否则丢弃的数据会丢失
- 以太网的MAC协议:带二进制退避的无槽CSMA/CD
交换机
交换机(Switch)是局域网中用于连接设备并转发数据帧的设备。它通过分析数据帧中的 MAC 地址,将数据帧从接收端口准确转发到目标设备所在的端口。
相比集线器,交换机只将数据帧发送到必要端口,避免广播到整个网络,显著降低碰撞域,提升带宽利用率和传输速度。
使用交换机时,每个主机通过专用链路直连到交换机,每一个接口是一个独立冲突域。
转发表
转发表(也称 MAC 地址表)是交换机内部维护的一张记录表,存储了网络设备的 MAC 地址 与交换机端口的对应关系,与路由表相似。每条记录通常包含以下信息:
- MAC 地址:网络设备的唯一标识。
- 端口号:设备连接的交换机端口。
- 有效时间等附加信息。
交换过程
交换机的交换过程依靠交换机的自主学习机制,即每收到一个帧就学习发送者到达的接口信息。一次交换过程如下:
- 检查目标 MAC 地址:从数据帧的头部提取目标 MAC 地址。
- 查询转发表:
- 命中(已学习):如果表中有该 MAC 地址,则将帧转发到对应端口(单播)。
- 未命中(未知 MAC):如果表中没有记录,则交换机将帧泛洪(Flooding),即复制该帧并发送到除接收端口以外的所有端口。
- 转发数据帧:目标设备收到帧后应答,交换机会根据源 MAC 地址学习到该设备所在端口,并更新转发表。
交换机与路由器的比较
- 路由器是网络层设备,记录的是IP地址的映射关系,通过路由算法构建转发表。
- 交换机是链路层设备,记录的是MAC地址的映射关系,通过学习和泛洪构建转发表。
VLAN
VLAN(Virtual Local Area Network)指虚拟局域网。它通过逻辑划分的方式,把一个物理局域网拆分成多个独立的子网。

使用VLAN后,将在以太网帧中插入一个 4 字节 的标识符(插在源地址字段和类型字段之间),称为 VLAN 标签,用来指明发送该帧的计算机属于哪个虚拟局域网。插入 VLAN 标签的帧称为 802.1Q 帧。

两个VLAN之间的转发需要路由器连接。