这是一篇网络学习笔记,原始记录写于 2024 年 10 月,现在整理成博客。主线是三个问题:VLAN 是什么、帧是怎么被"打标签"的、不同 VLAN 之间到底怎么通起来。配置以华为 VRP 命令为主,思科命令做对照。

先说动机:不划 VLAN 的交换网络就是一个大广播域,泛洪把带宽和 CPU 都吃光。

VLAN:虚拟局域网

VLAN(Virtual LAN,虚拟局域网):

VLAN 的号段

VLAN 范围:0~4095,共 4096 个【0 和 4095 为保留、1 为默认且无法删除】。

学 VLAN 就是学 Tag:802.1Q

IEEE 802.1Q(dot1q)协议规定:在以太网数据帧中加入 4 个字节的 VLAN 标签(VLAN Tag),用以标识 VLAN 信息。

802.1Q 标签插入前后:Untagged 帧与 Tagged 帧结构对比
▲ 原始笔记:802.1Q 标签插入前后(Untagged 帧 → Tagged 帧)
frame
原始以太网数据帧(无标记帧,Untagged 帧)
┌──────────┬──────────┬──────┬──────────────────┬─────┐
│ 目的MAC  │ 源MAC    │ 类型 │       Data       │ FCS │
└──────────┴──────────┴──────┴──────────────────┴─────┘
                     ▲ 在此处插入 802.1Q Tag(4 字节)
┌──────────┬──────────┬─────┬──────┬──────────────┬─────┐
│ 目的MAC  │ 源MAC    │ Tag │ 类型 │     Data     │ FCS │
└──────────┴──────────┴─────┴──────┴──────────────┴─────┘
              802.1Q 帧(标记帧,Tagged 帧)

Tag 里装了什么

frame
┌────────────────────────┬──────────┬───────┬────────────────┐
│   TPID (0x8100) 16bit  │ PRI 3bit │ CFI 1bit │ VLAN ID 12bit │
└────────────────────────┴──────────┴───────┴────────────────┘
802.1Q Tag 字段结构:TPID、PRI、CFI、VLAN ID
▲ 原始笔记:Tag 的 4 个字节怎么划分

谁能收发 Tagged 帧

常用设备中:

🔍 为了提高处理效率,交换机内部处理的数据帧一律都是 Tagged 帧。

基于接口划分 VLAN:PVID

VLAN 的划分方式里基于接口最为常见:

缺点也很直白:主机移动位置后,需要重新配置 VLAN。

基于接口划分 VLAN 的原理与 PVID
▲ 原始笔记:基于接口划分 VLAN 与 PVID

顺带一提,虚拟化场景里也有对应概念:vSwitch 上的虚拟机接在端口组(VLAN 10)上,宿主机的上行链路则要放行对应 VLAN。

三种接口:Access / Trunk / Hybrid

Access 接入端口

一般用于和不能识别 Tag 的终端(如用户主机、服务器等)相连,或者不需要区分不同 VLAN 成员时使用。所连接的这些设备的网卡往往只收发 Untagged 帧。只能加入一个 VLAN。

Access 接口规则:只允许一个 VLAN(PVID)。

方向情况动作
接收帧接口收到 Untagged 帧接收该帧,并打上该接口 PVID 的 Tag
接口收到 Tagged 帧VLAN ID 与接口 PVID 相同则接收;不同则丢弃
发送帧帧的 VLAN ID 与接口 PVID 相同先剥离该帧的 Tag,然后再将其从该接口发出
帧的 VLAN ID 与接口 PVID 不同禁止将该帧从该接口发出
cisco vs huawei
# 思科:把接口划入 VLAN 10
interface GigabitEthernet0/0/1
 switchport mode access
 switchport access vlan 10

# 华为:同样的效果
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

Trunk 干道端口

常用于交换机之间的互联,也用于连接路由器、防火墙等设备的子接口。可同时收发 Tagged 帧和 Untagged 帧。允许多个 VLAN 的帧带 Tag 通过,但只允许一个 VLAN 的帧从该类接口上发出时不带 Tag(即剥离 Tag)。

Trunk 接口规则:允许多个 VLAN(配置),只能有一个 VLAN 不带 Tag(PVID)。

方向情况动作
接收帧接口收到 Untagged 帧打上 PVID;PVID 在允许通过的 VLAN 列表里则接收,否则丢弃
接口收到 Tagged 帧VLAN ID 在允许通过的 VLAN 列表里则接收,否则丢弃
发送帧帧的 VLAN ID 与接口 PVID 相同VLAN ID 在允许列表中 → 剥离 Tag 后发出;不在 → 禁止发出
帧的 VLAN ID 与接口 PVID 不同VLAN ID 在允许列表中 → 保留 Tag 发出;不在 → 禁止发出
huawei
interface GigabitEthernet0/0/3
 port link-type trunk
 port trunk allow-pass vlan 10 20 30 40
# 缺省放行 VLAN 1,习惯上把它干掉:
 undo port trunk allow-pass vlan 1

Hybrid 混杂端口

Hybrid 接口与 Trunk 接口类似,也允许多个 VLAN 的数据帧通过,这些数据帧通过 802.1Q Tag 实现区分。用户可以灵活指定 Hybrid 接口在发送某个(或某些)VLAN 的数据帧时是否携带 Tag。Hybrid 接口和 Trunk 接口在很多应用场景下可以通用,但在某些应用场景下,必须使用 Hybrid 接口。

Hybrid 接口规则:允许多个 VLAN(配置),由命令决定带不带 Tag。

接收帧的判定和 Trunk 一致(Untagged 打 PVID 查允许列表,Tagged 查允许列表)。发送帧时:对允许通过的 VLAN,管理员通过命令决定——设置为不携带 Tag 就剥离 Tag 发出,设置为携带 Tag 就保留 Tag 发出。

一个典型的 Hybrid 案例(两台交换机 + 服务器):

位置端口PVID允许通过列表(Tag 属性)
交换机1Port1 → 主机1101、10、100(Untagged)
Port2 → 主机2201、20、100(Untagged)
Port3 → 交换机2110、20、100(Tagged)
交换机2Port1 → 服务器1001、10、20、100(Untagged)
Port3 → 交换机1110、20、100(Tagged)

这样 VLAN 10 / 20 的主机都能以 Untagged 方式访问同一台 VLAN 100 的文件服务器,而主机之间依然被 VLAN 隔离——这是 Trunk 做不到的。

Hybrid 案例:两台交换机与服务器的允许通过列表
▲ 原始笔记:Hybrid 案例与两台交换机的允许通过列表

Hybrid 实验整理

拓扑:PC1、PC3 在 VLAN 10;PC2、PC4 在 VLAN 20;PC5 在 VLAN 100,LSW1 与 LSW2 之间互联:

Hybrid 实验跨交换机拓扑
▲ 原始笔记:Hybrid 实验拓扑(黄=VLAN10,粉=VLAN20,蓝=VLAN100)
huawei · LSW1
vlan batch 10 20 100

interface GigabitEthernet0/0/1
 port hybrid pvid vlan 10
 port hybrid untagged vlan 10 100

interface GigabitEthernet0/0/2
 port hybrid pvid vlan 20
 port hybrid untagged vlan 20 100

interface GigabitEthernet0/0/3
 port link-type trunk
 undo port trunk allow-pass vlan 1
 port trunk allow-pass vlan 10 20 100
huawei · LSW2
vlan batch 10 20 100

interface GigabitEthernet0/0/1
 port hybrid pvid vlan 10
 port hybrid untagged vlan 10 100

interface GigabitEthernet0/0/2
 port hybrid pvid vlan 20
 port hybrid untagged vlan 20 100

interface GigabitEthernet0/0/3
 port link-type trunk
 undo port trunk allow-pass vlan 1
 port trunk allow-pass vlan 10 20 100

# 服务器口:对 VLAN 10/20 都以 Untagged 放行
interface GigabitEthernet0/0/4
 port hybrid pvid vlan 100
 port hybrid untagged vlan 10 20 100

调试小技巧——把一个接口的配置整个清空重来:

huawei
[S2] clear configuration interface g0/0/4
Warning: All configurations of the interface will be
cleared, and its state will be [shutdown]. Continue? [Y/N] : y

思科和华为的区别——非常重要

同样是"Trunk 放行 VLAN 列表",两家思路完全不同:

华为用 port trunk allow-pass vlan 10 20 30,一条命令直接写出最终列表;要移除就用 undo port trunk allow-pass vlan 1。

思科用 switchport trunk allowed vlan,后面跟 add / all / except / remove 来增量增删,例如 switchport trunk allowed vlan add 20。

VLAN 间路由

VLAN 间通信有三种方式:

  1. 加物理线缆(每个 VLAN 一个物理口);
  2. 单臂路由;
  3. VLANIF(三层交换)。

附两个小知识点:接口 IP 分主地址和次地址;OSPF 只会通过主地址建立邻居关系。

方案二:单臂路由

topology
                    R1
        GE0/0/1.10 ──┤├── GE0/0/1.20
    192.168.10.254   │   192.168.20.254
                     │ G0/0/24  Trunk VLAN 10 20
                    SW1
        GE0/0/1 ──┤      ├── GE0/0/2
   Access(VLAN10) │      │ Access(VLAN20)
            ┌─────┴─┐  ┌─┴─────────┐
            │  PC1  │  │   PC2     │
            │ VLAN10│  │  VLAN20   │
      192.168.10.2/24  192.168.20.2/24
      网关 192.168.10.254  网关 192.168.20.254
单臂路由物理连接图
▲ 原始笔记:单臂路由物理连接图
huawei · 子接口
interface Ethernet0/0/0.1
 dot1q termination vid 12
 ip address 12.0.0.2 255.255.255.0
 arp broadcast enable

华为加了 arp broadcast enable,是因为华为设备子接口默认不发 ARP 请求(两个路由器子接口对接时必须要输入这条)。清空 ARP 表用 reset arp all。

cisco · 子接口
interface FastEthernet0/1.10
 encapsulation dot1Q 10
 ip address 10.0.0.254 255.0.0.0

再来一个完整的单臂路由小实验(R1 + LSW1 + 两台 PC):

huawei · LSW1
vlan ba 10 20

int Ethernet0/0/1
 p l a
 p d v 10

int Ethernet0/0/2
 p l a
 p d v 20

int Ethernet0/0/3
 p l t
 p t a v 10 20
huawei · R1
interface Ethernet0/0/0.1
 dot1q termination vid 10
 ip address 1.0.0.254 255.0.0.0
 arp broadcast enable

interface Ethernet0/0/0.2
 dot1q termination vid 20
 ip address 2.0.0.254 255.0.0.0
 arp broadcast enable

方案三:VLANIF(三层交换)

三层交换机在路由模块里给每个 VLAN 建一个 VLANIF 接口(思科叫 SVI),作为各 VLAN 的网关;交换模块内部依旧是二层转发:

huawei · 三层交换
interface Vlanif10
 ip address 192.168.10.254 24

interface Vlanif20
 ip address 192.168.20.254 24

数据路径一目了然:PC1(192.168.10.2/24,网关 192.168.10.254)→ Access 口进入 VLAN 10 → VLANIF10 收到后经路由模块交给 VLANIF20(两个 VLANIF 共用交换机自己的 MAC2)→ 交换模块从 VLAN 20 的端口送出 → PC2(192.168.20.2/24,网关 192.168.20.254)。

VLANIF 三层交换:路由模块与交换模块
▲ 原始笔记:VLANIF(三层交换)的完整数据路径

二层口 vs 三层口

对比项二层交换接口三层路由接口
IP 地址×√
隔离广播域×√
转发依据MAC 地址表IP 路由表
典型设备二层交换机、三层交换机三层交换机、路由器

一句话总结:二层靠 MAC 表"照地址送",三层靠路由表"问路再送";VLAN 把广播域切开,VLAN 间路由再把这些孤岛用网关连起来。

📷 点开查看原始笔记完整截图(2024-10-13)
VLAN 原始笔记完整截图