交换机与 VLAN
你有没有想过:为什么在公司局域网里,你的电脑能直接访问隔壁工位的打印机,却不用经过路由器?
答案就是交换机——它是局域网的核心设备,负责在同一网络内高效转发数据。
从集线器到交换机:局域网设备的演进
集线器(Hub):老古董
集线器工作在物理层,把接收到的信号复制到所有端口。就像扩音喇叭,你说的任何话,所有人都能听到。
缺点:
- 不管目标是谁,数据发给所有人
- 同一时间只能有一台设备发送数据(碰撞域)
- 带宽利用率低,安全性差
交换机(Switch):智能转发
交换机工作在数据链路层,根据 MAC 地址转发数据。它会「学习」每个 MAC 地址在哪个端口,只把数据发到目标设备所在的端口。
优点:
- 每个端口独享带宽
- 根据 MAC 地址精确转发,效率高
- 隔离碰撞域
集线器模式:
电脑A ──┐
├──[HUB]── 所有数据广播到所有端口
电脑B ──┘
交换机模式:
电脑A ──[SWITCH]──[端口1]── 电脑A
│ [端口2]── 电脑B
│ [端口3]── 打印机
电脑B ──────┘交换机的工作原理
MAC 地址学习
交换机内部维护一张 MAC 地址表(也叫 CAM 表),记录「MAC 地址 → 端口」的映射。
初始时表是空的,每当收到一个帧,就学习源 MAC 地址和收到该帧的端口。
bash
# 查看交换机的 MAC 地址表(模拟输出)
$ show mac address-table
VLAN Mac Address Type Ports
---- ----------- ---- -----
1 08:00:27:3B:59:D1 DYNAMIC Gi0/1
1 08:00:27:3B:59:D2 DYNAMIC Gi0/2
1 08:00:27:3B:59:D3 DYNAMIC Gi0/3帧转发流程
收到数据帧后,交换机的处理流程:
1. 检查以太网帧的合法性(CRC 校验)
2. 提取源 MAC 地址,学习(记录「从哪个端口学到的」)
3. 提取目的 MAC 地址
4. 查 MAC 地址表:
- 如果表中能找到目的 MAC → 从对应端口转发
- 如果表中找不到目的 MAC → 广播(泛洪)到所有端口(除了入端口)
5. 更新 MAC 地址表的 TTL转发方式
1. 直接转发:检查 MAC 地址表,立即从对应端口发出
2. 存储转发:先把整个帧收到缓冲区,校验 CRC,没问题再转发(更可靠但延迟高)
3. 碎片转发:收到前 64 字节就转发(前 64 字节已经能判断帧是否有效)现代交换机主要用直接转发和存储转发,根据场景选择。
VLAN:虚拟局域网
随着网络规模扩大,一个部门的电脑可能散布在不同的交换机上——这时候就需要 VLAN。
什么是 VLAN?
VLAN(Virtual Local Area Network)是在交换机上逻辑划分广播域的技术。不需要物理改动,就能把不同房间、不同楼层的电脑划到同一个「虚拟局域网」。
没有 VLAN:
交换机 A ── 财务部电脑 1
── 市场部电脑 2
── 技术部电脑 3
→ 所有电脑在同一个广播域,广播包互相干扰
有 VLAN:
交换机 A ── [VLAN 10: 财务部] 电脑 1
── [VLAN 20: 市场部] 电脑 2
── [VLAN 30: 技术部] 电脑 3
→ 每个 VLAN 是独立的广播域,财务部听不到市场部的广播VLAN 的优势
- 隔离广播域:减少不必要的广播流量
- 提高安全性:不同 VLAN 之间默认不能直接通信
- 简化管理:调整网络拓扑不需要物理布线
- 降低成本:减少交换机的物理数量
VLAN 标签:802.1Q
跨交换机传递 VLAN 信息需要打标签。IEEE 802.1Q 是标准协议:
普通以太网帧:
┌──────────┬────────────┬──────────┬──────────┬────────┬───────────┐
│ 前导码 │ 目的 MAC │ 源 MAC │ 类型 │ 数据 │ CRC │
└──────────┴────────────┴──────────┴──────────┴────────┴───────────┘
802.1Q 标签帧:
┌──────────┬────────────┬──────────┬─────────────┬──────────┬────────┬───────────┐
│ 前导码 │ 目的 MAC │ 源 MAC │ 802.1Q 标签 │ 类型 │ 数据 │ CRC │
│ 8 字节 │ 6 字节 │ 6 字节 │ 4 字节 │ 2 字节 │ │ 4 字节 │
└──────────┴────────────┴──────────┴─────────────┴──────────┴────────┴───────────┘
↑
┌───────────────────────────┐
│ TPID(2B) │ TCI(2B) │
│ 0x8100 │ VLAN ID + 优先级 │
└───────────────────────────┘802.1Q 标签在原始帧的「类型」字段前插入 4 字节,包含:
- TPID:标签协议标识,固定
0x8100 - TCI:标签控制信息,包括 VLAN ID(12 位,支持 4096 个 VLAN)和优先级(3 位)
VLAN 间路由
不同 VLAN 之间默认不能通信,需要三层交换或路由器来实现路由。
┌──────────────────────────────────────────────────────────┐
│ 三层交换机 │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ VLAN 10 │ │ VLAN 20 │ │
│ │ 192.168.1.x │ │ 192.168.2.x │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ └───────────┬───────────┘ │
│ │ │
│ [Switch Chip] ← 硬件转发 │
│ [Router Chip] ← VLAN 间路由 │
└──────────────────────────────────────────────────────────┘实际应用场景
场景一:企业网络架构
核心层交换机 ── 汇聚层交换机 ── 接入层交换机
│
├── VLAN 10(财务)
├── VLAN 20(技术部)
└── VLAN 30(访客)- 接入层:连接终端设备,配置 Access 端口
- 汇聚层:汇总接入层流量,配置 Trunk 端口
- 核心层:高速转发,连接服务器和出口路由器
场景二:端口类型
bash
# 交换机的 VLAN 配置示例(Cisco 风格)
# 创建 VLAN
vlan 10
name Finance
# 配置 Access 端口(连接电脑)
interface GigabitEthernet0/1
switchport mode access
switchport access vlan 10
# 配置 Trunk 端口(连接另一台交换机)
interface GigabitEthernet0/24
switchport mode trunk
switchport trunk allowed vlan 10,20,30场景三:VLAN 端口隔离
有时同一 VLAN 内也需要隔离——比如在酒店或企业,阻止两个相邻房间的电脑直接通信(防私接路由器、ARP 欺骗等)。
bash
# 端口隔离组
interface GigabitEthernet0/1
switchport protected # 该端口与其他 protected 端口隔离常见问题
广播风暴
大量广播帧在网络中循环转发,导致网络瘫痪。
原因:
- 网络环路(交换机之间形成环路)
- 网卡故障持续发送数据
- 蠕虫病毒扩散
解决方案:生成树协议(STP)自动阻塞冗余链路
MAC 地址漂移
同一个 MAC 地址在不同端口反复出现,可能是:
- 交换机之间有环路
- 有人在进行 MAC 地址欺骗攻击
- 服务器做了网卡的 LACP 绑定(正常现象)
面试追问方向
- 交换机和路由器的区别是什么?各工作在 OSI 的哪一层?
- 交换机是如何学习 MAC 地址的?
- 什么是 VLAN?为什么需要 VLAN?
- 802.1Q 标签的作用是什么?它是如何加到帧里的?
- 什么是 Trunk 端口和 Access 端口?
- 如何实现 VLAN 间的通信?
- 什么是广播风暴?如何避免?
