Chapter 6-2:MAC 地址、ARP、以太网与交换机

Chapter 6-2:MAC 地址、ARP、以太网与交换机

引言:IP 数据报如何真正到达下一台设备

网络层可以根据目的 IP 地址选择路径,但路径选择本身并不能让数据直接出现在下一台设备中。数据报每经过一条具体链路,都必须先被封装成链路层帧,再由网卡、交换机和传输介质完成实际交付。

这就产生了几个相互关联的问题:

  • 已知目的 IP 地址后,为什么还需要目的 MAC 地址?
  • 发送方如何找到下一跳接口的 MAC 地址?
  • IP 数据报跨越路由器时,哪些地址会变化?
  • 交换机如何知道帧应当从哪个端口发出?
  • 为什么主机通常不需要知道交换机的存在?

这一节的核心主线可以概括为:

1
2
3
4
5
6
7
8
9
网络层确定下一跳

ARP 获得下一跳 MAC 地址

以太网封装链路层帧

交换机根据 MAC 地址转发

帧到达下一跳接口

❗ IP 地址负责描述网络层位置,MAC 地址负责完成当前链路上的接口交付,ARP 则负责连接这两个地址体系。


❗ 本节核心结论:
一个 IP 数据报在每一跳上都要装入新的链路层帧。IP 地址维持端到端意义,而 MAC 地址服务于当前链路上的具体交付。


1. 为什么同时需要 IP 地址和 MAC 地址

IP 地址和 MAC 地址看起来都在标识网络设备,但它们解决的并不是同一个问题。

地址 所属层次 主要作用
IP 地址 网络层 描述接口在网络中的逻辑位置,支持跨网络路由
MAC 地址 链路层 标识当前链路上的接口,支持帧的一跳交付

1.1 IP 地址解决全网路径问题

IP 地址具有层次结构。以 IPv4 地址和子网前缀为例,地址的一部分表示网络,另一部分表示该网络中的接口。

路由器不需要为互联网中的每个接口保存一条独立记录,而可以按照地址前缀聚合路由。

例如,一条路由表项可以表示:

1
所有目的地址属于 192.168.10.0/24 的分组,都从某个接口转发

这种结构使网络能够逐层组织和扩展。

IP 地址可以类比为通信地址:

1
国家 → 城市 → 学校 → 建筑 → 房间

路由器可以先根据较大的地址范围决定方向,再逐步接近目标网络。

1.2 MAC 地址解决当前链路的交付问题

MAC 地址是链路层接口使用的地址。以太网 MAC 地址通常为 48 bit,常以十六进制形式表示,例如:

1
1A-2F-BB-76-09-AD

在一条以太网链路上,发送方必须在帧中写入目的 MAC 地址,使网卡和交换机知道该帧要交给哪个接口。

MAC 地址更接近接口的身份标识。它本身通常不携带明确的网络位置结构,不能像 IP 前缀那样直接用于大规模分层路由。

1.3 为什么不能只使用 MAC 地址

假设整个互联网只使用平面的 MAC 地址,路由器将很难根据地址判断:

  • 一个接口属于哪个网络;
  • 一组地址是否可以聚合;
  • 到达某个地址应选择哪条分层路径。

由于缺少类似 IP 网络前缀的结构,路由设备可能需要记录大量具体接口的位置,转发表规模和网络管理复杂度都会显著增加。

因此,MAC 地址适合当前链路中的局部交付,却不适合作为互联网范围内的主要路由地址。

1.4 为什么不能只使用 IP 地址

理论上可以设计一种仅依靠逻辑地址完成所有工作的网络,但在现有分层体系中,链路层需要有自己的封装、寻址和转发机制。

链路层可能采用以太网、Wi-Fi 或其他技术。不同链路有自己的:

  • 帧格式;
  • 接口标识方式;
  • 介质访问规则;
  • 差错检测机制。

将链路层地址与网络层地址分离后,网络层可以保持相对统一,而底层链路技术可以独立变化。

同一个 IP 数据报可以先经过 Wi-Fi,再经过以太网,最后经过另一种链路,而不需要让 IP 层直接处理每种物理网络的具体细节。

1.5 身份与位置的类比

一种常见类比是:

1
2
MAC 地址:接口是谁
IP 地址:接口现在位于哪个网络

也可以理解为:

1
2
MAC 地址 ≈ 身份标识
IP 地址 ≈ 通信地址

不过,这个类比只是帮助理解。真正重要的是二者的协议分工,而不是把 MAC 地址理解为人的永久身份证。

❗ 两种地址并存的根本原因,是网络层的全局路由问题与链路层的局部交付问题需要不同的地址结构。


❗ 本节核心结论:
IP 地址必须具有适合路由和聚合的层次结构;MAC 地址则服务于具体链路中的接口识别。将二者分开,有利于网络分层和底层技术独立演化。


2. 地址绑定在接口,而不是抽象地绑定在设备上

讨论 IP 地址和 MAC 地址时,更准确的对象是网络接口。

一台普通主机可能同时具有:

  • 一个有线以太网接口;
  • 一个 Wi-Fi 接口;
  • 一个虚拟网络接口;
  • 一个 VPN 接口。

这些接口可以分别拥有不同的 IP 地址和链路层地址。

路由器通常拥有多个接口,因为它需要连接多个不同网络。每个接口也会拥有自己所在网络中的 IP 地址和 MAC 地址。

因此,不应简单地说:

1
一台计算机只有一个 IP 地址和一个 MAC 地址

更准确的说法是:

一个参与 IP 通信的网络接口通常具有对应的网络层地址和链路层地址。

这对于理解路由器尤其重要。路由器收到一个帧时,帧的目的 MAC 地址指向的是路由器某个具体接口,而不是笼统地指向“整台路由器”。


❗ 本节核心结论:
IP 地址和 MAC 地址主要标识网络接口。一台主机或路由器可以拥有多个接口,因此也可能拥有多个 IP 地址和 MAC 地址。


3. ARP:从 IP 地址找到 MAC 地址

发送方的应用程序通常通过域名或 IP 地址指定通信对象,但以太网帧必须填写目的 MAC 地址。

因此,发送方经常面临下面的状态:

1
2
已知下一跳 IP 地址
但不知道下一跳 MAC 地址

ARP 即 Address Resolution Protocol,地址解析协议,用于完成:

1
IP 地址 → MAC 地址

3.1 ARP 表

主机和路由器会维护 ARP 表,其中保存近期学习到的 IP 与 MAC 映射。

表项可以抽象表示为:

1
<IP 地址,MAC 地址,剩余有效时间>

例如:

IP 地址 MAC 地址 状态
192.168.1.1 AA-AA-AA-AA-AA-AA 动态
192.168.1.20 BB-BB-BB-BB-BB-BB 动态

ARP 表是一种缓存,而不是永久可靠的数据库。

表项具有过期时间,原因包括:

  • 接口可能离开当前网络;
  • IP 地址可能重新分配;
  • 网卡可能更换;
  • 网络拓扑或设备状态可能变化。

如果表项永久存在,旧映射可能长期误导发送方。

3.2 ARP 查询过程

假设主机 A 要向同一局域网中的主机 B 发送数据:

1
2
A 的 IP:192.168.1.10
B 的 IP:192.168.1.20

A 已知 B 的 IP,但 ARP 表中没有 B 的 MAC 地址。

整个过程如下:

  1. A 查询本地 ARP 表。
  2. A 没有找到 192.168.1.20 对应的 MAC 地址。
  3. A 构造 ARP 请求。
  4. ARP 请求使用以太网广播地址:
1
FF-FF-FF-FF-FF-FF
  1. 当前广播域中的所有接口都会收到该请求。
  2. 各接口检查请求中的目标 IP 地址。
  3. 只有拥有 192.168.1.20 的 B 需要回复。
  4. B 把自己的 MAC 地址发送给 A。
  5. A 将映射写入 ARP 表。
  6. A 使用 B 的 MAC 地址构造真正的数据帧。

3.3 为什么 ARP 请求使用广播

A 在发出查询时,正是因为不知道 B 的 MAC 地址,所以无法定向构造一个只发给 B 的普通单播帧。

因此,它只能询问当前广播域中的所有节点:

1
谁拥有这个 IP 地址?

广播地址表示该帧需要被当前广播域中的所有接口接收。

3.4 为什么 ARP 回复通常可以单播

B 收到 ARP 请求后,可以从请求内容中知道:

  • A 的 IP 地址;
  • A 的 MAC 地址。

因此,B 已经知道回复应该发给哪个 MAC 地址,没有必要再次广播。

这反映了广播和单播的不同使用场景:

  • 不知道目标接口在哪里时,需要广播查询;
  • 已知目标 MAC 地址后,可以直接单播回复。

3.5 ARP 与 DNS 的区别

ARP 和 DNS 都带有“解析”的含义,但二者工作目标不同。

协议 映射关系 主要作用范围
DNS 域名 → IP 地址 应用访问和互联网命名
ARP IP 地址 → MAC 地址 IPv4 本地链路交付

一次典型访问可能先后经历:

1
2
3
4
5
6
7
域名
↓ DNS
目的 IP 地址
↓ 路由判断
下一跳 IP 地址
↓ ARP
下一跳 MAC 地址

❗ DNS 帮助应用找到目的 IP,ARP 帮助链路层找到下一跳接口。


❗ 本节核心结论:
ARP 是网络层寻址与链路层寻址之间的桥梁。它通过广播请求和通常为单播的回复,动态维护 IP 到 MAC 的缓存映射。


4. 同一局域网中的通信

假设主机 A 和主机 B 位于同一个 IP 子网和以太网广播域中。

A 要发送的数据报包含:

1
2
源 IP:A 的 IP
目的 IP:B 的 IP

网络层根据目的 IP 和子网掩码判断:B 位于本地子网,不需要先经过路由器。

A 接下来通过 ARP 获得 B 的 MAC 地址,并构造以太网帧:

1
2
3
源 MAC:A 的 MAC
目的 MAC:B 的 MAC
载荷:发给 B 的 IP 数据报

因此,在同一局域网通信时:

字段 对应对象
目的 IP 最终目的主机 B
目的 MAC 最终目的主机 B 的接口

IP 层和链路层在这一跳上指向同一个主机,但二者仍然属于不同协议层。

交换机参与了帧的中间转发,但 A 在构造帧时仍然填写 B 的 MAC,而不是交换机的 MAC。


❗ 本节核心结论:
同一子网通信时,发送方通过 ARP 获得目标主机的 MAC 地址,并将帧直接寻址到目标主机接口。


5. 跨局域网通信:目的 MAC 为什么是网关

假设主机 A 要向远端主机 B 发送数据,而二者不在同一个子网。

A 通过子网判断发现:

1
目的 IP 不属于本地子网

因此,A 不能在当前局域网中直接寻找 B 的 MAC 地址。

原因很简单:链路层帧只能在当前链路或当前广播域中传播。远端 B 的接口并不位于 A 当前连接的以太网中,即使 A 知道 B 的 MAC 地址,这个帧也无法直接穿过路由器到达 B。

A 必须先把数据交给默认网关。

5.1 第一跳的地址

A 创建的 IP 数据报:

1
2
源 IP:A 的 IP
目的 IP:B 的 IP

A 创建的第一跳以太网帧:

1
2
3
源 MAC:A 的 MAC
目的 MAC:默认网关接口的 MAC
载荷:目的 IP 仍然是 B 的 IP 数据报

这里必须区分两个“目的”:

  • 网络层目的仍然是远端主机 B;
  • 当前链路目的则是第一跳路由器。

5.2 路由器收到帧后做什么

默认网关收到帧后:

  1. 检查帧的目的 MAC,确认该帧发给自己的接口。
  2. 验证帧的差错检测字段。
  3. 去掉原来的以太网头部和尾部。
  4. 取出内部 IP 数据报。
  5. 根据目的 IP 查询转发表。
  6. 选择输出接口和下一跳。
  7. 获得下一跳接口的 MAC 地址。
  8. 创建一个新的链路层帧。
  9. 把原 IP 数据报封装进新帧并发送。

因此,旧帧不会原封不动地穿过路由器。

5.3 每一跳中的地址变化

假设路径为:

1
A → 路由器 R1 → 路由器 R2 → B

各跳的地址关系可以表示为:

链路 源 MAC 目的 MAC 源 IP 目的 IP
A → R1 A R1 入接口 A B
R1 → R2 R1 出接口 R2 入接口 A B
R2 → B R2 出接口 B A B

在普通转发场景中:

  • 源 IP 和目的 IP通常保持端到端意义;
  • 源 MAC 和目的 MAC随链路变化;
  • 每个路由器都拆除旧帧并创建新帧。

❗ IP 地址表示端到端通信关系,MAC 地址表示当前一跳的发送接口和接收接口。


❗ 本节核心结论:
跨子网通信时,发送方不会把第一帧直接寻址到远端主机,而是寻址到默认网关。路由器每经过一跳都会重新封装链路层帧。


6. 以太网:局域网中的具体链路层技术

以太网是广泛使用的局域网技术。它定义了:

  • 以太网帧格式;
  • MAC 地址字段;
  • 上层协议标识;
  • 差错检测方式;
  • 一系列物理介质和传输速率规范。

以太网并不是“互联网本身”,而是互联网中承载 IP 数据报的一类链路层技术。

6.1 以太网帧结构

典型以太网帧包含:

1
2
3
4
5
6
前同步码
目的 MAC 地址
源 MAC 地址
类型字段
数据载荷
CRC/FCS
字段 作用
前同步码 帮助接收方识别帧到来并进行同步
目的地址 标识当前链路上的接收接口
源地址 标识当前链路上的发送接口
类型 指出载荷应交给哪个上层协议
数据 通常承载 IP 数据报
CRC/FCS 检测帧在传输中是否发生错误

6.2 Type 字段

接收方从以太网帧中取出载荷后,需要知道应把它交给哪个上层协议。

Type 字段起到协议分用作用。例如,它可以表明载荷属于 IPv4、ARP 或其他协议。

其作用类似于:

1
这份数据接下来应交给哪个处理模块

6.3 前同步码

发送方和接收方的硬件时钟不可能天然完全一致。接收方需要从输入信号中恢复节奏,并判断有效帧即将开始。

前同步码用于帮助接收方进行比特级同步和帧起始识别。

6.4 CRC 与不可靠服务

以太网帧尾部具有 CRC/FCS 字段,用于检测传输错误。

如果接收方发现校验不通过,通常会丢弃该帧。

但是,以太网依然被称为提供无连接、不可靠的服务,原因是:

  • 发送帧前通常不建立链路层连接;
  • 接收方不会为每个正确帧发送确认;
  • 发现错误后通常只是丢弃;
  • 基本以太网机制不保证发送方自动重传;
  • 帧也可能因为缓存溢出等原因丢失。

因此:

1
能够检测错误 ≠ 能够保证可靠交付

CRC 负责发现部分错误,但不负责确认和恢复。

如果上层使用 TCP,TCP 可以通过端到端确认和重传恢复缺失的数据;如果上层协议本身不提供可靠性,丢失可能直接反映到应用。

❗ 差错检测只说明以太网有能力识别部分损坏帧,不代表以太网能够保证帧最终到达。


❗ 本节核心结论:
以太网定义了帧的组织和交付方式。它通过 CRC 检测错误,但基本服务仍然是无连接、不可靠的。


7. 从共享以太网到交换式以太网

早期总线型以太网中,多台设备共享一条介质。如果两台设备同时发送,就可能发生冲突。

所有设备位于同一个较大的碰撞域中,任一时刻通常只能有一个节点成功发送。

现代以太网通常采用星型拓扑:

1
2
3
4
主机 ─┐
主机 ─┼─ 交换机
主机 ─┤
主机 ─┘

每台主机通过独立链路连接交换机。交换机可以在不同端口之间同时转发多个互不冲突的帧。

这种结构带来的变化包括:

  • 每条端口链路可以形成独立的通信范围;
  • 多组主机可以同时通信;
  • 带宽不再由所有节点完全共享;
  • 传统共享介质中的碰撞问题显著减弱。

交换机并不是简单的信号放大设备。它会读取帧头,根据目的 MAC 地址决定帧的去向。


❗ 本节核心结论:
交换式以太网将一个大的共享冲突环境拆分为多个独立链路,使局域网能够进行更高效的并行通信。


8. 交换机为什么对主机透明

“交换机对主机透明”并不意味着交换机没有实际作用,而是指:

普通主机在发送以太网帧时,不需要把交换机当成协议中的目标节点,也不需要知道交换机内部如何转发。

假设 A 和 B 连接在同一台交换机上。

A 构造帧时写入:

1
2
源 MAC:A
目的 MAC:B

A 不会写:

1
2
目的 MAC:交换机
请交换机再转发给 B

交换机自动读取该帧的目的 MAC,并决定从哪个端口发出。

从 A 的协议视角看,它像是在当前局域网中直接向 B 发送帧。

8.1 主机不需要知道什么

普通主机通常不需要知道:

  • 局域网中有几台交换机;
  • 每台交换机的端口编号;
  • 交换表中保存了什么;
  • 帧具体经过了哪些交换机;
  • 交换机之间的内部转发路径。

主机只需要知道目标接口的 MAC 地址。

8.2 交换机如何做到透明

交换机依靠自学习自动建立转发表,而不要求主机主动登记。

交换机收到帧后会观察源 MAC 地址,并记录该地址来自哪个端口。

因此,主机不必发送特殊消息告诉交换机:

1
我的 MAC 地址位于端口 3

交换机通过正常数据流量自行推断。

8.3 透明不等于没有影响

交换机虽然对主机的普通发送流程透明,但仍然会影响:

  • 实际转发性能;
  • 网络拥塞;
  • 广播传播;
  • VLAN 划分;
  • 安全策略;
  • 链路故障后的路径。

“透明”只表示其存在不需要在普通主机的基本发送逻辑中显式体现。

❗ 透明的核心是主机不必把交换机当成通信终点,也不必参与交换机的内部转发表维护。


❗ 本节核心结论:
主机只负责按目标 MAC 地址发送帧,交换机自动完成中间转发,因此交换机在普通链路层通信中对主机表现为透明。


9. 交换机的自学习机制

交换机维护一张交换表,也称 MAC 地址表。表项通常包含:

1
MAC 地址 → 输出端口 → 时间信息

例如:

MAC 地址 端口
A 1
B 3
C 4

9.1 为什么学习源 MAC 地址

假设交换机从端口 1 收到一个帧:

1
2
源 MAC:A
目的 MAC:B

交换机可以立即确定:

1
A 可以从端口 1 到达

因为这个帧确实是从端口 1 进入的。

因此,它记录:

1
A → 端口 1

交换机不能仅凭目的 MAC 推断 B 在哪里,因为这个帧并不是从 B 发来的。

所以自学习观察的是:

帧从哪个端口进入,以及该帧的源 MAC 是什么。

9.2 表项为什么需要过期

主机可能:

  • 被移动到另一个端口;
  • 断开连接;
  • 通过其他交换机路径出现;
  • 更换网络拓扑。

如果旧表项永不过期,交换机可能继续向错误端口转发。

因此,动态学习的表项通常带有老化机制。长时间没有再次观察到某个源 MAC 后,对应记录会被删除。

9.3 多台主机可以对应同一端口

如果一个交换机端口连接的是另一台交换机,那么远端的多台主机发送的帧都会从这个端口进入。

本地交换机可能学到:

1
2
3
A → 端口 5
B → 端口 5
C → 端口 5

这并不矛盾。交换表表达的是:

1
要到达这些 MAC 地址,应当从端口 5 的方向继续走

它不要求一个端口只能对应一个主机。


❗ 本节核心结论:
交换机通过帧的源 MAC 和输入端口学习网络位置。交换表记录的是到达某个 MAC 地址的方向,而不一定是该主机直接连接的物理端口。


10. 过滤、转发与泛洪

交换机收到一个帧后,通常执行以下逻辑:

  1. 根据源 MAC 学习或更新交换表。
  2. 使用目的 MAC 查询交换表。
  3. 根据查询结果选择过滤、转发或泛洪。

10.1 转发

假设帧从端口 1 进入,目的 MAC 为 B。

交换表中记录:

1
B → 端口 4

交换机知道 B 位于端口 4 的方向,因此只把帧从端口 4 发出。

这就是转发:

已知目标方向,因此进行选择性、定向发送。

交换机不需要把帧复制到其他无关端口,从而减少局域网中的无效流量。

10.2 过滤

假设帧从端口 1 进入,交换表显示:

1
目的 MAC B → 端口 1

这说明目标也位于输入端口对应的网络方向。

在共享网段的场景中,帧已经在该网段上传播,目标可以直接接收,交换机无需再把它转发到其他端口。

因此,交换机选择不继续转发。

这称为过滤。

过滤中的“丢弃”并不表示帧错误,也不表示通信失败,而是表示:

1
该帧没有必要通过交换机传播到其他端口

10.3 泛洪

如果交换表中没有目的 MAC 的记录,交换机不知道目标位于哪个方向。

为了使帧仍有机会到达目标,交换机会将帧复制到除输入端口以外的其他端口。

这称为泛洪。

例如,帧从端口 1 进入,交换机会发送到:

1
端口 2、端口 3、端口 4……

但不会再从端口 1 原路发回。

当目标主机回复时,交换机可以通过回复帧的源 MAC 学习目标的位置。之后再发送给该目标时,就可以进行精确转发。

10.4 三种行为的直观区别

行为 交换机是否知道目标位置 处理方式
过滤 知道,且目标在输入端口方向 不向其他端口传播
转发 知道,且目标在另一端口方向 只发往对应端口
泛洪 不知道 除输入端口外全部发送

可以压缩为:

1
2
3
过滤:不用继续送
转发:知道往哪里送
泛洪:不知道,只能多方向尝试

❗ 过滤不是错误丢弃,泛洪也不是普通广播;它们都是交换机根据当前转发表状态采取的转发决策。


❗ 本节核心结论:
交换机知道目标在其他端口时执行转发,知道目标在来路方向时执行过滤,不知道目标位置时执行泛洪。


11. 泛洪与广播的区别

泛洪产生的外在效果和广播相似:多个端口都会收到帧。但二者的原因和地址含义不同。

对比项 广播 泛洪
目的 MAC 广播地址 原来的单播目的 MAC
发起原因 发送方希望所有节点接收 交换机不知道目标位置
决策主体 发送主机或上层协议 交换机
是否可能随学习减少 广播仍需传播 未知单播泛洪可因学习而减少

例如 ARP 请求使用目的地址:

1
FF-FF-FF-FF-FF-FF

这是广播帧。交换机会把它转发到广播域中的其他端口,因为发送方明确希望所有节点检查该请求。

而未知单播帧的目的 MAC 可能是:

1
11-22-33-44-55-66

交换机只是暂时不知道这个地址在哪个端口,因此进行泛洪。帧的目的地址并没有变成广播地址。


❗ 本节核心结论:
广播是发送方明确面向所有节点的通信方式;泛洪是交换机在未知目标位置时采取的临时转发策略。


12. ARP 表与交换表不能混淆

ARP 表和交换表都会保存地址映射,但它们位于不同设备中,解决不同问题。

对比项 ARP 表 交换表
常见所在位置 主机、路由器接口 交换机
映射关系 IP → MAC MAC → 端口
解决的问题 下一跳接口的 MAC 是什么 帧应从哪个端口转发
建立方式 ARP 请求和回复 观察源 MAC 自学习
是否老化

假设 A 要给 B 发送帧:

  1. A 使用 ARP 表确定 B 的 MAC 地址。
  2. A 将 B 的 MAC 写入帧。
  3. 交换机使用交换表确定 B 所在端口。
  4. 交换机将帧转发到该端口。

可以理解为:

1
2
主机使用 ARP 表构造帧
交换机使用交换表转发帧

❗ 本节核心结论:
ARP 表帮助发送方回答“目的 MAC 是什么”,交换表帮助交换机回答“这个 MAC 应从哪个端口到达”。


13. 交换机与路由器的区别

交换机和路由器都执行存储与转发,但它们处理的协议层次和地址不同。

对比项 交换机 路由器
主要层次 链路层 网络层
处理单位 IP 数据报
查看的主要地址 目的 MAC 目的 IP
使用的表 交换表 路由表、转发表
主要作用 局域网内部连接和转发 连接不同网络并选择下一跳
是否重新封装帧 通常转发原帧 拆除旧帧并创建新帧
对普通主机是否透明 通常是 通常作为明确的默认网关

13.1 为什么路由器不是透明的交换设备

当主机发现目的 IP 不在本地子网时,必须明确选择默认网关作为下一跳。

第一帧的目的 MAC 就是路由器接口的 MAC。

因此,路由器在网络层意义上是主机明确知道的下一跳设备。

交换机不同。主机通常不需要把交换机设置为下一跳,也不会把普通数据帧寻址到交换机本身。

13.2 两者如何协同

跨网络通信中,两类设备可能连续工作:

1
2
3
4
5
6
7
8
9
主机
↓ 以目的 MAC 转发
交换机
↓ 将帧送到网关接口
路由器
↓ 根据目的 IP 选择下一网络
另一侧交换机
↓ 根据新的目的 MAC 转发
目的主机

交换机负责在当前链路中传递帧,路由器负责连接不同网络并重新开始下一跳链路层交付。


❗ 本节核心结论:
交换机根据 MAC 地址在局域网内部转发帧;路由器根据 IP 地址连接不同网络,并在每一跳重新封装链路层帧。


14. 一次完整的跨网络通信过程

假设主机 A 要访问远端主机 B。

14.1 获得目的 IP

如果应用使用域名,A 首先通过 DNS 获得 B 的 IP 地址。

14.2 判断是否位于本地子网

A 使用自己的 IP 地址和子网掩码判断 B 是否属于本地子网。

由于 B 位于远端网络,A 决定把数据交给默认网关。

14.3 获得网关 MAC 地址

A 查询 ARP 表。如果没有默认网关 IP 对应的 MAC 地址,A 发送 ARP 广播请求。

网关回复自己的 MAC 地址,A 将其写入 ARP 缓存。

14.4 构造第一跳帧

IP 数据报:

1
2
源 IP:A
目的 IP:B

以太网帧:

1
2
源 MAC:A
目的 MAC:默认网关

14.5 交换机转发

接入交换机收到帧后:

  1. 学习 A 的源 MAC;
  2. 查询网关 MAC;
  3. 如果已知则定向转发;
  4. 如果未知则暂时泛洪。

14.6 路由器处理

网关收到帧后:

  1. 去除以太网封装;
  2. 检查 IP 目的地址 B;
  3. 查询转发表;
  4. 确定下一跳;
  5. 必要时通过 ARP获得下一跳 MAC;
  6. 创建新的链路层帧;
  7. 把同一个 IP 数据报继续发送。

14.7 到达目标网络

最后一台路由器发现 B 位于直连网络,使用 ARP 获得 B 的 MAC,并构造最后一跳帧:

1
2
3
4
源 MAC:最后一台路由器
目的 MAC:B
源 IP:A
目的 IP:B

交换机最终把该帧交给 B。


❗ 本节核心结论:
跨网络通信是网络层逐跳决策与链路层逐跳封装共同完成的。每一跳都可能使用新的 MAC 地址和新的帧,但数据报始终朝着相同的目的 IP 前进。


15. 常见理解误区

15.1 目的 IP 是 B,所以目的 MAC 也一定是 B

错误。

只有 B 位于当前链路时,目的 MAC 才是 B。跨子网通信的第一跳中:

1
2
目的 IP = B
目的 MAC = 默认网关

15.2 ARP 可以解析互联网中任意主机的 MAC 地址

错误。

ARP 主要作用于当前本地链路。发送远端数据时,主机解析的是默认网关的 MAC,而不是远端主机的 MAC。

15.3 MAC 地址可以代替 IP 地址进行互联网路由

错误。

MAC 地址通常缺少适合大规模路由聚合的层次结构,主要用于当前链路内的交付。

15.4 交换机根据源 MAC 决定往哪里转发

不准确。

交换机使用源 MAC 学习地址位置,使用目的 MAC 决定帧的转发方向。

15.5 交换机泛洪时会把目的地址改成广播地址

错误。

未知单播泛洪不会修改原有目的 MAC,只是将同一个帧复制到多个输出端口。

15.6 过滤表示帧发生错误

错误。

过滤可能只是因为目标位于输入端口方向,没有必要把帧继续传播到其他端口。

15.7 以太网具有 CRC,所以能够保证可靠交付

错误。

CRC 提供差错检测,但基本以太网不会对每个帧确认,也不会保证自动重传。

15.8 交换机透明意味着交换机没有地址

错误。

交换机为了管理、配置或运行某些控制协议,可以拥有自己的地址。“透明”只是表示普通数据帧不需要把交换机作为通信终点。


结论

MAC 地址、ARP、以太网和交换机共同完成了局域网中的链路层交付。

它们之间不是四个彼此独立的概念,而是一条连续机制:

  1. 网络层根据目的 IP 判断最终位置和下一跳。
  2. ARP 将下一跳 IP 解析为 MAC 地址。
  3. 发送方把 IP 数据报封装进以太网帧。
  4. 交换机根据目的 MAC 查询交换表。
  5. 交换机选择过滤、转发或泛洪。
  6. 帧到达下一跳接口。
  7. 如果下一跳是路由器,路由器拆除旧帧并为下一段链路重新封装。

其中最关键的地址规律是:

1
2
IP 地址:面向端到端的网络层通信
MAC 地址:面向当前一跳的链路层交付

最关键的两张表是:

1
2
ARP 表:IP → MAC
交换表:MAC → 端口

最关键的交换机决策是:

1
2
3
目标在来路方向:过滤
目标在其他已知端口:转发
目标位置未知:泛洪

❗ 最终核心结论:IP 地址使数据能够在多个网络之间寻找方向,MAC 地址使数据能够在每一条具体链路上到达下一接口;ARP 和交换机则分别完成地址解析与帧转发。