模块五 · 链路层和局域网
VLAN:在一台交换机上划出多台
上一章说交换机不隔离广播域。那如果一栋楼里 500 台设备接在一堆交换机上,一个 ARP 广播就要打扰 500 台设备,怎么办?VLAN 就是答案。
本章要解决的问题:上一章说交换机不隔离广播域。那如果一栋楼里 500 台设备接在一堆交换机上,一个 ARP 广播就要打扰 500 台设备,怎么办?VLAN 就是答案。
本章的证据来源:⚠️ 本章没有历史实测记录。 本机连的是家用路由器内置的交换模块,没有开放管理接口;实测也确认本机 WLAN 网卡的高级属性里没有 VLAN 相关项。所以本章内容标注为标准/原理(IEEE 802.1Q),并在文中指明哪些是推断。
先从一个例子理解概念
办公电脑和访客电脑即使接同一台交换机,也可能需要分开。VLAN把“接在同一个盒子”与“处在同一广播范围”分开。
在二层分组:VLAN
VLAN(虚拟局域网)把交换网络分成不同广播域;可理解为同一个硬件里划出的通信分组,不是凭空多了一台实体交换机。
帧属于哪个组:标签
802.1Q标签携带VLAN编号等信息,使一条链路能区分多个组的流量。标签是帧格式里的字段,不是修改IP地址。
接终端与承载多组:Access和Trunk
常见Access接入口向终端提供单VLAN的无标签接入;Trunk干线口承载多个VLAN。是否带标签仍看配置,支持VLAN的服务器也可接Trunk。
二层分组与IP子网不同
VLAN决定二层广播范围;IP子网决定三层地址范围。常让一个VLAN对应一个子网便于管理,但这是设计习惯,不是同一个概念。
下面再用这些概念看原理、命令和结果。规范与官方资料列在本章末尾,类比只帮助理解,不代替协议规则。
问题:广播域太大了
先把问题说具体。
假设一栋办公楼有 200 台电脑,全部接在若干台交换机上,没有划分任何逻辑分组。那么:
- 任何一台电脑开机,一个 ARP 请求 → 被泛洪到全部 200 台
- 每台电脑都要收下这个帧、交给 ARP 模块处理、发现不是问自己、再丢掉
- 200 台设备各干一次无用功,每台设备的 CPU 都被无谓消耗
设备越多,这种打扰越频繁。而且广播域越大,广播风暴的破坏力也越大(上一章讲过)。
传统解决办法及其代价
| 办法 | 代价 |
|---|---|
| 把不同部门接到不同的物理交换机上 | 每个部门一台交换机,贵;部门调整时要重新拉线 |
| 拉更多网线做物理隔离 | 线缆数量爆炸,机房混乱 |
| 用路由器隔开 | 路由器端口少、价格高,而且每个网段都要占用一个物理口 |
这三种办法的共同问题是:隔离的粒度被"物理"绑死了。
VLAN 的思路:把隔离做成逻辑的
VLAN(Virtual LAN,虚拟局域网)的核心思想一句话:
具体做法:
每个端口分配一个 VLAN ID(比如 10、20、30)
同一个 VLAN 内的端口 → 属于同一个广播域
不同 VLAN 之间 → 二层完全隔离,互相看不到对方的广播效果:
- 不增加任何硬件,隔离粒度从"每台设备"降到"每个端口"
- 部门调整时,只要在交换机上改一下端口的 VLAN 归属,不用动线
- 转发表按VLAN或转发实例区分MAC学习范围;具体数据库组织取决于实现 —— 交换机在逻辑上变成了多台交换机
要跨越 VLAN 通信怎么办? 必须经过三层设备(路由器或三层交换机)。也就是说:常见设计让一个VLAN对应一个IP子网,但两者不是协议强制的一一关系。
Q 标签:4 个字节
问题来了:如果一根网线要从交换机连到另一台交换机,而这条线上要跑好几个 VLAN 的流量,接收方怎么知道每个帧属于哪个 VLAN?
答案是在帧里加一个标签。这就是 IEEE 802.1Q 标准定义的字段,一共 4 个字节:
| 字段 | 长度 | 作用 |
|---|---|---|
| TPID(标签协议标识) | 2 字节 | 固定值 0x8100,表示"这是一个带 VLAN 标签的帧" |
| PCP(优先级) | 3 位 | 用于 QoS,标记这个帧的优先级别 |
| DEI(丢弃资格) | 1 位 | 拥塞时是否可以优先丢弃 |
| VLAN ID | 12 位 | 属于哪个 VLAN |
标签插在哪里? 插在源 MAC 地址之后、类型字段之前:
不带标签: 目的 MAC | 源 MAC | 类型 | 数据 | FCS
带标签: 目的 MAC | 源 MAC | 802.1Q 标签 | 类型 | 数据 | FCS
└─ 多出来的 4 字节一个直接的连带影响:帧变长了
因为多了 4 个字节:
| 不带标签 | 带标签 | |
|---|---|---|
| 最小MAC帧长 | 64 字节 | 64 字节(保留原填充再加标签也可能是68) |
| 最大帧长 | 1518 字节 | 1522 字节 |
标签增加4字节控制信息,但可以占用原来的部分填充,最小长度不必随之增加4字节。 见IEEE 802.3as说明,第15、18页。这也是封装增加开销的例子 —— 和《全景与基础》模块讲的包头开销是同一回事,只是这次发生在链路层内部。交换机必须知道这个变化,否则会把带标签的合法帧当成超长帧丢掉。
VLAN ID 只有 12 位,所以理论上能表示 0~4095,其中 0 和 4095 保留,实际可用 4094 个 VLAN。
Access 口与 Trunk 口
这是 VLAN 配置里最实用的两个概念。
| 口类型 | 接什么 | 帧带不带标签 | 说明 |
|---|---|---|---|
| Access 口 | 终端设备(电脑、打印机) | 不带 | 交换机负责打标签/脱标签,终端完全感知不到 VLAN 存在 |
| Trunk 口 | 交换机与交换机之间 | 带 | 一条线承载多个 VLAN 的流量 |
Access端口通常用无标签帧服务单个VLAN中的终端。 这不是因为电脑一定不认识标签:不少网卡、驱动和操作系统支持VLAN插入/剥离及接口配置。Trunk可以连接服务器,native VLAN是否无标签需看配置。Intel Priority & VLAN
Trunk 口的意义:交换机 A 和交换机 B 之间往往只需要一根网线,就能同时承载办公区、服务器区、访客区三个 VLAN 的流量 —— 每个帧上的标签告诉对方"我属于哪个 VLAN"。
为什么本章没有实测
诚实地说明限制:
Get-NetAdapterAdvancedProperty -Name 'WLAN' | Where-Object { $_.DisplayName -match 'VLAN' }返回空 —— 本机无线网卡不暴露 VLAN 配置项。这只能说明该WLAN接口未暴露相关设置,不能推广到以太网卡;以太网卡可有VLAN卸载和标签配置。
实测二:Hyper-V 虚拟交换机支持 VLAN,但管理模块不可用。
本机的 vEthernet (WSL) 是 Hyper-V 虚拟交换机上的一个端口,虚拟交换机是支持 VLAN 的。但查询它需要 Hyper-V 的 PowerShell 模块:
Get-VMSwitch → 无法将"Get-VMSwitch"项识别为 cmdlet这台机器上没装该模块,所以查不到虚拟交换机的 VLAN 配置。
结论:VLAN 的机制是清晰的标准(IEEE 802.1Q),但要真正观察它,你需要能登录一台支持 VLAN 的交换机。本教程不编造实验数据。
常见误解
误解一:"VLAN 是为了安全"
主要目的是隔离广播域、简化网络管理。VLAN 之间要互通必须经过三层设备,这带来了一定的安全副作用(二层看不到别的 VLAN 的广播),但 VLAN 不是安全机制 —— 存在 VLAN 跳变(VLAN hopping)攻击,而且三层设备上如果不做访问控制,VLAN 之间可以随便互通。
误解二:"VLAN 需要专门的硬件"
现代交换机(包括很多家用路由器的交换模块)基本都支持 802.1Q。企业级交换机支持得更完整(比如 QinQ 双层标签)。
误解三:"VLAN 标签会一直跟着帧走"
常见交换机互联Trunk使用标签,配置VLAN的服务器接口也可收发标签;native VLAN等流量可能无标签。帧从 Access 口发给终端之前,标签会被摘掉。所以终端设备通常完全不知道 VLAN 的存在。
误解四:"同一台交换机上的设备一定在同一网段"
不一定。同一台交换机可以承载多个 VLAN,每个 VLAN 是独立的广播域,通常对应不同的 IP 子网。 自己所在的口属于哪个 VLAN,才是决定你在哪个网段的因素之一 —— 这也是"为什么我插上网线却上不了网"的常见原因之一(端口 VLAN 配错了)。
本章小结
| 结论 | 类型 |
|---|---|
| VLAN 在一台物理交换机上划出多个逻辑交换机 | 标准 |
| 同一 VLAN 内是一个广播域,不同 VLAN 二层隔离 | 标准 |
| 跨 VLAN 通信必须经过三层设备 | 标准 |
| 802.1Q 标签 4 字节,插在源 MAC 之后 | 标准 |
| VLAN ID 12 位,实际可用 4094 个 | 标准 |
| 单Q标签帧最小64、基本最大1522字节;增加标签不等于最小帧必增4字节 | IEEE帧格式 |
| 常见Access无标签,Trunk承载多个VLAN;标签行为还取决于native VLAN及配置 | 部署惯例 |
| 实测:本机 WLAN 网卡无 VLAN 属性,无法在本机观察 VLAN | 实测(反证) |
| 实测:Hyper-V 管理模块不可用,查不到虚拟交换机的 VLAN 配置 | 实测(反证) |
本机 以太网 3 的 MTU 1200 与 VLAN 无关,属于隧道封装开销 | 推断 |
自测题
6 题 · 先自己答,再展开对照
一栋楼有 300 台电脑接在交换机上。不划 VLAN 会有什么问题?
所有 300 台设备处在同一个广播域里。 任何一台设备发广播(比如 ARP 请求),都会被打扰到——每台都要收下帧、处理、发现不是问自己、再丢掉,白白消耗 CPU。而且广播域越大,一旦发生广播风暴,波及范围越大、越容易瘫痪。VLAN 标签占几个字节?加在帧的什么位置?
4 个字节,插在源 MAC 地址之后、类型字段之前。它的前 2 字节是固定值0x8100(TPID),后 2 字节里包含 3 位优先级、1 位丢弃资格和 12 位 VLAN ID。为什么 Access 口发出的帧不带标签?
Access端口通常用无标签帧向终端提供单VLAN接入,这是部署约定。支持VLAN的终端也能收发带标签帧,不能说电脑全部不认识802.1Q。同一台交换机上的两台电脑,能不能属于不同的 IP 子网?为什么?
能。 VLAN 划分的是广播域,而 IP 子网划分的是三层网段,两者是不同层次的概念。实践中通常让"一个 VLAN 对应一个子网"(便于管理),但它们并不强制绑定 —— 完全可以在一个 VLAN 里跑多个子网,或者一个子网跨越多个 VLAN(虽然后者很少见、也很麻烦)。带 802.1Q 标签的以太网帧,最小长度是多少?为什么不带标签时是 64?
最小仍可为64字节:18字节带标签头+42字节数据/填充+4字节FCS。若在64字节帧上直接插标签且保留原填充,会成为68字节;不要混淆构造过程和协议最小值。VLAN 能代替防火墙吗?
不能。 VLAN 提供的是二层隔离:不同 VLAN 的设备互相收不到对方的广播,也一般不能直接通信。但如果有一个三层设备(路由器/三层交换机)同时连着两个 VLAN,并且没有配置访问控制列表,那么两个 VLAN 之间是可以自由互通的。VLAN 是网络管理手段,不是安全边界。真正的安全需要防火墙规则和访问控制。
参考资料与适用范围
修订核对日期:2026-10-13。规则按所列协议与实现范围理解;文中的原始命令输出是历史观察,不表示本次重新实测。跨版本、代理/隧道及不同捕获位置需要另行核对。