以太网、VLAN 与 STP:从交换机转发到二层网络排障
大家好,我是程序员思绪
交换机刚启动时为什么会把单播帧发送到多个端口?两个端口明明都亮着,主机为什么仍然互相不通?为了冗余连接两条链路后,网络为什么可能瞬间被广播流量淹没?理解这些问题,需要把以太网帧、MAC 地址表、VLAN、Trunk 和生成树协议串成一套完整模型。
本文从交换机如何学习与转发帧开始,解释广播域、802.1Q VLAN、跨 VLAN 路由、二层环路、STP 和链路聚合,并给出常见二层故障的排查路径。
1. 以太网帧承载了什么
以太网在局域网中以帧为单位传输数据。常见 Ethernet II 帧包含以下字段:
| 字段 | 常见长度 | 作用 |
|---|---|---|
| 目标 MAC | 6 字节 | 标识当前链路中的接收方 |
| 源 MAC | 6 字节 | 标识当前链路中的发送方 |
| EtherType | 2 字节 | 指明上层协议,如 IPv4、IPv6、ARP |
| 数据载荷 | 46 到 1500 字节 | 承载上层数据 |
| FCS | 4 字节 | 检测传输过程中的比特错误 |
网卡发送帧前还会加入前导码等物理层信息,它们通常不作为抓包工具展示的帧内容。接收网卡发现 FCS 错误时一般直接丢弃,操作系统和抓包工具未必能看到该帧。
MAC 地址长度为 48 位。普通单播 MAC 标识一个接口,广播 MAC 为 ff:ff:ff:ff:ff:ff,组播 MAC 则代表一组接收者。MAC 只用于当前二层网络,路由器转发 IP 包时会重新生成下一段链路的源和目标 MAC。
2. 交换机如何学习 MAC 地址
交换机不会预先知道每台主机连接在哪个端口。它通过进入帧的源 MAC 学习位置,并记录在 MAC 地址表中。
MAC 表项会老化。如果主机长时间不发送帧,动态表项被删除;下一次发往它的帧可能再次成为未知单播并被泛洪。
交换机根据目标 MAC 执行三种基本动作:
“泛洪”不是把帧发送到整张互联网,而是发送到当前 VLAN 中除入口端口外的合适端口。VLAN 划定了二层泛洪的边界。
3. 冲突域与广播域
早期集线器把收到的电信号复制到所有端口,所有设备共享同一个冲突域。现代全双工交换以太网中,每个交换机端口通常是独立冲突域,不再运行传统 CSMA CD 竞争机制。
广播域则是广播帧能够到达的范围。默认情况下,一台二层交换机上的同一 VLAN 属于一个广播域。路由器或三层接口不会普通地转发二层广播,因此可以隔离广播域。
| 设备或机制 | 冲突域 | 广播域 |
|---|---|---|
| 集线器 | 所有端口共享 | 所有端口共享 |
| 二层交换机 | 每端口独立 | 同一 VLAN 共享 |
| VLAN | 不改变每端口冲突域 | 每个 VLAN 独立 |
| 路由器 | 每接口独立 | 每接口隔离 |
广播域过大会增加 ARP、邻居发现和服务发现等广播或组播流量的影响范围,也会放大环路故障。VLAN 可以控制范围,但过度拆分会增加地址规划、路由和策略复杂度。
4. VLAN 如何实现逻辑隔离
VLAN 允许在同一套物理交换网络上建立多个逻辑二层网络。同一 VLAN 内可以直接交换帧,不同 VLAN 之间必须经过三层转发。
Access 端口
Access 端口通常连接终端设备,只属于一个数据 VLAN。终端发送的普通无标签帧进入端口后,交换机在内部把它归入该 VLAN;帧离开 Access 端口时通常不携带 802.1Q 标签。
Trunk 端口
Trunk 端口用于交换机之间、交换机与路由器之间或连接支持 VLAN 的服务器。它可以承载多个 VLAN,通常使用 IEEE 802.1Q 标签标明帧属于哪个 VLAN。
802.1Q 标签中最重要的信息包括:
| 字段 | 作用 |
|---|---|
| TPID | 表示这是带 802.1Q 标签的帧 |
| PCP | 二层服务质量优先级 |
| DEI | 拥塞时的丢弃倾向标识 |
| VLAN ID | 12 位 VLAN 编号 |
VLAN ID 并不等于 IP 子网,但工程中通常让一个 VLAN 对应一个 IP 子网,以保持广播边界、网关和安全策略一致。
5. Native VLAN 与 VLAN 不一致
部分 Trunk 配置允许一个 Native VLAN 的帧不携带标签。链路两端若 Native VLAN 配置不同,同一无标签帧可能被归入不同 VLAN,造成流量串入错误广播域,甚至形成生成树异常。
常见 VLAN 配置问题包括:
- Access 端口被放入错误 VLAN;
- Trunk 两端允许的 VLAN 列表不一致;
- 一端为 Access,另一端为 Trunk;
- Native VLAN 不一致;
- VLAN 已创建但没有在上联链路放行;
- 虚拟化宿主机与物理交换机对标签处理的约定不一致。
排查时不能只看物理链路灯。端口 Up 只代表物理层或链路层部分条件满足,不代表帧被归入了正确 VLAN。
6. 不同 VLAN 如何通信
VLAN 10 与 VLAN 20 是两个独立广播域,二层交换机不会直接在它们之间转发帧。通信必须经过路由器子接口或三层交换机的 SVI。
源主机发送给异网段目标时,以太网帧的目标 MAC 是本 VLAN 网关,IP 包的目标 IP 仍是远端主机。路由设备进入 VLAN 20 后重新封装,目标 MAC 才变成主机 B 的 MAC。
跨 VLAN 不通时应同时检查:
- 终端地址、掩码和默认网关;
- Access VLAN 与 Trunk 放行列表;
- SVI 或路由器子接口状态;
- 三层路由表;
- ACL、防火墙和回程路径。
7. 二层环路为什么危险
为提高可用性,网络常部署冗余链路。如果二层拓扑中出现环路,而没有协议阻断冗余路径,广播帧和未知单播可能被交换机无限复制。
以太网帧没有类似 IP TTL 的逐跳生存时间。环路中的帧不会自然过期,会造成:
- 广播风暴占满链路和交换机处理能力;
- 同一源 MAC 从不同端口反复出现,MAC 表持续漂移;
- 大量重复帧到达主机;
- 交换机管理面失联,正常业务中断。
物理冗余本身不是错误,关键是必须由 STP、链路聚合或受控的多路径机制决定哪些链路可以转发。
8. STP 如何消除逻辑环路
生成树协议 STP 通过选举根桥、计算到根桥的最佳路径,并阻塞部分冗余端口,把有环物理拓扑变成无环逻辑树。
根桥如何选举
桥 ID 由优先级和 MAC 等信息组成,数值最小者成为根桥。如果所有设备保持默认优先级,根桥可能由 MAC 地址偶然决定,导致流量绕行。生产网络通常显式指定主根和备根。
端口角色
- 根端口:非根交换机到根桥开销最小的端口;
- 指定端口:某个网段上负责向根桥方向转发的端口;
- 备用或阻塞端口:为防止环路而暂不转发普通数据帧。
RSTP 在传统 STP 基础上改进了端口角色和握手机制,通常能更快收敛。收敛仍不是零时间,链路切换期间可能出现短暂丢包和 MAC 重新学习。
边缘端口保护
连接普通终端的边缘端口可以快速进入转发状态,但应配合 BPDU Guard。当边缘端口意外收到 BPDU 时,将其关闭或置为错误状态,以阻止用户私接交换机改变生成树拓扑。
9. 链路聚合与 LACP
两台设备之间有多条物理链路时,不能简单并联。链路聚合把多条兼容链路组成一个逻辑接口,在提供冗余的同时允许基于哈希分担流量。
LACP 用于协商聚合成员并检查对端一致性。成员端口的速率、双工、VLAN 模式和允许列表等关键参数必须兼容,否则端口可能无法加入聚合组。
链路聚合并不保证一个 TCP 连接同时使用全部成员带宽。设备通常根据源和目标 MAC、IP、端口等字段计算哈希,让同一流保持在同一成员链路上,以避免乱序。多流并发时才更容易利用聚合总带宽。
10. 二层安全风险
MAC 地址表泛洪
攻击者发送大量不同源 MAC 的帧,可能填满交换机 MAC 表,使更多单播变成未知单播并被泛洪。端口安全可以限制允许学习的 MAC 数量或绑定合法地址。
ARP 欺骗
ARP 本身缺少身份认证。攻击者发送伪造 ARP 响应,可能让主机把网关 IP 映射到攻击者 MAC。DHCP Snooping 与 Dynamic ARP Inspection 可以结合租约绑定验证 ARP 信息。
非法 DHCP 服务器
攻击者向客户端提供错误网关或 DNS。DHCP Snooping 将连接合法服务器的端口标记为可信,只允许可信方向发送服务器响应,并生成 IP、MAC、VLAN 与端口绑定信息。
这些能力依赖正确的拓扑和信任边界。把所有上联端口都设为可信会削弱保护效果,配置前应明确终端端口、服务器端口和交换机互联端口的角色。
11. 二层网络排障流程
第一步:物理层与接口计数
检查端口是否 Up、速率和双工是否一致,以及 CRC、丢包、错误帧、光功率等计数。CRC 持续增加常与线缆、光模块、接口或双工问题有关。
第二步:确认 VLAN 路径
沿主机到网关或对端的每一跳核对:接入口 VLAN、上联 Trunk 允许列表、Native VLAN、聚合口配置。只要一段没有允许目标 VLAN,帧就无法通过完整路径。
第三步:检查 MAC 学习
确认交换机是否在预期 VLAN 和端口学到主机 MAC。如果同一 MAC 在多个端口间快速移动,应优先怀疑环路、虚拟机迁移配置或错误聚合。
Linux 主机侧可使用:
ip link
ip -s link
ip neigh
bridge link
bridge vlan show
tcpdump -eni any arp
交换机命令因厂商不同而异,核心信息通常包括接口状态、VLAN、MAC 地址表、生成树、聚合组、错误计数和日志。
12. 常见现象与定位方向
| 现象 | 常见原因 | 优先检查 |
|---|---|---|
| 接口 Up 但无法获取地址 | VLAN 错误、DHCP 路径或安全策略 | Access VLAN、Trunk、DHCP Snooping |
| 同 VLAN 主机不能互通 | 端口隔离、MAC 学习或掩码错误 | MAC 表、VLAN、主机配置 |
| 同 VLAN 正常,跨 VLAN 失败 | 网关、SVI、路由或 ACL | 三层接口和回程路由 |
| 网络周期性整体抖动 | 环路、STP 重算或链路不稳定 | STP 日志、MAC 漂移、接口 flap |
| 单流无法跑满聚合带宽 | 哈希保持同一流在单成员链路 | 聚合哈希与多流测试 |
| 某些 VLAN 能通过 Trunk,另一些不能 | 允许列表不一致 | Trunk 两端配置 |
| 抓包看到大量重复广播 | 二层环路或异常终端 | STP 状态和广播来源 |
13. 常见误区
- 交换机只看目标 MAC,不学习源 MAC。 交换机根据源 MAC 学习位置,再依据目标 MAC 决定转发。
- 未知单播会被直接丢弃。 普通交换机通常在当前 VLAN 内泛洪未知单播。
- VLAN 之间完全不能通信。 它们不能直接二层转发,但可以通过受控的三层路由通信。
- 端口灯亮表示 VLAN 配置正确。 物理链路正常不能证明逻辑 VLAN 路径正确。
- 两条并行网线一定能提高带宽。 未配置聚合或 STP 时,可能形成环路或让一条链路被阻塞。
- STP 阻塞端口说明链路浪费,应关闭 STP。 阻塞是为了保留冗余同时避免二层环路。
- 聚合后单连接带宽等于所有成员之和。 单流通常只映射到一条成员链路。
14. 总结
交换机通过源 MAC 学习位置,根据目标 MAC 执行定向转发、过滤或泛洪。VLAN 把一套物理网络划分为多个广播域,Access 端口连接终端,Trunk 使用 802.1Q 承载多个 VLAN,不同 VLAN 之间则需要三层设备转发。
冗余链路带来可用性,也带来二层环路风险。STP 构建无环逻辑拓扑,链路聚合则把多条受控链路组成一个逻辑接口。排障时应沿着“物理接口、VLAN 路径、MAC 学习、STP 状态、三层网关”的顺序检查,避免把端口 Up 误认为整条通信路径已经正常。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)