IEEE 802.1Q —— VLAN:逻辑网络的基石

3 阅读4分钟

1. 核心痛点:物理隔离的“昂贵”与“僵化”

在 VLAN 出现之前,网络隔离只能靠物理手段

  • 场景:公司有“财务部”和“工程部”,为了安全,必须把它们隔开。

  • 旧方案

    • 买两台独立的交换机。
    • 拉两套独立的网线。
    • 财务部的电脑插交换机 A,工程部的插交换机 B。
  • 缺点

    1. 成本极高:每增加一个部门,就要买一堆新设备。
    2. 移动困难:如果财务部员工搬到了工程部所在的楼层,他必须把网线拔了,重新拉到财务部的交换机上,否则就断网或泄密。
    3. 端口浪费:一台交换机 48 个口,如果只给财务部用 5 个,剩下 43 个就闲置了,不能借给工程部用。

VLAN 的愿景
“能不能在同一台物理交换机同一根网线上,通过软件配置,划分出多个逻辑上完全隔离的虚拟交换机?让不同部门的数据互不可见,就像有看不见的墙一样?”


2. 原理深潜:那 4 个字节的魔法

VLAN 的核心思想非常简单:给以太网帧打个标签 (Tag)

2.1 802.1Q 标签结构

标准的以太网帧(Ethernet II)长这样:
[ 目标 MAC (6) | 源 MAC (6) | 类型/长度 (2) | 数据 (46-1500) | FCS (4) ]

802.1Q 帧 在 源 MAC 和 类型/长度 之间,硬生生插入了 4 个字节 的 Tag:

[ 目标 MAC (6) | 源 MAC (6) | [TPID (2) | TCI (2)] | 类型/长度 (2) | 数据 | FCS (4) ]

拆解这 4 个字节:
字段长度名称含义
TPID2 BytesTag Protocol Identifier标识符。固定为 0x8100。告诉交换机:“嘿,我是个带标签的包,别把我当普通包处理!”
PCP3 BitsPriority Code Point优先级。用于 QoS (服务质量),决定谁先排队 (0-7 级)。
DEI1 BitDrop Eligible Indicator丢弃指示。网络拥塞时,标记为 1 的包可以先被丢弃。
VID12 BitsVLAN IdentifierVLAN ID核心字段!  范围 0-4095。 - 0: 优先级帧,无 VLAN ID。 - 1: 默认 VLAN (通常不可用)。 - 2-4094: 可用 VLAN。 - 4095: 保留。

关键点:因为 VID 只有 12 bit,所以 212{2^{12}}=4096  。这就是为什么 VLAN 最多只有 4094 个可用 ID 的数学根源!这也是后来 VXLAN 诞生的直接原因。

2.2 端口模式:Access vs Trunk

这是初学者最容易晕的地方,也是理解 VXLAN VTEP 行为的基础。

2.2.1 Access 端口 (接入端口)

  • 角色:连接终端设备 (电脑、服务器、打印机)。

  • 特点

    • 只属于一个 VLAN
    • 进 (Ingress) :收到不带 Tag 的普通帧 -> 打上该端口的 PVID (Port VLAN ID) -> 内部转发。
    • 出 (Egress) :发送帧给终端前 -> 剥离 (Strip) Tag -> 变成普通以太网帧。
  • 终端感知:电脑完全不知道 VLAN 的存在,它收发的都是普通帧。

2.2.2 Trunk 端口 (干道端口)

  • 角色:连接交换机与交换机,或 交换机与路由器/防火墙

  • 特点

    • 允许多个 VLAN 通过。
    • 进 (Ingress) :收到带 Tag 的帧 -> 检查 Tag 是否在允许列表中 -> 保留 Tag 转发。
    • 出 (Egress) :发送帧时 -> 保留 (Keep) Tag (除了 Native VLAN)。
  • 作用:像一条高速公路,车道上跑着来自不同 VLAN 的车,每辆车都挂着自己的车牌 (Tag),对端交换机看到车牌才知道把它送到哪个房间。

2.2.3 Native VLAN (原生 VLAN)

  • 特殊规则:在 Trunk 链路上,属于 Native VLAN 的帧,不打 Tag 直接发送。
  • 目的:兼容那些不懂 802.1Q 的老设备。
  • 安全隐患:如果链路两端的 Native VLAN 配置不一致 (一端是 VLAN 1,一端是 VLAN 2),会导致 VLAN 跳跃攻击 (VLAN Hopping)  或流量泄露。最佳实践:将 Native VLAN 设置为一个 unused 的 ID,且两端必须一致。

3. 深度案例实录:一次跨交换机的 VLAN 通信

场景

  • SW1 和 SW2 通过一根网线相连。
  • PC-A (财务部, VLAN 10) 连接 SW1 的 Port 1 (Access VLAN 10)。
  • PC-B (财务部, VLAN 10) 连接 SW2 的 Port 1 (Access VLAN 10)。
  • SW1-SW2 连线:配置为 Trunk,允许 VLAN 10, 20 通过。

3.1 通信流程

  1. PC-A 发送数据

    • PC-A 构造普通帧:Src: MAC_A, Dst: MAC_B, Data: ... (无 Tag)。
    • 发送给 SW1。
  2. SW1 处理 (Ingress)

    • Port 1 收到无 Tag 帧。
    • 查配置:Port 1 是 Access VLAN 10。
    • 动作:在帧头插入 802.1Q Tag (VID=10)
    • 内部转发:查找 MAC 地址表,发现 MAC_B 在 Trunk 端口上。
  3. SW1 发送 (Egress to Trunk)

    • 检查 VLAN 10 是否允许通过 Trunk?是。
    • 动作保留 Tag,将带 Tag 的帧发送给 SW2。
    • 线路上流动的数据:... | 0x8100 | VID=10 | ...
  4. SW2 处理 (Ingress from Trunk)

    • 收到带 Tag (VID=10) 的帧。
    • 检查:VLAN 10 是否允许?是。
    • 查找 MAC 地址表:MAC_B 在 Port 1 (Access VLAN 10)。
  5. SW2 发送 (Egress to PC-B)

    • Port 1 是 Access VLAN 10。
    • 动作剥离 (Strip) Tag
    • 发送给 PC-B。
    • 线路上流动的数据:... (普通以太网帧,无 Tag) ...
  6. PC-B 接收

    • 收到普通帧,完美解析。
    • PC-B 的感觉:“我和 PC-A 直连了一样。”