之前的解析中,关于“如何在真实世界看见 VLAN”的部分确实过于简略,更像是“功能介绍”而非“实操指南”。

现在,让我们专门围绕这个核心主题,从 Linux 命令行操作Wireshark 抓包验证,展开一篇完整、详尽的实战文章。这篇文章将完全以“手把手带你做一次验证”的视角来组织。
在这里插入图片描述


亲密的网络旅程番外篇:亲手“造”出一个 VLAN 标签——从 Linux 命令行到 Wireshark 抓包的全流程实战

引言:理论再好,不如亲手验证

我们在前面的章节中,深入理解了 802.1Q VLAN 的机制,知道了它通过在以太网帧中插入一个 4 字节的标签,将单根物理网线划分成多个逻辑网络。

但是,这些标签真的存在吗?

还是说,它们只是教科书里的理论模型?当你打开 Wireshark 时,你真的能“亲眼看到”那个 4 字节的“身份证”吗?

答案是肯定的。但仅仅看截图是不够的。你需要亲手操作——亲手 “造” 一个 VLAN 标签,亲手 “发” 一个带有 VLAN 标签的数据包,再亲手 “抓” 到它、“解析” 它。

这一章,我们就来做这件事。我们不需要昂贵的交换机,不需要复杂的配置。你只需要一台装有 Linux 系统(如 Ubuntu、CentOS)的电脑,以及 Wireshark 即可。

让我们开始吧。


第一部分:准备工作——环境与工具

1.1 你需要什么?
  • 一台 Linux 机器:你可以是实体机,也可以是虚拟机(如 VirtualBox、VMware)。推荐使用 Ubuntu 或 CentOS。
  • Wireshark:用于抓包和解析数据。在 Linux 中,可以通过 sudo apt install wireshark(Ubuntu)或 sudo yum install wireshark(CentOS)安装。
  • 网络接口:你需要一个可用的物理网卡或虚拟网卡,比如 eth0ens33。接下来的操作会在一个 独立的接口 上进行,不会影响你的正常上网。
1.2 确认你的网络接口

首先,查看你当前可用的网络接口。打开终端,输入以下命令:

ip link show

你会看到类似这样的输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:ab:cd:ef brd ff:ff:ff:ff:ff:ff

在这个例子中,ens33 是你的主物理网卡。我们将使用它来创建 VLAN 接口。注意: 确保你的网卡处于 UP 状态(即已连接并启用)。


第二部分:Linux 中的“魔法”——vconfig 命令详解

我们之前在理论中提到了 vconfig。现在,让我们实地使用它。

2.1 安装 vconfig

在 Ubuntu/Debian 系统中,vconfig 属于 vlan 包,需要额外安装:

sudo apt install vlan

在 CentOS/RHEL 系统中,它通常包含在 vconfig 包中:

sudo yum install vconfig

安装完成后,可以通过 vconfig -h 查看帮助信息,确认安装成功。

2.2 创建 VLAN 接口

假设我们要在物理网卡 ens33 上创建一个 VLAN ID 为 10 的虚拟接口。

输入以下命令:

sudo vconfig add ens33 10

这个命令做了什么?

  • vconfig:调用 VLAN 配置工具。
  • add:表示“添加”一个 VLAN 接口。
  • ens33:指定要依附的物理网卡。
  • 10:指定 VLAN ID(范围 1-4094)。

执行后,终端会返回:

Added VLAN with VID == 10 to IF -:ens33:-

此时,系统会在 ens33 上创建一个名为 ens33.10 的虚拟接口。

你可以再次运行 ip link show,你会发现一个新的接口出现了:

3: ens33.10@ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:ab:cd:ef brd ff:ff:ff:ff:ff:ff

注意:此时 ens33.10 的状态还是 DOWN(关闭),它还没有被激活。

2.3 激活 VLAN 接口

要让 ens33.10 真正工作,我们需要将它“激活”。

sudo ip link set ens33.10 up

或者使用:

sudo ifconfig ens33.10 up

现在再次运行 ip link show ens33.10,你会看到状态变成了 UP

3: ens33.10@ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:ab:cd:ef brd ff:ff:ff:ff:ff:ff

补充说明:你也可以使用 vlan 包中提供的另一个命令 vconfigset_flag 选项来激活接口,但 ip link set ... up 是更通用的方法。

2.4 给 VLAN 接口分配 IP(可选)

为了让这个 VLAN 接口能被“使用”,我们可以给它分配一个 IP 地址。

sudo ip addr add 192.168.10.1/24 dev ens33.10

或者:

sudo ifconfig ens33.10 192.168.10.1 netmask 255.255.255.0

注意:这个 IP 地址仅用于测试,它与物理网卡 ens33 的 IP 是 独立的。这意味着,你可以让 ens33 连接互联网,而 ens33.10 连接一个完全不同的 VLAN 网络。


第三部分:Wireshark 中的“读卡”——捕获并验证 VLAN 标签

现在,我们有了一个可以发送 VLAN 标签的接口 ens33.10。接下来,我们要用它发送一个数据包,并通过 Wireshark 捕获它,亲眼验证 VLAN 标签的存在。

3.1 启动 Wireshark 监听
  1. 打开 Wireshark(需要 root 权限或属于 wireshark 用户组)。
  2. 在接口列表中,选择你的物理网卡 ens33注意:不是 ens33.10,因为 VLAN 标签是在物理网卡上“实时”生成的,我们必须在物理层捕获它)。
  3. 点击“开始捕获”(蓝色的鲨鱼鳍图标)。
3.2 发送测试数据包

我们不需要发送复杂的 HTTP 请求,最简单的测试方法是使用 ping 命令。但 ping 通常使用 icmp 协议,我们需要确保它通过 ens33.10 接口发送。

打开另一个终端窗口,输入:

ping -I ens33.10 192.168.10.2

解释:

  • -I ens33.10:指定通过 ens33.10 接口发送数据包。
  • 192.168.10.2:假设这是一个在相同 VLAN 中的目标 IP(你可以使用你自己的测试 IP,或者将目标设为 192.168.10.255 进行广播)。

如果你没有目标 IP,也可以使用 arping 发送 ARP 请求(这种方式更简单,因为 ARP 帧通常较小):

sudo arping -I ens33.10 192.168.10.2

或者直接发送一个广播包:

ping -I ens33.10 -c 1 -b 192.168.10.255
3.3 在 Wireshark 中寻找“幽灵”

当你执行 pingarping 命令时,Wireshark 的窗口会迅速滚动,显示捕获到的数据包。

我们需要找到我们发出的那个数据包。由于我们使用 ens33.10 发送,且目标为 192.168.10.2,我们在 Wireshark 的过滤器中输入以下过滤条件:

icmp

或者(如果你只发了 ARP):

arp

观察:
在 Wireshark 的“数据包列表”窗格中,你应该会看到一个来自 192.168.10.1 发往 192.168.10.2 的数据包。

关键步骤:选中这个数据包,在“数据包详细信息”窗格(中间的窗口)中,展开 Ethernet II 这一行。

3.4 发现“VLAN 身份证”

Ethernet II 下面,你会看到类似这样的结构:

Ethernet II, Src: 00:0c:29:ab:cd:ef, Dst: ... 
    Destination: ...
    Source: ...
    Type: 802.1Q Virtual LAN (0x8100)

关键点:

  • Type: 802.1Q Virtual LAN (0x8100):这是 Wireshark 告诉你的重要信息——这不是一个普通的以太网帧,它包含 VLAN 标签。
  • 继续展开 802.1Q Virtual LAN 这一行,你会看到:
802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 10
    Priority: 0 (Best Effort)
    DEI: 0
    ID: 10 (VLAN ID)

“证据”出现了!

  • ID: 10:这正是我们在 vconfig 中指定的 VLAN 10。
  • PRI: 0:这是默认的优先级。
  • DEI: 0:这是一个可丢弃标志位。

结论:Wireshark 成功地解析出了这个 4 字节的 VLAN 标签。

3.5 深入底部:查看原始字节

在 Wireshark 的“数据包字节”窗格(最底部的窗口),你会看到原始的十六进制数据。在以太网头部之后,你应该能看到:

81 00 00 0a
  • 81 00:对应 0x8100,即 VLAN 标签的 TPID。
  • 00 0a0a(十进制为 10)是 VID,00 是 PCP + DEI。

这就是 VLAN 标签在物理线上的真实“模样”。这就是我们在理论中提到的“魔法 4 字节”。


第四部分:深入实验——验证不同 VLAN 的隔离性

为了更透彻地理解,我们可以做一个“控制变量”实验:在没有 VLAN 标签的情况下,看同一个数据包如何被解析。

4.1 发送不带 VLAN 标签的普通帧

首先,停止正在进行的 ping 操作。然后,使用物理网卡 ens33 发送一个普通的 ping 包:

ping -I ens33 192.168.1.1

(假设你的主网络 192.168.1.1 是你的网关)

在 Wireshark 中过滤 icmp,你会看到这个包。展开它的 Ethernet II 头部,你会发现:

Type: IPv4 (0x0800)

没有 0x8100,没有 VLAN 标签。它就是一个标准的以太网帧。

4.2 直观对比
帧类型 Type 字段 VLAN 标签 解释
标准以太网帧 0x0800 (IP) 这是最常见的普通数据包
VLAN 标记帧 0x8100 (VLAN) 4 字节 包含 VID=10,PRI=0

实验结论

  • 当你通过 ens33.10 发送数据时,Linux 内核在底层自动插入了 4 字节的 VLAN 标签。
  • 当你通过 ens33 发送数据时,Linux 内核插入的是标准的 IP 协议类型。
  • 这是通过 vconfig 创建的虚拟接口物理接口 之间的本质区别。

第五部分:还原“真实场景”——中间与右边的 Linux 命令

我们在理论中看到的那几行命令,现在可以完全理解了:

vconfig add eth1 2
ip link set vlan0002 up

这里 eth1 是物理接口,2 是 VID。执行后,系统会创建一个名为 vlan0002eth1.2 的虚拟接口。当你给这个虚拟接口配置 IP 并启用它后,它就像一条独立的“虚拟网线”,连接到 VLAN 2 中。

这个命令的经典应用场景:

  • 路由器/防火墙:一个物理网卡通过 VLAN 虚拟出多个接口,分别连接不同的“部门子网”,实现物理隔离。
  • 服务器:一台服务器通过不同的 VLAN 接口,同时连接“管理网络”和“业务网络”。
  • 虚拟化:在 KVM、VMware 等虚拟化平台中,宿主机通过 VLAN 接口将不同虚拟机的流量分离到不同的物理交换机上。

第六部分:总结——从“见证”到“创造”

今天,我们完成了一次完整的“理论→实践”闭环:

  1. 理论:我们知道 VLAN 标签是 4 字节的 0x8100 加上 VID。
  2. 工具:我们用 vconfig 在 Linux 中创建了 VLAN 接口。
  3. 发送:我们通过 pingarping 发送了测试数据包。
  4. 捕获:我们用 Wireshark 捕获了物理接口上的原始帧。
  5. 验证:我们亲眼看到了 0x8100 和 VID=10 的真实存在。

核心洞见:
VLAN 标签并不是一个“理论概念”,也不是 Wireshark 为了显示方便而“编造”的。它是一个真实存在的、可观察、可操作的 4 字节数据。当你理解了它的生成方式(vconfig)和解析方式(Wireshark),你就真正掌握了 VLAN——它不再是书本里的图,而是你手中的工具。

下一步:
你可以尝试修改 VID,比如 vconfig add ens33 20,再重复一次上面的步骤,看看 Wireshark 中显示的 ID 会不会变成 20。当你能够反复验证这个过程时,你就真正掌握了 VLAN 的“灵魂”。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐