这是一篇网络学习笔记,原始记录写于 2024 年 10 月,现在整理成博客。主线是三个问题:VLAN 是什么、帧是怎么被"打标签"的、不同 VLAN 之间到底怎么通起来。配置以华为 VRP 命令为主,思科命令做对照。
先说动机:不划 VLAN 的交换网络就是一个大广播域,泛洪把带宽和 CPU 都吃光。
VLAN:虚拟局域网
VLAN(Virtual LAN,虚拟局域网):
- 将一个物理的 LAN 在逻辑上划分成多个广播域的二层交换技术;
- 从而广播不会在 VLAN 之间转发,而是被限制在各自的 VLAN 中;
- 不同 VLAN 间的设备默认无法通讯,需要三层设备才能实现互通;
- 常见的规划:1 VLAN = 1 广播域 = 1 子网。
VLAN 的号段
VLAN 范围:0~4095,共 4096 个【0 和 4095 为保留、1 为默认且无法删除】。
- 0 和 4095 只会在虚拟机中出现;
- 0 一般表示"没有";
- 4095 一般表示"所有"。
学 VLAN 就是学 Tag:802.1Q
IEEE 802.1Q(dot1q)协议规定:在以太网数据帧中加入 4 个字节的 VLAN 标签(VLAN Tag),用以标识 VLAN 信息。
原始以太网数据帧(无标记帧,Untagged 帧)
┌──────────┬──────────┬──────┬──────────────────┬─────┐
│ 目的MAC │ 源MAC │ 类型 │ Data │ FCS │
└──────────┴──────────┴──────┴──────────────────┴─────┘
▲ 在此处插入 802.1Q Tag(4 字节)
┌──────────┬──────────┬─────┬──────┬──────────────┬─────┐
│ 目的MAC │ 源MAC │ Tag │ 类型 │ Data │ FCS │
└──────────┴──────────┴─────┴──────┴──────────────┴─────┘
802.1Q 帧(标记帧,Tagged 帧)
Tag 里装了什么
┌────────────────────────┬──────────┬───────┬────────────────┐
│ TPID (0x8100) 16bit │ PRI 3bit │ CFI 1bit │ VLAN ID 12bit │
└────────────────────────┴──────────┴───────┴────────────────┘
- TPID(标签协议标识符):标识数据帧的类型,值为 0x8100 时表示 802.1Q 帧;
- PRI(优先级):标识帧的优先级,主要用于 QoS;
- CFI(标准格式指示符):在以太网环境中,该字段的值为 0;
- VLAN ID(VLAN 标识符):标识该帧所属的 VLAN。
谁能收发 Tagged 帧
常用设备中:
- PC 主机、服务器、傻瓜交换机只能收发 Untagged 帧;
- 交换机、路由器、AC 既能收发 Tagged 帧,也能收发 Untagged 帧;
- 语音终端、AP 等设备可以同时收发一个 Tagged 帧和一个 Untagged 帧。
🔍 为了提高处理效率,交换机内部处理的数据帧一律都是 Tagged 帧。
基于接口划分 VLAN:PVID
VLAN 的划分方式里基于接口最为常见:
- 原理:根据交换机的接口来划分 VLAN。网络管理员预先给交换机的每个接口配置不同的 PVID,将该接口划入 PVID 对应的 VLAN;当一个数据帧进入交换机时,如果没有带 VLAN 标签,该数据帧就会被打上接口指定 PVID 的 Tag,然后数据帧将在指定 PVID 中传输;
- 缺省 VLAN,PVID:Port VLAN ID,是接口上的缺省 VLAN,取值
1~4094。
缺点也很直白:主机移动位置后,需要重新配置 VLAN。
顺带一提,虚拟化场景里也有对应概念: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 不同 | 禁止将该帧从该接口发出 |
# 思科:把接口划入 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 发出;不在 → 禁止发出 |
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 属性) |
|---|---|---|---|
| 交换机1 | Port1 → 主机1 | 10 | 1、10、100(Untagged) |
| Port2 → 主机2 | 20 | 1、20、100(Untagged) | |
| Port3 → 交换机2 | 1 | 10、20、100(Tagged) | |
| 交换机2 | Port1 → 服务器 | 100 | 1、10、20、100(Untagged) |
| Port3 → 交换机1 | 1 | 10、20、100(Tagged) |
这样 VLAN 10 / 20 的主机都能以 Untagged 方式访问同一台 VLAN 100 的文件服务器,而主机之间依然被 VLAN 隔离——这是 Trunk 做不到的。
Hybrid 实验整理
拓扑:PC1、PC3 在 VLAN 10;PC2、PC4 在 VLAN 20;PC5 在 VLAN 100,LSW1 与 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 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
调试小技巧——把一个接口的配置整个清空重来:
[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 间通信有三种方式:
- 加物理线缆(每个 VLAN 一个物理口);
- 单臂路由;
- VLANIF(三层交换)。
附两个小知识点:接口 IP 分主地址和次地址;OSPF 只会通过主地址建立邻居关系。
方案二:单臂路由
- 子接口(Sub-Interface)是基于路由器以太网接口所创建的逻辑接口,以物理接口 ID + 子接口 ID 进行标识,子接口同物理接口一样可进行三层转发;
- 子接口不同于物理接口,可以终结携带 VLAN Tag 的数据帧;
- 基于一个物理接口创建多个子接口,将该物理接口对接到交换机的 Trunk 接口,即可实现使用一个物理接口为多个 VLAN 提供三层转发服务。
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
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。
interface FastEthernet0/1.10
encapsulation dot1Q 10
ip address 10.0.0.254 255.0.0.0
再来一个完整的单臂路由小实验(R1 + LSW1 + 两台 PC):
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
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 的网关;交换模块内部依旧是二层转发:
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)。
二层口 vs 三层口
| 对比项 | 二层交换接口 | 三层路由接口 |
|---|---|---|
| IP 地址 | × | √ |
| 隔离广播域 | × | √ |
| 转发依据 | MAC 地址表 | IP 路由表 |
| 典型设备 | 二层交换机、三层交换机 | 三层交换机、路由器 |
一句话总结:二层靠 MAC 表"照地址送",三层靠路由表"问路再送";VLAN 把广播域切开,VLAN 间路由再把这些孤岛用网关连起来。
📷 点开查看原始笔记完整截图(2024-10-13)