交换与二层:VLAN、STP 与链路聚合
这一课你将能做到
- 在 Linux 上创建 VLAN 子接口并验证通信
- 讲清 STP 为什么存在、根桥怎么选、广播风暴长什么样
- 理解并配置链路聚合,说清它和 STP 的关系
为什么要学
二层是局域网的地基:VLAN 决定谁能和谁直接说话,STP 决定冗余链路怎么待命,聚合决定带宽和可靠性怎么叠加。K8s 网络插件里大量概念(bridge、veth、VLAN 模式)都来自二层。这一课把「同网段内到底发生了什么」讲透。二层还盛产「灵异故障」:时通时断、只有部分机器受影响,九成根因在这里,值得花一整课。
先建立图像
没有 VLAN:所有部门一个广播域
[交换机]═══ PC-A(财务) PC-B(研发) PC-C(访客) ← 互相都能"听见"ARP
有 VLAN:一台交换机切成几台逻辑交换机
[交换机]
├─ VLAN10 财务: 192.168.10.0/24
├─ VLAN20 研发: 192.168.20.0/24
└─ VLAN30 访客: 192.168.30.0/24
VLAN 之间不互通,必须经过三层 → 天然的策略边界
Trunk:一条线携带多个 VLAN(802.1Q 打标签)
交换机A ══ trunk ══ 交换机B [VLAN10|VLAN20|VLAN30 都在里头]
跟着做
步骤 1:Linux 上创建 VLAN 子接口
sudo modprobe 8021q # 加载 802.1Q 模块
sudo ip link add link eth0 name eth0.20 type vlan id 20
sudo ip addr add 192.168.20.5/24 dev eth0.20
sudo ip link set eth0.20 up
ip -d link show eth0.20 # 确认 vlan id 与状态
注意:对端交换机端口必须是 trunk 且放行 VLAN 20,否则带标签的帧进来就被丢。
步骤 2:理解 STP 的存在理由
为了冗余接两条线:
[SW1]═══════[SW2]
║ ║ ← 没有环路控制 = 广播风暴:广播帧绕圈复制,
[SW3]═══════[SW4] 交换机 CPU 拉满,几秒瘫痪全网
STP 的做法:逻辑上堵住一个端口(Blocking),主链路挂了再放开
真机命令(Cisco 风格):
show spanning-tree # 根桥、本机角色、端口状态
show spanning-tree root # 当前根桥
步骤 3:链路聚合(bonding)
两条 1G 线绑成一个 2G 逻辑口(LACP 协商):
优点1:带宽叠加 优点2:单线故障不断流
注意:聚合口被当成"一个口"参与 STP,不会被误杀
Linux 上:
sudo modprobe bonding
sudo ip link add bond0 type bond mode 802.3ad
sudo ip link set eth1 down && sudo ip link set eth2 down
sudo ip link set eth1 master bond0 && sudo ip link set eth2 master bond0
cat /proc/net/bonding/bond0 # 查看协商状态与成员口
步骤 4:排二层故障三板斧
ip neigh # ARP 通不通(同网段第一现场)
bridge fdb show # 本机桥接 MAC 表
ethtool eth0 # 协商速率 / 双工 / 链路状态
讲清楚要点
- VLAN 隔离的是广播域,不是安全域:真隔离要靠三层 ACL/防火墙;「VLAN 一划就安全」是常见误区。
- 802.1Q 标签 4 字节,插在源 MAC 之后,VLAN ID 12 位共 4094 个可用;Native VLAN 不打标签,两端不一致是经典故障。
- STP 解决「要冗余但不能有环」的矛盾:代价是收敛时间(传统 STP 30-50 秒,RSTP 秒级,MSTP 还能按 VLAN 组做负载分担)。
- 链路聚合的前提:两端同速率双工、同模式(LACP 对 LACP)、哈希一致;否则丢包或单活。
- 二层故障特征:同网段不通但 IP/掩码都对 → 先查 VLAN 与端口模式,再查 MAC 表,最后查 ARP。
- 二层安全基线:接入层开 DHCP Snooping(只信任上联口)防私接 DHCP,配 DAI(动态 ARP 检测)防 ARP 欺骗,再加端口安全限 MAC 数——三件套是企业网接入层的标配。
你可能会懵的地方
-
交换机怎么知道一个 MAC 在哪个口? 收到帧时把「源 MAC + 入端口」记进 CAM 表(学习);转发时查表,查不到就向本 VLAN 所有端口泛洪。
-
VLAN 之间怎么通信? 必须走三层:单臂路由、三层交换机 SVI 接口,或防火墙。这正是上一课路由内容的用武之地。
-
STP 把端口堵了,冗余不是白做了? 平时堵、故障时开,用「平时闲置」换「故障秒切」;MSTP 还能让不同 VLAN 组走不同链路,把闲置变成负载分担。
-
K8s 里也有这些概念吗? 有。CNI 的 bridge/VLAN 模式就是 Linux bridge + VLAN;同节点 Pod 通信是二层,跨节点靠路由;Service 的负载均衡是再上一层抽象。所以二层知识不是老古董,是看懂 CNI 报错日志的钥匙。
-
端口安全是什么? 限制一个口能学到的 MAC 数量(如接 PC 的口只许 1 个),防私接小交换机与 MAC 仿冒,是接入层安全基线。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
| 两台交换机直连两条线不开 STP/聚合 | 广播风暴全网瘫 | 配 LACP 聚合,或确认 STP 生效 |
| 两端 Native VLAN 不一致 | 跨交换机同 VLAN 不通且难查 | 统一 Native VLAN 或全部打标签 |
| 用 VLAN 替代防火墙 | VLAN 间一路由就互通 | 隔离靠三层策略,VLAN 只分域 |
| 聚合两端一边 on 一边 LACP | 部分流量黑洞 | 协议模式两端必须一致 |
| 终端接入口配成 trunk | 带标签的帧终端收不了 | 终端永远 access 口 |
| 边缘端口不配 PortFast | 插网线要等 30 秒才通 | 接终端的口开 PortFast 跳过收敛 |
| 核心不手动指定 STP 根桥 | 选举随机,拓扑不可控 | 把核心优先级调小固定为根 |
| 不开 DHCP Snooping | 私接路由器给终端发错误网关 | 只信任上联口,压制接入侧 DHCP |
卡点急救
- VLAN 子接口配了不通:核对本端 ID 与对端 trunk 放行列表;
tcpdump -i eth0 -e vlan 20看帧是否带标签。 - 交换机 CPU 飙高、广播暴涨:疑似环路,看 STP 拓扑变化日志与各端口广播计数,先拔可疑线止血再查根因。
- 聚合带宽没翻倍:LACP 按流哈希,单条 TCP 流永远走一条线;用
iperf3 -c 服务器 -P 4多流并发才测得出叠加,必要时抓包确认哈希是否把流分到了不同成员口。
面试常问
-
STP 根桥选举规则? 比较桥 ID(优先级 + MAC),越小越优;根桥所有端口都是指定端口。生产上应手动把核心交换机优先级调小指定为根,避免选举随机。
-
Access 口和 Trunk 口的区别? Access 属于一个 VLAN、进出剥标签,接终端;Trunk 携带多 VLAN、打 802.1Q 标签,接交换机或虚拟化宿主机。
-
链路聚合和 STP 什么关系? 聚合把多条线视为一个逻辑口,STP 以逻辑口为单位计算;聚合口要么整体转发要么整体阻塞——所以聚合既加带宽又不会被 STP 误杀。
自测三问
- 同一台交换机上 VLAN10 的主机能给 VLAN20 发广播吗?
- STP 的端口角色有哪些?RSTP 快在哪?
- 为什么说「VLAN 划分不等于安全隔离」?
小结一句话
二层三件套:VLAN 分域、STP 防环、聚合加宽——一切为了「可扩展的可靠性」。
延伸
- IEEE 802.1Q 官方标准页
- 下一课:无线网络——WiFi 标准、WPA3 与漫游。