1. 核心痛点:物理隔离的“昂贵”与“僵化”
在 VLAN 出现之前,网络隔离只能靠物理手段:
-
场景:公司有“财务部”和“工程部”,为了安全,必须把它们隔开。
-
旧方案:
- 买两台独立的交换机。
- 拉两套独立的网线。
- 财务部的电脑插交换机 A,工程部的插交换机 B。
-
缺点:
- 成本极高:每增加一个部门,就要买一堆新设备。
- 移动困难:如果财务部员工搬到了工程部所在的楼层,他必须把网线拔了,重新拉到财务部的交换机上,否则就断网或泄密。
- 端口浪费:一台交换机 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 个字节:
| 字段 | 长度 | 名称 | 含义 |
|---|---|---|---|
| TPID | 2 Bytes | Tag Protocol Identifier | 标识符。固定为 0x8100。告诉交换机:“嘿,我是个带标签的包,别把我当普通包处理!” |
| PCP | 3 Bits | Priority Code Point | 优先级。用于 QoS (服务质量),决定谁先排队 (0-7 级)。 |
| DEI | 1 Bit | Drop Eligible Indicator | 丢弃指示。网络拥塞时,标记为 1 的包可以先被丢弃。 |
| VID | 12 Bits | VLAN Identifier | VLAN ID。核心字段! 范围 0-4095。 - 0: 优先级帧,无 VLAN ID。 - 1: 默认 VLAN (通常不可用)。 - 2-4094: 可用 VLAN。 - 4095: 保留。 |
关键点:因为 VID 只有 12 bit,所以 =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 通信流程
-
PC-A 发送数据:
- PC-A 构造普通帧:
Src: MAC_A, Dst: MAC_B, Data: ...(无 Tag)。 - 发送给 SW1。
- PC-A 构造普通帧:
-
SW1 处理 (Ingress) :
- Port 1 收到无 Tag 帧。
- 查配置:Port 1 是 Access VLAN 10。
- 动作:在帧头插入 802.1Q Tag (VID=10) 。
- 内部转发:查找 MAC 地址表,发现 MAC_B 在 Trunk 端口上。
-
SW1 发送 (Egress to Trunk) :
- 检查 VLAN 10 是否允许通过 Trunk?是。
- 动作:保留 Tag,将带 Tag 的帧发送给 SW2。
- 线路上流动的数据:
... | 0x8100 | VID=10 | ...
-
SW2 处理 (Ingress from Trunk) :
- 收到带 Tag (VID=10) 的帧。
- 检查:VLAN 10 是否允许?是。
- 查找 MAC 地址表:MAC_B 在 Port 1 (Access VLAN 10)。
-
SW2 发送 (Egress to PC-B) :
- Port 1 是 Access VLAN 10。
- 动作:剥离 (Strip) Tag。
- 发送给 PC-B。
- 线路上流动的数据:
... (普通以太网帧,无 Tag) ...
-
PC-B 接收:
- 收到普通帧,完美解析。
- PC-B 的感觉:“我和 PC-A 直连了一样。”