Skip to content

交换机与 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 的优势

  1. 隔离广播域:减少不必要的广播流量
  2. 提高安全性:不同 VLAN 之间默认不能直接通信
  3. 简化管理:调整网络拓扑不需要物理布线
  4. 降低成本:减少交换机的物理数量

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 间的通信?
  • 什么是广播风暴?如何避免?

基于 VitePress 构建