程云来 / 杭州
返回文章·计算机网络
·约 10 分钟

网络面试(三):局域网里的设备怎样找到彼此?

追踪同一交换机上的一次通信,区分 MAC、IP、交换机地址表与 ARP 缓存,理解广播、未知单播、VLAN,以及访问远端网站时为什么先找网关。


知道对方 IP,为什么还不能马上发送帧?

设想电脑 A 要访问电脑 B 上的服务。两台电脑接在同一台以太网交换机上,位于同一 VLAN,IPv4 地址分别为 192.0.2.10/24 与 192.0.2.20/24。假设地址配置正确、没有特殊路由和代理 ARP,也没有其他安全策略阻止通信。

A 已经知道 B 的 IP,但它的 ARP 缓存里没有 B 的记录,交换机的动态 MAC 地址表也为空。现在 A 面对两个不同问题:帧应该写哪个目的 MAC?交换机收到帧后应该从哪个端口转发?

这两件事分别由主机的地址解析和交换机的学习转发解决。把两张表混为一谈,是理解局域网时最常见的障碍。

IP 负责网络寻址,MAC 负责这一跳交付

以太网帧包含源 MAC、目的 MAC、用于识别承载协议的类型信息,以及负载等内容。MAC(Media Access Control,媒体访问控制)地址在常见以太网中是 48 位;例如 02:00:00:00:00:0a。这里使用本地管理的示例地址,不代表真实设备。

当帧承载 IPv4 数据包时,外层目的 MAC 指向本链路上的接收方,内层目的 IP 表达数据包要去哪里。A 与 B 在这个场景中可直接交付,所以目的 MAC 和目的 IP 都指向 B。若目的 IP 在远端网络,两者便可能分别指向本地网关和远端主机。

MAC 并不是不可修改的设备身份证。设备可以使用本地管理地址,也可能进行地址随机化;重复地址会干扰二层交付。解释“为什么需要 MAC”时,应回到本链路的寻址职责,而非宣称它永久且绝对唯一。

ARP 帮主机把下一跳 IP 对应到 MAC

ARP(Address Resolution Protocol,地址解析协议)在本例中解决 IPv4 地址到以太网地址的映射1。它直接由链路帧承载,不是先发一个 UDP 请求,也不需要一个 TCP 连接。

A 先依据目的地址与路由配置判断应当直接交给 B,再查本机 ARP 缓存。缓存未知时,A 发送 ARP 请求,询问“谁拥有 192.0.2.20?请告诉 192.0.2.10”。这个请求帧的目的 MAC 是以太网广播地址 ff:ff:ff:ff:ff:ff。

在我们的正常场景里,B 识别到目标协议地址是自己,返回 ARP 应答,告知自己的 MAC。应答通常以单播发给 A,A 据此记录映射。所谓单播与广播,首先是帧的目的地址性质,而不是“交换机一定只转发一份”和“一定转发很多份”的同义词。

正在绘制图表…
查看 Mermaid 源码
sequenceDiagram
    participant A as 电脑 A
    participant S as 交换机(同一 VLAN)
    participant B as 电脑 B
    participant C as 其他电脑 C
    A->>S: ARP 广播请求:谁拥有 B 的 IP?
    S->>B: 转发广播请求
    S->>C: 转发广播请求
    B->>S: ARP 单播应答:B 的 IP 对应 MAC-B
    S->>A: 转发应答
    A->>S: 目的 MAC-B 的 IPv4 数据帧
    S->>B: 按 MAC 地址表转发

Mermaid 大图

可滚动查看图表,点击缩放比例可恢复 100%。按 Esc 关闭。

C 收到询问,但它不是本例中的目标,因而不发送目标应答。图省略了缓存维护细节;真实网络可能启用代理 ARP,由其他设备代为应答,不能把“应答者必定就是目标主机”写成无条件结论。

交换机如何学会“B 在哪个端口”?

普通二层交换机转发数据帧时,主要查 MAC 地址表,而非把每一个帧都交给 IP 路由表。它从收到帧的源 MAC学习来源位置,典型动态记录包括 VLAN、MAC、入站端口和老化信息。随后用目的 MAC 查询该 VLAN 中的转发位置2。

把上面的交换过程缩成三次学习,会看到两端没有先向交换机“注册”:

收到的帧交换机获得的来源信息目的帧怎样转发
A 发来的 ARP 请求MAC-A 位于 A 的入站端口广播到同 VLAN 的其他合适端口
B 发来的 ARP 应答MAC-B 位于 B 的入站端口已知 MAC-A,朝 A 的端口转发
A 发来的 IPv4 数据帧刷新 MAC-A 的来源记录已知 MAC-B,朝 B 的端口转发

学习使用源地址,因为收到帧时能观察到“这个源地址从此端口出现”。单看目的地址,无法知道目的设备究竟在哪个端口。

如果目的 MAC 是单播地址,但交换机还没有相应记录,它通常会进行未知单播泛洪:把帧复制到同一 VLAN 中符合转发条件的其他端口,排除入站端口。这仍是未知单播帧,交换机没有把目的 MAC 改成广播地址。已知目的设备就在入站端口时,通常无需再从该端口转发回去。

这里的“符合转发条件”很重要:关闭的接口、生成树阻塞的接口或被策略限制的接口,不会因泛洪就无条件收到副本。动态记录也会老化;有冗余链路时,还需要生成树等机制避免二层环路引发重复传播。

交换机与集线器也不能混同。传统集线器重复物理信号,接入设备共享介质;半双工以太网需要通过 CSMA/CD 处理竞争与碰撞。现代常见的交换式全双工链路允许两端同时收发,不再使用这种碰撞检测方式。不过“没有碰撞”不代表没有排队、拥塞和丢包。

两张表,不能互相代替

对比项主机 ARP 缓存交换机动态 MAC 地址表
主要记录IPv4 地址到 MAC 的映射VLAN、MAC 到端口的位置
直接解决的问题主机要写哪个下一跳目的 MAC交换机朝哪个端口转发帧
典型建立依据ARP 交互与相关邻居维护收到帧的源 MAC 与入站端口
失效后的典型动作重新解析下一跳地址未知单播通常在 VLAN 内泛洪

A 有 B 的 ARP 记录,不能证明交换机仍记得 B 在哪。两种记录有各自的生命周期;交换机记录老化后,即使 A 直接发单播数据,也可能暂时发生泛洪。

同样,交换机知道 MAC-B 位于某端口,并不能替 A 自动生成 192.0.2.20 → MAC-B 的主机 ARP 记录。某些设备可以同时承担二层交换与三层路由,也会拥有自己的 ARP 表,但那是不同职责共存,不是两张表变成了同一张表。

访问远端网站时,先解析的是网关

现在把目标从 B 改成远端主机 198.51.100.20。假设 A 的地址与掩码仍是 192.0.2.10/24,默认网关为 192.0.2.1,没有更具体的路由。

A 查路由后选择网关作为下一跳,若不知道网关 MAC,就通过 ARP 询问 192.0.2.1。发送出的数据帧里:

text
以太网目的 MAC:网关在本地链路上的 MAC
IPv4 目的地址:198.51.100.20

网关取出 IP 数据包,再按路由选择后续出口与下一跳。本地交换机的二层转发不需要知道远端主机的 MAC,A 也不会依靠这个局域网内的 ARP 广播跨越互联网寻找远端设备。

地址与掩码怎样参与同网段判断、路由怎样优先选择,是网络层的问题。这里先记住因果顺序:先选下一跳 IP,再为本链路交付解析所需 MAC。把 ARP 放在路由选择之前,就容易问错目标。

VLAN 怎样限制广播范围?

如果一台交换机连接办公电脑与实验设备,全部放在同一个二层广播域内,ARP 广播会到达这个范围里的其他转发端口。VLAN(Virtual LAN,虚拟局域网)允许将同一物理交换网络划成不同的逻辑二层范围。

例如把 A、B 所在端口配置为 VLAN 10,把 C 所在端口配置为 VLAN 20,那么 A 的广播不会仅因“接在同一台交换机上”就转发到 C 的端口。交换机的 MAC 学习与转发也要考虑 VLAN,不能只查一个脱离 VLAN 的全局 MAC 位置。

多台交换机还可能通过同一条链路承载多个 VLAN。常见的 access 端口承载一个接入 VLAN 的终端流量,trunk 链路承载多个 VLAN;IEEE 802.1Q 标签帮助识别帧所属 VLAN。普通终端接入的帧通常不带标签,部分 trunk 流量也可能按配置不带标签,因此不能说“用了 VLAN,每个帧都带 VLAN 标签”。具体行为取决于端口模式与设备配置,可参照 Cisco 的 VLAN Trunks 配置说明。

VLAN 本身没有加密数据。跨 VLAN 通信通常需要三层转发,并可在这个边界施加访问策略;若配置允许路由,两组设备仍可能访问彼此。VLAN、IP 子网和安全权限是相关但不同的概念,不能用“分了 VLAN,所以绝对安全”代替策略设计。

动手追踪一个帧与两张表

先沿空表场景走完三步,再试“ARP 已缓存,MAC 表为空”:A 发的是广播还是单播?最后把 C 换到另一个 VLAN,观察转发端口的变化。

两张表,谁决定发给谁?

A、B 在 VLAN 10。切换初始条件,观察一个帧怎样更新两张表。

A · 端口 1
VLAN 10
B · 端口 2
VLAN 10
C · 端口 3
VLAN 10
A 的 ARP 缓存

下一跳 IP → MAC

尚无 B 的记录
交换机 MAC 表

VLAN、MAC → 端口

VLAN 10 · MAC-A → 端口 1
尚未学到 MAC-B 的位置
1 / 3

表中显示当前帧处理后的相关记录。教学设定:普通 IPv4 以太网、无代理 ARP、无环路,端口均允许转发,A/B 地址为 192.0.2.10/24 与 192.0.2.20/24。忽略其他邻居维护记录;不发送实际报文,不证明应用可达。

找不到对方时,怎样把证据分层?

症状应先核对的证据避免跳过的判断
ARP 解析一直没有结果下一跳选择、接口状态、VLAN、对方地址与抓到的请求/应答不要直接断定远端应用没启动
换网关或移动设备后短时异常邻居缓存与交换机位置记录是否仍指向旧值只看一张表不能排除另一张表的问题
同 IP 时而到 A、时而到 B地址冲突与响应来源是否变化不把地址冲突当作 TCP 随机故障
收到解析结果却连不上服务目标地址、三层转发、端口与策略ARP 成功不证明应用可用

IPv4 地址冲突检测有专门的探测与宣告机制,RFC 5227 §2对此给出规定。ARP 地址声明本身也不等同于对端身份认证;故障处理应依据实际网络策略,不能把“清空 ARP 缓存”当成所有问题的修复。

面试口述与追问

30—60 秒参考回答

在常见 IPv4 以太网场景里,主机先按路由选择下一跳,再用 ARP 获得下一跳 IP 对应的 MAC,以此构造数据帧。同网段时下一跳可以是对方主机,访问远端通常是网关。交换机从源 MAC 和入站端口学习位置,再用目的 MAC 与 VLAN 查表转发;目的单播未知时通常在 VLAN 内泛洪。ARP 缓存记录 IP 到 MAC,交换机 MAC 表记录 MAC 到端口,两者不能混用。VLAN 划分二层广播范围,跨 VLAN 通常需要三层转发,但 VLAN 本身不提供加密。

四个追问及解析

  1. 交换机从源 MAC 还是目的 MAC 学习? 从源 MAC 学习。收到帧说明来源出现在入站端口,目的地址不能证明目的设备的位置。
  2. 未知单播泛洪会把帧改成广播吗? 不会。它复制转发原来的单播帧,广播帧则原本就具有广播目的地址。
  3. 访问远端网站时,ARP 询问网站 IP 吗? 在本章的默认网关场景中,询问的是本地网关 IP;具体下一跳由路由选择决定。
  4. 同一台交换机上的电脑必然在同一广播域吗? 不必然。它们可能属于不同 VLAN;交换机也可能提供三层功能,不能只看设备外形判断通信关系。

两个易错说法

  • “MAC 地址表就是 ARP 表。”前者用于二层端口选择,后者用于协议地址到链路地址的解析,持有者和生命周期也不同。
  • “ARP 知道了对方 MAC,就能证明对方可信并正常服务。”地址映射不等于身份认证,也不检验目标应用端口。

局域网的交付已经有了完整路径:选下一跳、解析地址、构造帧、交换机学习并转发。跨网络时,最先改变的却是“下一跳是谁”。理解这个选择,需要把 IP 地址和子网掩码一起放回路由表。

资料与核验日期

核验于 2026-10-08。图与地址均为教学示意,未声称是实际抓包;本文围绕普通 IPv4 以太网,IPv6 使用不同的邻居发现机制。

Footnotes

  1. RFC 826:An Ethernet Address Resolution Protocol:协议地址与以太网地址的解析、请求及接收处理。 ↩

  2. Cisco:Troubleshoot LAN Switching Environments:MAC 学习、已知单播、未知单播与广播转发的设备实现说明。 ↩