Appearance
VLAN虚拟局域网
2026 大纲 三(六)4 VLAN 基本概念与基本原理。冲突域与广播域的定义在以太网篇,交换机的自学习与 STP 在交换机工作原理篇。
一、交换机切了冲突域,却没切广播域
上一节把冲突域切干净了:每个端口一个。但广播域一个都没切——交换机必须泛洪广播帧,因为它读不懂网络层、判断不出该不该转发。
广播域太大是个实实在在的麻烦,而且是两个层面的:
- 性能:ARP、DHCP 这类协议本来就要在以太网上传送大量广播帧,"在一个主机数量很大的以太网上传播广播帧,必然会消耗很多的网络资源";配置出错还会形成广播风暴。
- 安全:许多部门共享一个局域网,信息不隔离。
传统办法是用路由器隔离,但路由器端口少、成本高——为了把一层楼分成三个广播域去买一台多口路由器,账算不过来。VLAN 就是这个缺口的低成本解法。
⚠️ VLAN 不是一种新型局域网。 教材原话:"虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。" 底层仍是以太网、仍是以太网帧,只是多了一个 4 字节标记。
802.1Q 对它的定义是:"由一些局域网网段构成的与物理位置无关的逻辑组……每个 VLAN 的帧都有明确的标识符。" 一句话概括它做了什么:VLAN 把广播域从物理概念变成了逻辑概念。
还有一条边界要立住:VLAN 隔离广播域,不隔离冲突域。冲突域由交换机的端口结构决定(每端口一个),划不划 VLAN 都一样。
三种划分方式
| 划分依据 | 绑在哪一层 | 优点 | 缺点 |
|---|---|---|---|
| 端口(最常用) | 物理位置 | 配置简单,只需查"入端口属于哪个 VLAN",硬件开销最小 | 设备换端口后必须重新配置——VLAN 绑的是端口不是设备 |
| MAC 地址 | 数据链路层标识 | 设备移动后不需重配,VLAN 跟着设备走 | 需逐一登记全网 MAC,初始配置量大 |
| IP 地址 / 网段 | 网络层标识 | 不依赖物理位置,与三层规划天然对齐 | 二层交换机要读三层信息,开销大、效率低 |
绑的层次越高越不受物理位置约束,但交换机要往上"偷看"的层数就越多、越慢。 题面未特别说明时按基于端口划分理解。
二、802.1Q 标签:4 个字节插在哪、为什么插在那
普通以太网帧:
┌────────┬────────┬──────┬──────────┬──────┐
│目的地址│ 源地址 │ 类型 │ 数据 │ FCS │
│ 6 B │ 6 B │ 2 B │46~1500 B │ 4 B │
└────────┴────────┴──────┴──────────┴──────┘
802.1Q 帧:
┌────────┬────────┬──────────────┬──────┬──────────┬──────┐
│目的地址│ 源地址 │ VLAN 标签 │ 类型 │ 数据 │ FCS │
│ 6 B │ 6 B │ 4 B │ 2 B │46~1500 B │ 4 B │
└────────┴────────┴──────────────┴──────┴──────────┴──────┘
↓
┌──────────┬──────────┐
│ TPID │ TCI │
│ 0x8100 │ │
│ 2 B │ 2 B │
└──────────┴──────────┘
↓
┌──────────┬─────┬──────────┐
│ Priority │ CFI │ VID │
│ 3 位 │ 1位 │ 12 位 │
└──────────┴─────┴──────────┘⚠️ 教材对 TCI 前 4 位的表述是"前面 4 位实际上并没有什么作用,这里不讨论",上图按 802.1Q 标准补出这两个子字段。核心信息是:TCI 的后 12 位是 VID。
为什么必须插在源地址与类型字段之间? 因为那个位置恰好是类型字段本该出现的地方。接收方读到源地址之后的两个字节,只要判断一下:是 0x8100 ⇒ 后面还有 2 字节 TCI,真正的类型字段再往后;不是 ⇒ 这两字节本身就是类型字段。
用一个不可能与合法类型值冲突的常数占住那个位置,就构成了一个自解释开关——边收边判,不用回头。标签若放帧尾就做不到这一点。TPID 取 0x8100 也不是随手定的:它远大于 1500,不会与 802.3 的"长度"值混淆(回看以太网帧那条 0x0600 门限)。
插标签有两个直接后果,都是考点:
FCS 必须重算。 FCS 是对整个 MAC 帧算的 CRC,帧多了 4 字节、原值不再匹配。打标签和剥标签的端口各重算一次。
最大帧长 1518 → 1522 字节。 增加的 4 字节全在首部,数据字段仍是 46~1500 不变。不支持 802.1Q 的老设备会把 1522 字节的帧当超长帧丢弃。
VID 12 位可识别 4096 个,实际可用 1~4094——0 与 4095 是保留值,"4096"是编码空间而非可用数量。另外 VID 不等于端口号:VID 是逻辑编号,一个 VLAN 可含多个端口,一个 Trunk 端口可传多个 VLAN 的帧。
三、标签只活在汇聚链路上
| 链路 | 教材术语 | 连接谁 | 承载 | 帧的形态 |
|---|---|---|---|---|
| 接入链路 | access link | 交换机 ↔ 终端主机 | 一个 VLAN | 标准以太网帧(无标签) |
| 汇聚链路 | trunk link,又称干线链路 | 交换机 ↔ 交换机(或交换机 ↔ 路由器) | 多个 VLAN | 802.1Q 帧(带标签) |
标签由 Access 端口打和剥,Trunk 只透传,主机两端看到的永远是普通以太网帧——所以主机根本不知道自己的 VID,终端设备零改造。这与交换机取代集线器时"接入设备不需要做任何改动"是同一种思路:在网络设备侧做文章,不动端侧。
由此还推出一条容易被误解的事实:单台交换机内划 VLAN 根本不需要标签。标签只为跨交换机传输 VLAN 而存在;同一台交换机自己记得端口归属就够了。"划了 VLAN 帧就带标签"是错的。
四、跨 VLAN 为什么必须走三层
不同 VLAN 之间被交换机隔离,默认不能互通。教材点明了原因:A 在 VLAN-10、C 在 VLAN-20 且都连在同一台交换机上,"这种情况就复杂些了,因为这是在不同网络之间的通信"。
"不同的网络"这四个字是关键。 VLAN 划分出来的不只是不同的广播域,在 IP 规划上通常也是不同的网段;而"跨网段"按定义就是网络层的职责。这也解释了为什么不能靠"把两个 VLAN 都放到 Trunk 上"来互通——Trunk 只是携带多个 VLAN 的帧,标签进去什么样出来还是什么样,它不做 VLAN 之间的转换。
两种实现:单臂路由(路由器一个物理接口经汇聚链路连交换机,接口上配多个子接口各当一个 VLAN 的网关)与三层交换机(在芯片内部完成 VLAN 间转发,效率高得多)。
逐段追踪:二层地址被换掉、三层地址不变
S1 划分 VLAN 10(192.168.10.0/24)与 VLAN 20(192.168.20.0/24)。主机 A(192.168.10.5,VLAN 10,端口 3)访问主机 C(192.168.20.8,VLAN 20,端口 15)。S1 端口 24 经汇聚链路连路由器 R 的 G0/0,R 上配 G0/0.10(192.168.10.1)与 G0/0.20(192.168.20.1)作两个 VLAN 的网关。
第 1 步:A 判断目的是否同网段。 192.168.20.8 不在 192.168.10.0/24 内 → A 把帧发给默认网关 192.168.10.1。跨 VLAN 通信在主机侧就已经开始了:主机不知道 VLAN 的存在,它只知道"目的 IP 不在我的网段,要交给网关"。VLAN 划分必须与 IP 网段划分对齐,否则主机根本不会去找网关——这一条在下面的考点里还会再遇到一次。
第 2 步:A → S1(接入链路)。 A 先 ARP 拿到网关的 MAC(记为 192.168.20.8。
第 3 步:S1 内部。 从端口 3 收到,该端口属 VLAN 10 → 打上 VID = 10、重算 FCS;查表得目的 MAC 在端口 24(Trunk)→ 转发。
第 4 步:S1 → R(汇聚链路)。 带 802.1Q 标签 VID = 10。R 靠这个标签才知道该由哪个子接口收——G0/0.10 只接收 VID=10 的帧。子接口就是"用一个物理口冒充多个网关接口",标签是唯一的区分手段。
第 5 步:R 内部路由。 从 G0/0.10 收下、剥标签、交网络层;查路由表得 192.168.20.0/24 由 G0/0.20 直连;ARP 拿到
第 6、7 步:R → S1 → C。 汇聚链路上带 VID = 20;端口 15 是 Access 端口 → 剥掉标签、重算 FCS,C 收到的是普通以太网帧,完全不知道 VLAN 存在过。
| 段 | 链路类型 | 目的 MAC | 源 MAC | VLAN 标签 | 目的 IP |
|---|---|---|---|---|---|
| A → S1 | 接入 | 无 | 192.168.20.8 | ||
| S1 → R | 汇聚 | VID=10 | 192.168.20.8 | ||
| R → S1 | 汇聚 | VID=20 | 192.168.20.8 | ||
| S1 → C | 接入 | 无 | 192.168.20.8 |
三条可以带走的结论:① 目的 IP 全程不变,目的 MAC 每一跳都变;② 标签只存在于汇聚链路上;③ 流量在汇聚链路上走了一个来回——这就是单臂路由的瓶颈,实际占用带宽是流量的两倍,三层交换机把这一步搬进芯片内部就消掉了它。
本节小结
- VLAN 填的是"交换机切了冲突域却没切广播域"这个缺口;它不是新型局域网,只是局域网提供的一种服务,把广播域从物理概念变成了与物理位置无关的逻辑组。三种划分方式按端口、MAC、IP 排列,绑的层次越高越灵活、开销越大。
- 802.1Q 标签 4 字节,插在源地址与类型字段之间,位置由"源地址后两字节是不是
0x8100"这个自解释开关决定;两个直接后果是 FCS 必须重算与最大帧长 1518 → 1522(数据字段仍 46~1500)。VID 编码空间 4096,实际可用 1~4094。 - 打标签与剥标签都发生在 Access 端口,Trunk 只透传,主机完全无感,单台交换机内划 VLAN 根本不需要标签。同 VLAN 跨交换机可二层互通,不同 VLAN 必须经三层设备。
考点速记
本节在真题里被考过的形式有两道,问法不同但判据完全相同:帧(无论单播还是广播)只在源端口所属的那个 VLAN 内传播,跨不过去。
① 哪一条不会出现在某主机的 ARP 表里(cn-2024-35)。交换机按端口划了 3 个 VLAN,H4 在 VLAN 1(同 VLAN 的还有 H1、H2、H3),H5 在 VLAN 2,H6、H7 在 VLAN 3。四个选项是四条 <IP, MAC, TTL> 表项,答案是 VLAN 3 里那台主机的表项。
这道题设计得很好,坑在 IP 网段上:题面把全部七台主机都放在 192.168.3.0/24 这一个网段里。所以 H4 判断目的 IP 时会认为"和我同网段",于是直接发 ARP 请求去问 MAC——但 ARP 请求是广播帧,被 VLAN 挡住了,VLAN 3 的主机根本收不到,自然不会回应,也就永远进不了 H4 的 ARP 表。
"同一个 IP 网段"与"同一个广播域"是两回事,这道题就卡在这个缝上。反过来说,这也解释了为什么实际配置里 VLAN 划分必须与 IP 网段划分对齐——不对齐,主机既不会找网关(以为同网段)、ARP 又出不去,通信直接断掉。
② 某主机会收到哪几个帧(cn-2026-36)。交换机划了 VLAN A(H1、H2、H3)与 VLAN B(H4、H5、H6),四个候选帧问 H3 会收到哪些。逐个判:
| 帧 | 目的 / 源 | H3 收得到吗 | 为什么 |
|---|---|---|---|
| F1 | DA=H3,SA=H1 | 收到 | 同在 VLAN A 内的单播,H3 就是目的方 |
| F2 | DA=H4,SA=H5 | 收不到 | 两端都在 VLAN B,与 VLAN A 无关 |
| F3 | DA=广播,SA=H2 | 收到 | H2 在 VLAN A,广播帧在 VLAN A 内泛洪 |
| F4 | DA=H6,SA=H3 | 收不到 | H3 是发送方——帧从 H3 的端口进入交换机,泛洪不含入端口 |
答 F1、F3。
F4 是这道题唯一的难点,而且它考的不是 VLAN 而是交换机的转发规则:H6 在 VLAN B,交换机在 VLAN A 内查不到它 → 在 VLAN A 内泛洪 → 但泛洪"从除入端口外的所有端口发出",H3 自己那个端口正是入端口,所以 H3 收不到自己发出去的帧。看到"SA 是被问的那台主机"就该立刻警觉。
易错:同一个 IP 网段不等于同一个广播域。 VLAN 挡住广播帧,ARP 请求过不去,两台同网段但不同 VLAN 的主机永远互相不认识。
易错:问"谁收得到某个帧"时,先看这个帧是不是它自己发的。 泛洪不含入端口,发送方收不到自己的帧。
易错:VLAN 隔离广播域,不隔离冲突域。 冲突域由端口结构决定,划不划 VLAN 都一样。
易错:插标签后最大帧长 1522、FCS 要重算,但数据字段仍是 46~1500。 增加的 4 字节全在首部。
易错:VID 12 位的编码空间是 4096,实际可用 1~4094(0 与 4095 保留)。
易错:单台交换机内划 VLAN 不需要标签,标签只为跨交换机而存在;主机也永远看不到标签。
易错:Trunk 只携带多个 VLAN 的帧,不做 VLAN 间转换。 跨 VLAN 必须经路由器或三层交换机。
教材出处
- 谢希仁《计算机网络》(第 8 版)印刷 p104,3.4.3 虚拟局域网:VLAN 的两个动机——"一个以太网是一个广播域。在以太网上经常会出现大量的广播帧……我们经常使用的 ARP 和 DHCP 协议,也都要在以太网中传送很多的广播帧。在一个主机数量很大的以太网上传播广播帧,必然会消耗很多的网络资源",以及"许多部门共享一个局域网对信息安全不利";802.1Q 对 VLAN 的定义原文——"虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机属于哪一个 VLAN";以及那句关键界定——"虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网"。同页给出标签位置——"VLAN 标签字段的长度是 4 字节,插入在以太网 MAC 帧的源地址字段和类型字段之间。VLAN 标签的前两个字节总是设置为
0x8100"。 - 同书印刷 p105:VID 与帧长——"后面的 12 位是该虚拟局域网 VLAN 标识符 VID,它唯一地标志了 802.1Q 帧属于哪一个 VLAN。12 位的 VID 可识别 4096 个不同的 VLAN。插入 VLAN 标签后,802.1Q 帧最后的帧检验序列 FCS 必须重新计算";"由于用于 VLAN 的以太网帧的首部增加了 4 个字节,因此以太网的最大帧长从原来的 1518 字节……变为 1522 字节";判定机制——"当数据链路层检测到 MAC 帧的源地址字段后面的两个字节的值是
0x8100时,就知道现在插入了 4 字节的 VLAN 标签";划分方法——"例如,按交换机的端口划分,或按 MAC 地址划分。每台主机并不知道自己的 VID 值(但交换机必须知道这些信息)。这些主机通过接入链路发送到交换机的帧都是标准的以太网帧";接入链路与汇聚链路的命名——"每台计算机都是通过接入链路(access link)连接到以太网交换机的","连接两个交换机端口之间的链路称为汇聚链路(trunk link)或干线链路";跨交换机与跨 VLAN 的两种情形——"一个虚拟局域网的范围可以跨越不同的交换机"、"不插入 VLAN 标签,交换机 #2 就不知道应把帧转发给哪一个 VLAN"、"交换机 #2 在向 E 转发帧之前,要拿走已插入的 VLAN 标签,因此 E 收到的帧就是 A 发送的标准以太网帧",以及"虽然 A 和 C 都连接到同一个交换机,但它们已经处在不同的网络中"。