交换与二层
STP、链路聚合、MAC 表。
交换与二层: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 不打标签,两端不一致是经典故障。