当前位置: 首页 > news >正文

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

之前的解析中,关于“如何在真实世界看见 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 确认你的网络接口

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

iplinkshow

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

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包,需要额外安装:

sudoaptinstallvlan

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

sudoyuminstallvconfig

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

2.2 创建 VLAN 接口

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

输入以下命令:

sudovconfigaddens3310

这个命令做了什么?

  • 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真正工作,我们需要将它“激活”。

sudoiplinksetens33.10 up

或者使用:

sudoifconfigens33.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 地址。

sudoipaddradd192.168.10.1/24 dev ens33.10

或者:

sudoifconfigens33.10192.168.10.1 netmask255.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-Iens33.10192.168.10.2

解释:

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

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

sudoarping-Iens33.10192.168.10.2

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

ping-Iens33.10-c1-b192.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-Iens33192.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 的“灵魂”。

http://www.jsqmd.com/news/1013231/

相关文章:

  • 2026 广州空调维修 线路老化检修 家电上门服务 官方甄选指南 - 金修达家庭维修
  • Any Listen跨平台音乐播放服务完整部署指南
  • 推广手机流量卡平台首选172号卡,佣金高,一级代理注册教程全讲解【附官方推荐码60000】 - 172号卡推荐码60000
  • 如何免费解锁Cursor AI编程助手:完整的功能增强指南
  • 如何让经典MiniDisc设备重获新生:Platinum-MD完整使用指南
  • 3步高效配置阅读APP书源:一站式解锁海量小说资源的智能指南
  • Android Studio中文界面切换终极指南:5分钟让开发工具说中文
  • 终极指南:3步解决Xbox手柄在macOS上的完整连接方案
  • 对抗性演化:让AI在真实世界中自主进化鲁棒性
  • 终极重复文件清理指南:使用dupeGuru释放宝贵存储空间
  • 从零到一:基于ijkplayer打造你自己的高性能播放器(附Android/iOS集成与FFmpeg定制指南)
  • OCLP-Mod终极指南:让老旧Mac焕发新生的完整教程
  • Cursor自动更新禁用终极指南:彻底解决试用限制问题
  • UI-TARS桌面版:零代码GUI自动化,用自然语言解放你的重复操作
  • 20254115实验四Python综合实践报告
  • MPC8260 MCC内部状态寄存器RSTATE/TSTATE深度解析与实战配置
  • MPC8306 eLBC控制器GPCM与FCM模式配置详解及实战
  • 5分钟解锁游戏无限可能:BepInEx插件框架完全指南
  • 深度剖析:FontCenter技术架构解析与AutoCAD字体管理自动化实现
  • 杰理之触摸开机后PB5无法控制的问题【篇】
  • 如何用Path of Building PoE2打造完美流放之路2角色:终极构建指南
  • 如何彻底解决微信聊天记录丢失问题:WeChatMsg完全免费终极方案
  • SillyTavern性能飞跃指南:5个简单技巧让AI聊天如丝般顺滑
  • 2026年6月亨得利中国官方售后网点全覆盖实地考察与真实性核验报告 - 亨得利中国服务中心
  • 如何在Linux系统上安装Realtek 8192FU无线网卡驱动:完整指南
  • 如何快速上手Ghostwriter:专注写作的Markdown编辑器完整指南
  • VutronMusic:当音乐播放器开始思考你的聆听习惯
  • WSL2 + Ubuntu 22.04 保姆级教程:手把手教你用 Conda 搞定 LLaMA-Factory 微调环境
  • 2026最新!铁岭老书古籍回收怎么选?本地三大靠谱商家最新指南,怀念书店登顶! - 速递信息
  • 重塑老旧Mac:OpenCore Legacy Patcher的架构革命与实施指南