VLAN(Virtual Local Area Network) 虚拟局域网,一个带有 VLAN 功能的 Switch 能够同时处于多个 LAN 中,把一个交换机变成多个虚拟的交换机,VLAN 用来隔离broadcast domain(广播域)。
基本概念
LAN(Local Area Network) 本地局域网,通常使用 Hub 和 Switch 来连接 LAN 中的计算机。 一个 LAN 表示一个广播域,该 LAN 中的所有成员都会收到 LAN 中一个成员发出的广播包。
- VLAN,即虚拟局域网,是一种在物理上连接到同一网络的设备(比如同一台交换机,或多台连接在一起的交换机),可以根据逻辑(而非物理位置)划分成多个独立的广播域的技术。
VLAN 解决了什么问题?
| 传统网络(无 VLAN) |
VLAN 网络 |
| 广播风暴: 整个网络是一个大广播域。任一台设备发出的广播帧,所有设备都会收到,效率低,且易造成网络拥堵(广播风暴)。 |
隔离广播: 将一个大广播域逻辑上分成多个小广播域。广播只在各自 VLAN 内部传播,有效抑制广播风暴。 |
| 安全问题: 属于同一物理网络的设备可以直接通信,缺乏隔离性。 |
提高安全: 属于不同 VLAN 的设备默认不能直接通信。只有通过**三层设备(路由器或三层交换机)**才能进行路由,增强了安全性和控制性。 |
| 移动性差: 更改部门或组别需要重新插线和改 IP 地址。 |
提高灵活性: 设备的物理位置不变,只需要在交换机上更改其所属的 VLAN ID 即可实现网络组的变更。 |
作用
- 广播控制
- 带宽利用
- 降低延迟
- 安全性(非设计作用,本身功能所附加出的)
- 隔离性:不同 VLAN 之间的机器互相看不到
VLAN 的实现原理
VLAN 通过在以太网帧中插入一个称为 VLAN 标签(Tag,一般指 802.1Q 标签) 的字段来实现标识和隔离。这个标签包含了 VLAN ID (VID),交换机就是根据这个 ID 来判断数据包应该转发到哪个 VLAN 区域。
- VLAN ID
12bits,VLAN ID 的最大值是 4096, 但是有效值范围是 1- 4094。
什么是 Access 口 (访问端口) 和 Trunk 口 (干道端口)?
以太网端口有三种链路类型:
Access:只能属于一个 VLAN,一般用于连接计算机的端口
Trunk:可以属于多个 VLAN,可以接收和发送多个 VLAN 的报文,一般用于交换机之间连接的接口
- 在 OpenStack 环境中,如果让物理交换机使用 VLAN 的方式来隔离租户的话,必须将所有的端口都设置为 trunk port
Hybrid:属于多个 VLAN,可以接收和发送多个 VLAN 报文,既可以用于交换机之间的连接,也可以用户连接用户的计算机
Hybrid 端口和 Trunk 端口的不同之处在于 Hybrid 端口可以允许多个 VLAN 的报文发送时不打标签,而 Trunk 端口只允许缺省 VLAN 的报文发送时不打标签。
在支持 VLAN 的交换机上,所有的端口都需要被配置为特定的类型,其中最主要的两种就是 Access (访问) 和 Trunk (干道) 端口。
1. Access 口 (访问端口)
Access 口通常用于连接终端设备,如电脑、服务器、打印机、IP 电话等。
| 特点 |
说明 |
| 连接对象 |
终端设备(如 PC、服务器) |
| VLAN 数量 |
只能属于一个 VLAN(即 Untagged 端口)。 |
| 数据帧 |
不带 VLAN 标签 (Untagged)。 |
| 工作方式 |
入: 接收到来自终端的无标签帧后,交换机为其打上 Access 口所属 VLAN 的标签。 出: 转发数据给终端设备前,交换机剥掉 VLAN 标签,发送无标签帧。 |
| 作用 |
将终端设备接入到唯一的、特定的 VLAN 中。 |
2. Trunk 口 (干道端口)
Trunk 口用于连接网络设备,如交换机与交换机之间、交换机与路由器/防火墙之间。
| 特点 |
说明 |
| 连接对象 |
网络设备(如交换机、路由器、防火墙) |
| VLAN 数量 |
可以同时承载一个或多个 VLAN 的流量。 |
| 数据帧 |
大部分数据帧必须带 VLAN 标签 (Tagged)。 |
| 工作方式 |
透明传输: 交换机接收和发送数据时,会保留所有承载 VLAN 的标签,以区分数据包属于哪个 VLAN。 注意: Trunk 口通常也允许一个Native VLAN的流量不打标签通过。 |
| 作用 |
允许不同 VLAN 的数据流,只通过一根物理链路在网络设备间传输。 |
3. 对比总结
| 特性 |
Access 口 (访问端口) |
Trunk 口 (干道端口) |
| 用途 |
连终端 (PC, Server) |
连设备 (Switch-Switch, Switch-Router) |
| 支持 VLAN 数 |
1 个 |
多个 |
| 数据包标签 |
不带标签 (Untagged) |
带标签 (Tagged) |
| 核心功能 |
接入特定 VLAN |
跨越链路传输多个 VLAN 流量 |
什么是本征 VLAN (Native VLAN)?
本征 VLAN (Native VLAN) 是在 Trunk 链路(中继链路,用于在交换机之间传输多个 VLAN 流量的链路)上一个非常重要的概念。
- 作用: 在 Trunk 链路上,大多数 VLAN 的数据帧都会被标记上 VLAN ID (例如使用 802.1Q 协议)。然而,本征 VLAN 的数据帧在 Trunk 链路上不会被标记(Untagged)。
- 默认值: VLAN 1 通常是默认的本征 VLAN。
- 数据处理:
- 当一个交换机在 Trunk 端口上接收到一个未标记的数据帧时,它会认为这个数据帧属于本征 VLAN。
- 如果 Trunk 端口配置了本征 VLAN,所有属于该本征 VLAN 的流量通过 Trunk 链路时不会被添加 VLAN 标签。
- 安全建议: 出于安全考虑,建议:
- 将本征 VLAN (Native VLAN) 从默认的 VLAN 1 更改为另外一个不使用的 VLAN ID(例如 VLAN 999)。
- 确保这个本征 VLAN 不用于任何用户或管理流量。
简而言之:VLAN 1 特殊在于它是默认管理和控制平面 VLAN,并且通常是默认的本征 VLAN。本征 VLAN 特殊在于它的流量在 Trunk 链路上不带标签。
VLAN 1 的特殊意义
- 默认 VLAN: 在许多网络设备(尤其是交换机)上,VLAN 1 是默认的管理和控制平面 VLAN。
- 默认配置: 设备的所有端口通常默认都在 VLAN 1 中。
- 控制流量: 许多控制平面协议(如 STP、CDP、LLDP、LACP 等)的流量在默认情况下都与 VLAN 1 相关联。
- 管理 VLAN: 早期或在没有特殊配置的情况下,VLAN 1 经常被用作交换机的管理 VLAN。
- 安全风险: 正因为它具有默认和特殊的地位,出于安全考虑,最佳实践通常是避免将 VLAN 1 用于用户数据或管理流量。
- 许多安全攻击(例如 VLAN 跳跃攻击)都利用了 VLAN 1 的默认设置和本征 VLAN 的特性。
- 因此,建议将管理 VLAN 和用户 VLAN 改为 1 以外的其他 VLAN ID,并且将本征 VLAN 也改为 1 以外的其他 ID。
VLAN 的不足
- 数量少:最多只支持 4096 个 VLAN 网络
- 灵活性差:很难跨越 L2 的边界
- 配置复杂