
上一篇我们已经知道,交换机会从进入端口的源 MAC 地址中学习 MAC 地址表,并据此把已知单播帧定向转发到正确端口。这样一来,同一台交换机上的主机不必再像连接集线器时那样共享冲突域。
但还有一个问题:如果一台 48 端口交换机接入了公司所有部门,某台主机发出 ARP 请求等广播帧,交换机仍会把它泛洪到除入端口外的所有端口。MAC 地址表能缩小已知单播流量,却不能把广播流量按部门隔开。
这一篇仍位于 TCP/IP 五层模型的数据链路层。我们来理解 VLAN 如何在不额外铺设多套物理网络的前提下,把一台或多台交换机划分成多个彼此隔离的逻辑局域网。
一、交换机为什么还需要 VLAN?
先区分两个经常一起出现的概念:
- 冲突域:多个设备可能因同时发送而发生碰撞的范围。
- 广播域:一个二层广播帧能够传播到的范围。
在现代交换式以太网里,交换机的每个端口通常是独立冲突域;但在没有 VLAN 的普通二层交换网络中,所有端口仍属于同一个广播域。ARP 请求、DHCP 初始请求等广播帧会被交换机泛洪到这个广播域的各个端口。
网络规模变大后,这会带来三个直接问题:
-
广播流量泛滥:传统交换机网络中,广播帧(如ARP查询、DHCP请求)会穿透整个机构网络,既占用带宽又存在安全隐患。比如行政部门的财务数据广播可能被研发部门的Wireshark工具嗅探,导致商业机密泄露。
而VLAN技术可在单台交换机内划分多个"虚拟广播域",如将行政部门、研发部门分别标记为VLAN 10和VLAN 20,广播帧仅在本VLAN内传播,隔离效果等同于用路由器划分物理子网,但无需额外设备。
-
交换机资源浪费:当机构拥有10个5-10人的小组时,传统方案需部署10台第一级交换机,设备成本高昂且管理复杂。
而VLAN支持在单台高密度交换机(如96端口)上实现逻辑隔离。一台核心交换机,通过VLAN将不同项目组划分为独立网络,既节省物理空间又简化布线。这种"一台交换机、多个虚拟网"的模式,实现"一网多用"且互不干扰。
-
用户管理僵化:传统网络中,员工跨部门移动需重新插拔网线,属于多部门的用户更需复杂配置。
而VLAN通过"端口绑定+动态标签"实现逻辑迁移:管理员仅需在交换机配置中将用户端口从VLAN 10调整为VLAN 20,用户设备无需任何操作即可接入新部门网络。
VLAN 的目标不是让交换机"转发得更快",而是让交换机在二层转发时拥有一条额外规则:帧只应在同一个 VLAN 的端口之间传播。
二、VLAN 是什么:在逻辑上划分广播域
VLAN 是 Virtual Local Area Network 的缩写,中文通常译为虚拟局域网。它把一组端口或终端划入同一个逻辑局域网,而不要求它们物理上接在同一片连续的网线或同一台交换机上。
可以把一台交换机想象成一栋办公楼:物理端口像房间,交换机像走廊。没有 VLAN 时,广播相当于在整层楼广播通知;划分 VLAN 后,楼里出现了几道逻辑隔断,VLAN 10 的通知只会传到 VLAN 10,VLAN 20 的通知只会传到 VLAN 20。网线和交换机仍是原来的硬件,变化的是交换机对端口和帧的处理规则。
例如,把端口划分如下:
| 端口 | 连接设备 | 所属 VLAN |
|---|---|---|
| 1、2、5 | 研发部电脑 | VLAN 10 |
| 3、4、6 | 财务部电脑 | VLAN 20 |
此时,端口 1 上的主机发出 ARP 广播,交换机只会把它转发到 VLAN 10 中的端口 2、5,而不会发往 VLAN 20 的端口 3、4、6。
因此可以先记住两句话:
一个 VLAN 就是一个独立的二层广播域。
同一 VLAN 内的主机可以由二层交换直接通信;不同 VLAN 的主机若要通信,需要经过三层转发。
这里的"独立"是指二层转发与广播范围独立,并不表示不同 VLAN 的主机永远无法通信。后文会看到,它们可以通过路由器或三层交换机通信。
三、交换机如何知道一帧属于哪个 VLAN?
最常用的方式是基于交换机端口划分 VLAN。管理员为交换机端口配置所属 VLAN,终端主机不需要自己在普通以太网帧里填写 VLAN 编号。
假设电脑 A 接在端口 1,端口 1 被配置为 VLAN 10;电脑 B 接在端口 3,端口 3 被配置为 VLAN 20。当 A 发出一个普通以太网帧时,交换机从端口 1 收到它,就能根据"入端口属于 VLAN 10"这一配置,把该帧归入 VLAN 10 的转发范围。
这也说明 VLAN 并不会替代 MAC 地址表:
- VLAN 先回答:这帧属于哪个二层广播域?
- MAC 地址表再回答:在这个 VLAN 内,目的 MAC 应从哪个端口出去?
实际设备中的 MAC 地址表通常会把 VLAN 维度也纳入表项。相同的 MAC 地址即使出现在不同 VLAN 中,也不会因此混为同一个转发目标。可以把查表过程理解为:先在正确的 VLAN 范围内,再查目的 MAC 地址。
四、802.1Q 标签:让 VLAN 信息跨交换机传递
仅在一台交换机内部,端口配置就足以判断 VLAN。但当同一个 VLAN 的成员分布在多台交换机上时,交换机之间传递的帧还必须携带"我属于哪个 VLAN"的信息。
IEEE 802.1Q 标准为此规定了 VLAN 标签。交换机可以在以太网帧的源 MAC 地址字段之后、类型字段之前插入一个 4 字节标签,使相邻交换机能够识别该帧所属的 VLAN。
text
普通以太网帧:
目的 MAC | 源 MAC | 类型 | 数据 | FCS
带 802.1Q 标签的帧:
目的 MAC | 源 MAC | VLAN 标签(4 字节) | 类型 | 数据 | FCS
这 4 字节中,最值得掌握的是:
| 字段 | 长度 | 作用 |
|---|---|---|
| TPID | 16 比特 | 常见值为 0x8100,用于标识这是一个 802.1Q 标记帧 |
| PCP | 3 比特 | 优先级标记,可用于服务质量处理 |
| DEI | 1 比特 | 丢弃资格指示位,具体使用依设备与策略而定 |
| VID | 12 比特 | VLAN 标识符,指出帧属于哪个 VLAN |
VID 有 12 比特,数值范围为 0 到 4095;其中 0 和 4095 有保留用途,通常可配置的 VLAN 编号是 1 到 4094。这里不必把 VLAN ID 误解成 IP 子网号或 MAC 地址:它只是二层交换域中的一个逻辑编号。
普通电脑连接交换机时,网卡通常发送和接收不带 VLAN 标签的以太网帧。标签主要由交换机在内部处理,或在交换机之间的链路上传递。因此,给帧加上标签常称为打标签 ,移除标签则称为去标签。
五、Access 与 Trunk:两类端口各做什么?
端口类型决定了交换机接收和发送 VLAN 帧的方式。学习阶段先掌握最常见的两类即可。
| 端口类型 | 常见连接对象 | 可承载 VLAN 数量 | 对终端一侧帧的典型表现 |
|---|---|---|---|
| Access 端口 | PC、打印机、普通服务器 | 一个 | 通常收发不带标签的普通以太网帧 |
| Trunk 端口 | 另一台交换机、路由器、部分服务器或无线设备 | 多个 | 通常使用 802.1Q 标签区分不同 VLAN 的帧 |
1. Access 端口:把终端接入某一个 VLAN
Access 端口通常只属于一个 VLAN。它有一个端口 VLAN ID,常写作 PVID。当一个不带标签的帧从该端口进入时,交换机会把它归入 PVID 对应的 VLAN;在交换机内部,可以把这个过程理解为给帧补上了对应的 VLAN 身份。
当帧从 Access 端口发往普通电脑时,交换机一般会以不带标签的形式发送。这样,终端无需理解 VLAN 标签,也能正常使用网络。
例如,端口 1 和端口 2 都是 VLAN 10 的 Access 端口:A 从端口 1 发送广播帧后,交换机在 VLAN 10 内泛洪,并在端口 2 发出普通以太网帧;如果端口 3 是 VLAN 20 的 Access 端口,它不会收到这份广播。
2. Trunk 端口:一条链路承载多个 VLAN
若两台交换机之间有一根互连网线,可能需要同时承载 VLAN 10、VLAN 20 以及更多 VLAN 的流量。若为每个 VLAN 单独铺一根网线,既浪费端口又难以扩展。Trunk 端口就是为这个场景准备的。
在 Trunk 链路上,交换机通常为不同 VLAN 的帧保留或添加 802.1Q 标签:
text
VLAN 10 的帧 --带 VID 10 标签--> 交换机 2
VLAN 20 的帧 --带 VID 20 标签--> 交换机 2
交换机 2 收到帧后依据 VID 判断其 VLAN,再只在对应 VLAN 的端口中转发。于是,分布在两台交换机上的 VLAN 10 成员仍像处于同一个二层局域网,而 VLAN 20 的帧不会混入其中。
不同厂商或具体配置可能对某个"原生 VLAN"的帧采用不打标签的处理方式;但这不改变核心原则:Trunk 必须让链路两端对 VLAN 身份的解释一致,才能正确区分多组流量。
六、把一次 VLAN 转发过程串起来
假设有两台交换机:
- A 接在交换机 1 的 VLAN 10 Access 端口;
- B 接在交换机 2 的 VLAN 10 Access 端口;
- 两台交换机之间通过一条允许 VLAN 10 与 VLAN 20 通行的 Trunk 链路相连;
- C 接在交换机 2 的 VLAN 20 Access 端口。
现在 A 发出一个 ARP 广播,请求查询某个 VLAN 10 内主机的 MAC 地址。过程如下:
- A 把不带标签的广播以太网帧发给交换机 1。
- 交换机 1 根据入端口的 PVID,将该帧视为 VLAN 10 的帧,并在 VLAN 10 范围内泛洪。
- 帧要经过 Trunk 到达交换机 2 时,链路上携带 VLAN 10 的 802.1Q 标识。
- 交换机 2 识别到 VID 为 VLAN 10,只向本机 VLAN 10 的端口泛洪;B 能收到该帧。
- C 位于 VLAN 20,不属于这次广播的转发范围,因此不会收到该帧。
这个例子揭示了 VLAN 最重要的效果:同一条物理 Trunk 链路可以复用多个逻辑局域网,但每一个广播帧仍被限制在自己的 VLAN 内。
七、不同 VLAN 的主机为什么不能直接通信?
设 A 在 VLAN 10,C 在 VLAN 20。A 想直接向 C 发送 IP 数据报时,首先会尝试通过 ARP 获得下一跳的 MAC 地址。可是 A 的 ARP 请求是广播帧,交换机不会把 VLAN 10 的广播转发到 VLAN 20;因此,A 不可能直接通过 ARP 得到 C 的 MAC 地址。
这不是 VLAN 的"故障",恰恰是隔离正在生效。不同 VLAN 在二层看来就是不同的逻辑网络,要互通必须交给网络层设备:
text
VLAN 10 的主机 A
|
三层接口(路由器或三层交换机)
|
VLAN 20 的主机 C
路由器或三层交换机为各 VLAN 提供三层接口和 IP 地址。A 要访问 C 时,会先把数据帧发给 VLAN 10 中的默认网关;该三层设备根据 IP 路由决定从 VLAN 20 的接口转发,再以 VLAN 20 的二层帧送往 C。这个过程称为跨 VLAN 路由 或VLAN 间路由。
所以,VLAN 不是安全策略的全部,也不等于"不同 VLAN 绝对无法通信"。它提供二层隔离边界;是否允许跨 VLAN 通信、允许哪些业务端口通过,还要由三层路由与访问控制策略决定。
八、几个容易混淆的点
| 容易混淆的说法 | 更准确的理解 |
|---|---|
| 划分 VLAN 后,交换机不再转发广播 | 交换机仍会转发广播,但只在同一 VLAN 内泛洪 |
| VLAN 就是一套新的物理网络 | VLAN 是逻辑划分,可复用同一台交换机和同一条 Trunk 链路 |
| VLAN ID 等于 IP 网段 | 二者常按网络设计一一对应,但分别属于二层与三层,没有必然的数值关系 |
| 同 VLAN 的设备一定插在同一台交换机上 | 同 VLAN 可跨多台交换机,只要中间链路正确承载该 VLAN |
| 不同 VLAN 永远不能通信 | 它们不能直接二层交换,但可经路由器或三层交换机进行三层通信 |
| VLAN 天然解决所有安全问题 | VLAN 能隔离二层广播域;完整安全还需要访问控制、认证与合理的三层策略 |
九、总结
VLAN 把"同一台交换机上的所有端口都属于一个局域网"变成了可配置的规则。它通过端口归属和 802.1Q 标签,让交换机在转发帧时同时考虑 VLAN 与 MAC 地址:广播和未知单播不会越过 VLAN 边界,已知单播也只会在目标 VLAN 内查表转发。
把本文与上一篇连起来,可以得到一条完整的二层转发思路:交换机从源 MAC 学习端口位置,按目的 MAC 决定转发方式;而 VLAN 决定这次学习、查询和泛洪究竟在哪一个逻辑局域网内进行。再往下看,我们会把视角转向共享介质与无线网络,比较 CSMA/CD 和 CSMA/CA 如何应对多个设备争用同一传输信道的问题。
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!