系列文章入口如下:

网工进阶必看:《从TCP/IP到AI智算网络》系列总目录(持续更新)-CSDN博客

一、VLAN 全称是什么

VLAN = Virtual Local Area Network,虚拟局域网。

IEEE 802.1Q 是它的标准编号。简单说:在一条物理网线上,用"标签"把流量逻辑隔离成多个独立的广播域。


二、为什么需要 VLAN

上一篇文章我们讲了 ARP——设备靠广播"喊话"找 MAC 地址。但你想想:

如果一个公司 200 台电脑全接在同一台交换机上,每台开机都要发 ARP 广播、DHCP 广播、NetBIOS 广播……200 台机器每台每秒都在"喊",整个网络就是个菜市场。

现实中的痛点:

痛点

没有 VLAN 的世界

有 VLAN 之后

广播风暴​

所有人挤在一个广播域,广播包满天飞

广播被限制在各自的 VLAN 内,互不影响

安全隔离​

财务部、研发部、访客全在同一网段,谁都能访问谁

不同 VLAN 之间默认不通,像隔了堵墙

灵活组网​

换部门要重新布线、换交换机端口

逻辑上改个 VLAN ID 就行,物理位置不变

IP 地址浪费​

一个大局域网要塞几百个 IP

每个 VLAN 独立子网,IP 规划清晰

一句话总结:VLAN 解决的是"如何在共享的物理网络上,逻辑上划分出多个互不干扰的独立网络"的问题。


三、协议原理和交互过程

3.1 快递类比:一栋楼里的不同公司

想象一栋写字楼,只有一部电梯(物理交换机),但楼里租了三家公司:

  • A 公司(财务部):工位 101–110
  • B 公司(研发部):工位 201–210
  • C 公司(访客):工位 301–310

快递员(数据帧)坐电梯上楼,到了楼层怎么知道该送哪个公司?

现实做法:每个公司的快递贴上不同颜色的标签——红色给 A、蓝色给 B、绿色给 C。前台只看颜色,不是自己公司的直接拒收。

VLAN 就是给以太网帧贴"颜色标签"。

3.2 Ethernet II 帧怎么"贴标签"

回忆第 01 篇讲的 Ethernet II 帧结构:

802.1Q 的做法是:在"源 MAC"和"类型"之间,硬塞进去 4 个字节的标签(Tag):

TPID(Tag Protocol Identifier)= 0x8100:告诉交换机"我这个帧带 VLAN 标签了"。

TCI(Tag Control Information)​ 里面最关键的是 VID(VLAN ID)——占 12 位,所以 VLAN 编号范围是 1~4094(0 和 4095 保留)。

3.3 交换机怎么处理带标签的帧

交换机端口有三种角色:

Access 端口的工作流程(最常见):

PC1 (VLAN 10) ──→ [交换机 Access 端口]

                        │

                        ├─ 收到无标签帧 → 打上 VID=10 的标签 → 内部转发

                        │

                        ├─ 查 MAC 表 → 找到目的端口

                        │

                        └─ 从另一个 Access 端口发出 → 剥掉标签 → PC2 收到

Trunk 端口的工作流程(交换机互联):

交换机A ──Trunk── 交换机B

  │                   │

  ├─ VLAN 10 帧 ──→ 带标签(VID=10) ──→ 交换机B 按标签转发

  ├─ VLAN 20 帧 ──→ 带标签(VID=20) ──→ 交换机B 按标签转发

  └─ 所有 VLAN 共用一条物理链路

3.4 跨 VLAN 通信:为什么默认不通

关键结论:不同 VLAN 之间默认二层不通。

原因很简单:ARP 广播只在本 VLAN 内传播,不会跨 VLAN 转发。PC1(VLAN 10)喊"谁是 192.168.10.1",VLAN 20 里的设备根本听不到。

要跨 VLAN 通信,必须靠 三层设备(路由器或三层交换机)做 VLAN 间路由(Inter-VLAN Routing):

PC1 (VLAN10, 192.168.10.10)

        │

        ▼

   [交换机] ──Trunk── [路由器/三层交换机] ──Trunk── [交换机]

        ▲                                    │

        │                                    ▼

   PC2 (VLAN20,                    PC3 (VLAN20, 192.168.20.20)

   192.168.10.20)

路由器给每个 VLAN 配一个子接口(或三层交换机配 SVI),充当各 VLAN 的网关,数据包经网关转发。


四、VMware 实际抓包测试

4.1 实验环境准备

项目

配置

虚拟机

两台 Ubuntu 22.04 桌面版

VMware 网络

两台均设为"自定义:VMnet1(仅主机)"

Host A

IP: 192.168.95.128/24

Host B

IP: 192.168.95.130/24

抓包工具

Wireshark(装在 Ubuntu 上)

注意:VMware Workstation 的虚拟交换机(vmnet)不支持 802.1Q 标签透传给虚拟机。也就是说,你在 Ubuntu 里配了 VLAN 子接口,发出的带标签帧到了 VMware 虚拟交换机就会被剥掉或丢弃。

所以本实验的核心验证点是:在 Ubuntu 内用 Wireshark 观察 VLAN 子接口的行为,以及验证"同 VLAN 通、不同 VLAN 不通"的逻辑。

4.2 步骤一:创建 VLAN 子接口

在 Host A 上:

# 加载 8021q 内核模块

sudo modprobe 8021q

# 确认模块已加载

lsmod | grep 8021q

# 创建 VLAN 10 子接口(基于 ens33)

sudo ip link add link ens33 name ens33.10 type vlan id 10

# 给子接口配 IP

sudo ip addr add 192.168.10.128/24 dev ens33.10

# 启动子接口

sudo ip link set ens33.10 up

# 查看

ip addr show ens33.10

输出应类似:

在 Host B 上做同样操作,但 IP 改为 192.168.10.130/24。

4.3 步骤二:验证同 VLAN 互通(在VMware无法验证vlan接口能力) 

# 从 Host A ping Host B(通过 VLAN 子接口)

ping -I ens33.10 -c 1 192.168.10.130

结果分析:

  • 如果两台虚拟机直连同一 VMnet(仅主机模式),且 VMware 不剥离 VLAN 标签,则能通。
  • 实际情况:VMware Workstation 的虚拟交换机通常会剥离 802.1Q 标签,所以 ens33.10 发出的带标签帧到对端后被剥掉标签,对端 ens33.10 收不到带标签帧,ping 不通。你可以用 Wireshark 在发送端抓 ens33 接口验证——如果只能看到 Ethernet II 而没有 802.1Q 层,说明标签在发出去之前就被虚拟交换机处理了。
  • 但是ping ens33,非子接口ip确实通的,为什么呢?

核心问题:VMware底层网段冲突 + 标签被剥离

  1. 对端底层配了95网段:.130机器底层 ens33 配了 192.168.95.130/24,而 ens33.10 配了 192.168.10.130/24。
  2. 历史ARP已印证:上一轮.128机器上 arp -n 显示,它已经解析到了.130底层的MAC(00:50:56:37:cb:08)在 ens33(95网段)上,但10网段是 (incomplete)。
  3. VMware剥标签的致命影响:当.128通过 ens33.10(VLAN 10)发ARP广播时,VMware虚拟交换机剥离了802.1Q标签。对端收到无标签包后,因为底层 ens33 是通的(95网段),但内核期望 ens33.10 收到带标签的包,无标签包被底层接收后无法交给 ens33.10,导致10网段ARP永远无响应。

为什么底层95通,VLAN 10却不通?

  • 你的两台机器底层其实在同一个VMware虚拟网络(能互相ARP解析95网段)。
  • 但VLAN实验要求二层隔离。VMware Workstation的虚拟交换机不支持标签透传,导致:
    • 带标签发出 → 被VMware剥离 → 对端收到无标签 → 对端 ens33.10 收不到(因为它要标签) → ARP失败。
    • 对端底层 ens33 收到了,但IP是95网段,不处理10网段的ARP请求。

4.4 步骤五:清除 VLAN 子接口(实验完恢复)

sudo ip link delete ens33.10


五、故障排查

5.1 VLAN 不通的六大常见原因

故障现象

可能原因

排查方法

同 VLAN 内 ping 不通

Access 端口 VLAN ID 配错

检查端口 PVID 是否和终端 VLAN 一致

跨 VLAN 不通

没有三层路由/网关没配

检查路由器子接口或三层交换机 SVI 是否 UP

Trunk 链路不通

Trunk 允许的 VLAN 列表没包含目标 VLAN

show interfaces trunk 看 allowed VLANs

能 ping 通但抓不到标签

交换机 Access 端口发出时剥了标签

正常行为,Access 口对终端剥标签

虚拟机 VLAN 子接口不通

VMware 虚拟交换机剥离 802.1Q 标签

正常行为,VMware Workstation 不支持标签透传

ARP 显示 incomplete

对端不在同一 VLAN 或接口 DOWN

ip link show 确认子接口 UP,arp -n 看状态

5.2 排障速查流程

不通了?按这个顺序查:

1. 物理层:接口 UP 了吗?有 RUNNING 吗?

   → ip link show ens33

2. VLAN 子接口:创建了?UP 了吗?

   → ip addr show ens33.10

3. IP 配了吗?同网段吗?

   → ip addr show | grep inet

4. ARP 能解析吗?

   → arp -n (看有没有 MAC,状态是不是 REACHABLE)

5. 对端在同一 VLAN 吗?

   → 确认两端 VLAN ID 一致

6. 中间交换机 Trunk 放行了吗?

   → 检查 Trunk allowed VLAN 列表

5.3 一个真实排障案例

现象:两台服务器配了 VLAN 子接口,IP 同网段,但 ping 不通。

排查:用 Wireshark 抓 ens33 接口,过滤 vlan,发现发出的帧带 VLAN 10 标签,但对端交换机端口是 Access 口配的 VLAN 20。

原因:服务器发出的带标签帧(VID=10)到了 Access 端口,交换机期望的是无标签帧或 VID=20 的帧,直接丢弃。

解决:把交换机端口改为 Trunk,允许 VLAN 10 通过;或者服务器改为无标签模式(由交换机 Access 口打标签)。


六、总结

要点

说明

VLAN 是什么​

在一条物理链路上用 802.1Q 标签逻辑隔离出多个广播域

标签格式​

TPID (0x8100) + TCI(含 12 位 VLAN ID,范围 1-4094)

端口类型​

Access(连终端,剥标签)、Trunk(交换机互联,保留标签)

跨 VLAN 通信​

默认不通,需要三层路由(路由器子接口或三层交换机 SVI)

广播隔离​

每个 VLAN 是独立广播域,ARP 广播不跨 VLAN

VMware 限制​

Workstation 虚拟交换机不支持 802.1Q 标签透传,实验仅验证逻辑

下一篇预告

第 04 篇:LLDP(802.1AB)—— 交换机之间的"自我介绍协议"

VLAN 解决了"一台交换机隔出多个房间"的问题,但交换机之间怎么知道对端是谁、对端支持哪些 VLAN、链路带宽多少、邻居设备是什么型号?如果网络出故障,你总不能一台一台登录设备去查邻居关系吧。LLDP(Link Layer Discovery Protocol)就是让网络设备每隔几十秒自动"广播名片"的协议——不依赖 IP、不走 TCP/IP 栈,纯二层运作。下篇讲 LLDP 报文结构、与 CDP 的区别、VMware 里怎么模拟多交换机拓扑抓包观察邻居发现过程。


附录:命令速查

操作

命令

加载 802.1Q 模块

sudo modprobe 8021q

创建 VLAN 子接口

sudo ip link add link ens33 name ens33.10 type vlan id 10

删除 VLAN 子接口

sudo ip link delete ens33.10

查看 VLAN 配置

cat /proc/net/vlan/config

查看 VLAN 接口详情

cat /proc/net/vlan/ens33.10

抓 VLAN 包

sudo wireshark &(过滤条件填 vlan)

查看 ARP 表

arp -n

清 ARP 缓存

sudo ip neigh flush dev ens33

永久配置 VLAN(netplan)

在 /etc/netplan/*.yaml 中配置 vlans: 字段

查看接口状态

ip link show

查看 IP 配置

ip addr show

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐