两台交换机、几十台电脑接在同一个网络里,结果就是:谁发一个广播包,全公司都能收到;A 部门的打印机莫名其妙出现在 B 部门的"网络邻居"里;某台机器中了 ARP 病毒,整层楼跟着一起断网。这些问题表面上看是三个毛病,根子上却是同一件事——广播域没有被切开。

VLAN(Virtual Local Area Network,虚拟局域网)就是用来切广播域的:不用多买设备,也不用重新布线,只靠配置就能把一台物理交换机在逻辑上分成多个互不干扰的广播域。这篇把 VLAN 的原理、802.1Q 标签、VLAN 划分方式,以及华为交换机上 Access / Trunk / Hybrid 三种接口的收发规则和配置命令整理成一份学习笔记,内容对应 HCIA-Datacom 的交换部分,配置以华为 VRP 为准。

为什么需要 VLAN

传统以太网的问题

以太网是一种基于 CSMA/CD 的数据网络通信技术,它的基本特征是共享通信介质。当主机数目较少时,这种"大家抢一根线说话"的方式没什么问题;可一旦主机数量多起来,隐患就全冒出来了:广播泛滥、性能显著下降,严重时甚至会造成网络不可用。

在典型的交换网络中,当某台主机发送一个广播帧或未知单播帧时,该数据帧会被泛洪(Flooding),传递到整个广播域。广播域越大,产生的网络安全问题、垃圾流量问题就越严重:ARP 请求要发给所有人、DHCP 发现报文要发给所有人,任何一台设备被感染后发出的异常流量也会被送到所有人手上。

传统以太网的问题:广播帧与未知单播帧在整个广播域内泛洪
没有 VLAN 时,一个广播帧会走遍整个交换网络

VLAN 能解决什么

虚拟局域网 VLAN 可以把一个物理网络在逻辑上划分成多个广播域,每个 VLAN 就是一个独立的二层网络。广播、未知单播只在自己所属的 VLAN 内泛洪,不会再跨出去。

虚拟局域网 VLAN 把物理网络划分为多个广播域
同一个物理网络被切成多个广播域,广播互不越界

VLAN 的特点可以概括成四条:

  • 不受地域限制:同一 VLAN 内的设备可以分布在不同的楼层、不同的交换机上,只要沿途链路允许对应 VLAN 通过即可。
  • 二层隔离:同一 VLAN 内的设备才能直接进行二层通信;不同 VLAN 之间默认完全不通,必须经过三层设备转发。
  • 灵活:部门调整、人员搬工位,只需要改交换机配置,不用动一根网线。
  • 安全与管理:把财务、访客、摄像头、打印机分到不同 VLAN,能显著缩小故障与攻击的影响范围,也让流量管理更清晰。

VLAN 的基本原理

交换机如何区分不同的 VLAN:802.1Q 标签

问题来了:一台交换机内部有很多接口,它凭什么判断某个数据帧属于 VLAN 10 还是 VLAN 20?答案是标签。IEEE 802.1Q 协议规定,在以太网数据帧的源 MAC 地址之后插入 4 个字节的 VLAN 标签,又称 VLAN Tag,简称 Tag。

802.1Q VLAN 标签的 4 字节结构:TPID、PCP、DEI、VID
802.1Q Tag 共 4 字节,插在源 MAC 地址之后

这 4 个字节并不是一个笼统的"编号",而是有明确分工的:

字段长度作用
TPID2 字节固定为 0x8100,用来标识这是一个 802.1Q 帧
PCP3 bit优先级 0~7,供 QoS 调度使用
DEI1 bit丢弃指示位(旧称 CFI),一般填 0
VID12 bitVLAN ID,取值 0~4095,其中 1~4094 可用

VID 只有 12 位,所以一台交换机最多能划分 4094 个可用 VLAN。其中 VLAN 0 用于优先级标签(只带优先级、不带 VLAN 信息),VLAN 4095 保留不用,VLAN 1 是默认 VLAN——所有接口出厂时的 PVID 都是 1。

带 Tag 的帧叫 Tagged 帧,不带 Tag 的帧叫 Untagged 帧。终端网卡通常只认 Untagged 帧,所以标签只在交换机之间、或者交换机与支持 802.1Q 的设备之间传递。

顺带说一句,802.1Q 是最标准的 VLAN 实现方式。市面上一些低端交换机还提供 MTU VLAN、端口 VLAN 这类简化模式,原理和效果与标准 802.1Q 并不相同,具体区别可以看另一篇笔记。

VLAN 数据帧与转发过程

一个数据帧进入交换机后,大致要经历三步:先根据入接口的 PVID 或帧自带的 Tag 判断它属于哪个 VLAN;再查 MAC 地址表,确认出接口;最后根据出接口的类型,决定发出时带不带标签。

VLAN 数据帧在交换机内部的转发过程
入方向定 VLAN,出方向定标签

理解 VLAN 的关键,其实就是把"入方向"和"出方向"分开看:入方向解决"这个帧属于谁",出方向解决"发给谁、带不带标签"。后面 Access / Trunk / Hybrid 三种接口的规则,全是这两条的具体化。

跨交换机怎么传:Trunk 链路

Switch1 与 Switch2 同属一个企业,企业统一规划了网络中的 VLAN:VLAN 10 给 A 部门,VLAN 20 给 B 部门,两个部门的员工在 Switch1 和 Switch2 上都有接入。

两台交换机互联时 VLAN 如何跨设备传递
A、B 两个部门在 Switch1 和 Switch2 上都有接入

PC1 发出的数据经过 Switch1 和 Switch2 之间的链路到达 Switch2。如果不加处理,Switch2 无法判断这个数据属于哪个 VLAN,也不知道应该把它输出到本地哪个 VLAN 中——A 部门的流量可能被送进 B 部门的接口。

解决办法就是在帧里带上 VLAN 信息。Switch1 和 Switch2 之间的链路要同时承载多个 VLAN 的数据,需要一种基于 VLAN 的"标记"手段,以便对不同 VLAN 的数据帧进行区分。IEEE 802.1Q 标准(也被称为 Dot1Q)定义了该"标记"方法:它在传统以太网帧头中插入 802.1Q Tag,Tag 里就写着 VLAN 信息。这条承载多个 VLAN、靠标签区分的链路,就是 Trunk 链路。

VLAN 的实现:跨交换机链路上为数据帧插入 802.1Q Tag
交换机互联链路上,帧被插入 802.1Q Tag 以区分 VLAN

VLAN 的划分方式

VLAN 的划分方式决定了"一台设备凭什么被分到某个 VLAN"。常见的有基于接口、基于 MAC 地址、基于 IP 子网、基于协议、基于策略等几种。华为交换机上最常用、也是考试和实际工程里最常考的是基于接口的划分。

VLAN 的常见划分方式:基于接口、MAC 地址、IP 子网、协议、策略
VLAN 的几种划分方式,实际部署以基于接口为主

基于接口的 VLAN 划分

原理

  • 根据交换机的接口来划分 VLAN:一个接口固定属于某个 VLAN。
  • 网络管理员预先给交换机的每个接口配置不同的 PVID,将该接口划入 PVID 对应的 VLAN。
  • 当一个数据帧进入交换机时,如果没有带 VLAN 标签,该数据帧就会被打上接口指定 PVID 的 Tag,然后在这个 PVID 对应的 VLAN 中传输。

PVID 与缺省 VLAN

  • PVID(Port VLAN ID)是接口上的缺省 VLAN 的 ID,也就是"这个接口不打标签时算哪个 VLAN"。
  • 取值范围 1~4094,默认值为 1。
  • 一个 Access 接口只能属于一个 VLAN;Trunk / Hybrid 接口虽然可以放行多个 VLAN,但 PVID 仍然只有一个。

基于接口划分的优点是配置简单、排错直观,缺点是设备换了接口就得改配置,不适合人员频繁移动的场景。

基于 MAC 地址的 VLAN 划分

原理

  • 根据数据帧的源 MAC 地址来划分 VLAN,与接口位置无关。
  • 网络管理员预先配置 MAC 地址和 VLAN ID 的映射关系表。
  • 当交换机收到的是 Untagged 帧时,就依据该表给数据帧添加指定 VLAN 的 Tag,然后数据帧在指定 VLAN 中传输。

映射表

  • 记录了 MAC 地址和 VLAN ID 的关联情况。

这种方式的好处是设备搬到哪个接口都能自动进对应 VLAN,适合移动办公;代价是 MAC 表得手工维护,规模一大就很难管,而且 MAC 地址可以伪造,安全性一般。

其他划分方式

基于 IP 子网、基于协议、基于策略的划分,原理都是"看报文里的某个字段再决定 VLAN",配置更灵活但也更复杂,实际项目里用得不多,这里了解概念即可。

以太网二层接口类型

VLAN 最终要落到接口上。华为交换机的二层接口分三种:Access、Trunk、Hybrid。它们的区别其实只有两点——允许哪些 VLAN 通过,以及发送时剥不剥离标签。

接口类型允许通过的 VLAN发送时的标签典型用途
Access只有 1 个(PVID)一律剥离,发 Untagged 帧连接 PC、服务器、打印机等终端
Trunk多个(allow-pass 列表)VID 等于 PVID 时剥离,其余带标签交换机互联、连接路由器/防火墙子接口
Hybrid多个按 untagged / tagged 列表逐个 VLAN 决定服务器多 VLAN、IPTV 等灵活场景

Access 接口

Access 接口是交换机上最常用来连接用户 PC、服务器等终端设备的接口。这类设备的网卡往往只收发无标记帧,所以 Access 接口发出去的帧一定不带标签。Access 接口只能加入一个 VLAN。

接收数据帧

  • Untagged 数据帧:打上 PVID,接收。
  • Tagged 数据帧:与 PVID 比较,相同则接收;不同则丢弃。

发送数据帧

  • VID 与 PVID 比较,相同则剥离标签发送;不同则丢弃。
Access 接口的收发规则:接收 Untagged 帧打 PVID,发送时剥离标签
Access 接口:进打标签、出剥标签

Trunk 接口

Trunk 接口允许多个 VLAN 的数据帧通过,这些数据帧通过 802.1Q Tag 实现区分。Trunk 接口常用于交换机之间的互联,也用于连接路由器、防火墙等设备的子接口。

接收数据帧

  • Untagged 数据帧:打上 PVID,且 VID 在允许列表中,则接收;VID 不在允许列表,则丢弃。
  • Tagged 数据帧:查看 VID 是否在允许列表中,在则接收,不在则丢弃。

发送数据帧

  • VID 在允许列表中,且 VID 与 PVID 一致,则剥离标签发送。
  • VID 在允许列表中,但 VID 与 PVID 不一致,则直接带标签发送。
  • 不在允许列表中,则直接丢弃。
Trunk 接口的收发规则:按允许列表转发,PVID 对应的 VLAN 剥离标签
Trunk 接口:只有 PVID 对应的 VLAN 会剥掉标签

这里有个容易踩的坑:华为交换机的 Trunk 接口默认只允许 VLAN 1 通过,也就是 allow-pass 列表里只有 1。新建的 VLAN 一定要手动加入允许列表,否则跨交换机就是不通。

Hybrid 接口

Hybrid 接口与 Trunk 接口类似,也允许多个 VLAN 的数据帧通过,同样靠 802.1Q Tag 区分。区别在于:Trunk 只有 PVID 一个 VLAN 能剥标签,而 Hybrid 可以由用户灵活指定在发送某个(或某些)VLAN 的数据帧时是否携带 Tag。

接收数据帧

  • Untagged 数据帧:打上 PVID,且 VID 在允许列表中,则接收;VID 不在允许列表,则丢弃。
  • Tagged 数据帧:查看 VID 是否在允许列表中,在则接收,不在则丢弃。

发送数据帧

  • VID 不在允许列表中,直接丢弃。
  • VID 在 Untagged 列表中,剥离标签发送。
  • VID 在 Tagged 列表中,带标签直接发送。
Hybrid 接口的收发规则:untagged 列表剥离标签,tagged 列表带标签发送
Hybrid 接口:每个 VLAN 单独指定发不带标签

一句话记住三种接口:Access 只属于一个 VLAN;Trunk 属于多个 VLAN,但只有 PVID 剥标签;Hybrid 属于多个 VLAN,且每个 VLAN 都可以单独决定剥不剥标签,最灵活。需要说明的是,Hybrid 是华为(以及 H3C 等 VRP 系设备)特有的接口类型,Cisco 设备上只有 Access 和 Trunk 两种,想达到类似效果只能靠 native VLAN 变通。

VLAN 的配置示例

下面用一个最小场景把前面的规则串起来:两台交换机 SW1、SW2,VLAN 10 给 A 部门(PC1、PC3),VLAN 20 给 B 部门(PC2、PC4);SW1 的 G0/0/1、G0/0/2 分别接 PC1、PC2,SW2 的 G0/0/1、G0/0/2 分别接 PC3、PC4;两台交换机的 G0/0/24 互联,配置成 Trunk。

1. 创建 VLAN

先在两台交换机上进入系统视图,改个便于区分的主机名,然后创建 VLAN。下面的命令会一次性创建 VLAN 10 和 VLAN 20:

<Huawei> system-view
[Huawei] sysname SW1
[SW1] vlan batch 10 20

也可以用 vlan vlan-id 逐个创建并进入 VLAN 视图;如果 VLAN 已存在,则直接进入该 VLAN 的视图:

[SW1] vlan 10
[SW1-vlan10] quit

批量创建时,可以用 to 指定一段连续的 VLAN,也可以用空格分开列多个,语法是 vlan batch { vlan-id1 [ to vlan-id2 ] } &<1-10>。其中 vlan-id1 是第一个 VLAN 的编号,vlan-id2 是最后一个 VLAN 的编号,取值范围都是 1~4094;后面的 &<1-10> 表示这种写法最多可以重复 10 次。

2. 配置 Access 接口

在接口视图下,把接口的链路类型配置为 Access,再用 port default vlan 配置缺省 VLAN 并把接口加入这个 VLAN。这条命令同时设置了 PVID,所以不必再单独配一次 PVID。

[SW1] interface GigabitEthernet 0/0/1
[SW1-GigabitEthernet0/0/1] port link-type access
[SW1-GigabitEthernet0/0/1] port default vlan 10
[SW1-GigabitEthernet0/0/1] quit
[SW1] interface GigabitEthernet 0/0/2
[SW1-GigabitEthernet0/0/2] port link-type access
[SW1-GigabitEthernet0/0/2] port default vlan 20
[SW1-GigabitEthernet0/0/2] quit

SW2 上照做:G0/0/1 划进 VLAN 10,G0/0/2 划进 VLAN 20。这样两台交换机上的 A 部门终端就都在 VLAN 10 里了。

3. 配置 Trunk 接口

互联接口要先改成 Trunk 类型,再把需要跨交换机传输的 VLAN 加入允许列表:

[SW1] interface GigabitEthernet 0/0/24
[SW1-GigabitEthernet0/0/24] port link-type trunk
[SW1-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20
[SW1-GigabitEthernet0/0/24] quit

SW2 的 G0/0/24 做同样配置。allow-pass vlan 后面也可以写 all 放行所有 VLAN,或者用 to 指定范围,例如 port trunk allow-pass vlan 10 to 20。

(可选)Trunk 接口的缺省 VLAN 默认是 VLAN 1,如果需要修改,用 port trunk pvid vlan vlan-id。注意链路两端的 PVID 必须一致,否则 Untagged 帧会被打进不同的 VLAN,表现为"时通时不通"或直接不通。

[SW1-GigabitEthernet0/0/24] port trunk pvid vlan 10

4. 配置 Hybrid 接口(可选)

如果接口要接一台同时承载多个 VLAN 的服务器,用 Hybrid 更顺手:管理网段用 VLAN 10,以 Untagged 方式发出(服务器管理口不认标签);虚拟机通过子接口打标签,对应的 VLAN 20、30 以 Tagged 方式发出(VLAN 30 需要提前创建)。

[SW1] interface GigabitEthernet 0/0/3
[SW1-GigabitEthernet0/0/3] port link-type hybrid
[SW1-GigabitEthernet0/0/3] port hybrid pvid vlan 10
[SW1-GigabitEthernet0/0/3] port hybrid untagged vlan 10
[SW1-GigabitEthernet0/0/3] port hybrid tagged vlan 20 30

其中 port hybrid untagged vlan 表示这些 VLAN 的帧从该接口发出时剥离标签,port hybrid tagged vlan 表示带标签发出;两者同时也把对应 VLAN 加入了允许列表。缺省 VLAN 用 port hybrid pvid vlan vlan-id 修改。

5. 验证配置

配置完成后,先别急着用 ping 验证,先看交换机自己是怎么认的:

[SW1] display vlan
[SW1] display vlan 10
[SW1] display port vlan

display vlan 看每个 VLAN 里有哪些接口;display port vlan 看每个接口的 PVID 和允许通过的 VLAN 列表——排错时这两个命令基本能定位大部分问题。

常见问题与排错

同一 VLAN 内的两台 PC 不通

  • 先看接口是不是真的划进了目标 VLAN:display port vlan 里的 PVID 对不对。
  • 跨交换机时看 Trunk 的允许列表有没有包含该 VLAN,以及两端是否都放行了。
  • 两端 Trunk 的 PVID 不一致,也会让 Untagged 帧落到不同 VLAN 里。
  • 接口被 shutdown、网线/VLAN 规划错误、MAC 地址表没学到,也都会表现为不通。

为什么不同 VLAN 之间默认不通

VLAN 隔离的是二层广播域,跨 VLAN 通信必须经过三层设备:要么用路由器的单臂路由(子接口封装 802.1Q),要么用三层交换机的 VLANIF 接口。VLAN 本身不负责路由,这一点初学时最容易混淆。

为什么不建议用 VLAN 1 承载业务

VLAN 1 是默认 VLAN,所有接口默认 PVID 都是 1,STP、LLDP 等控制协议默认也在 VLAN 1 里跑。业务流量和协议报文混在一起,既不好排查,也容易被利用。工程上一般把 VLAN 1 留作管理或干脆不用,业务从 VLAN 10 开始规划。

总结

  • VLAN 用来隔离广播域,不同 VLAN 之间二层默认不通,需要三层设备转发。
  • 802.1Q 在帧头插入 4 字节 Tag,VID 占 12 位,可用范围 1~4094,VLAN 1 是默认 VLAN。
  • 基于接口划分靠 PVID,配置简单、最常用;基于 MAC 划分灵活但维护成本高。
  • Access 只属于一个 VLAN;Trunk 承载多个 VLAN,只有 PVID 剥标签;Hybrid 可以逐个 VLAN 指定是否带标签。
  • 跨交换机用 Trunk,记得把 VLAN 加进 allow-pass 列表,并保持两端 PVID 一致。
  • 排错先看 display port vlan 和 display vlan。

如果你觉得这篇文章不错,有用的话可以点击下面的“赞赏”支持作者,你的支持是我更新的动力(饿饿吃饭)。