5.3 端口收发规则详解 (Access/Trunk/Hybrid)
这是 VLAN 学习中最烧脑也最重要的部分。理解了这三张表,你就理解了 VLAN 的一切。
我们将端口的处理动作分为 入方向 (接收 Inbound) 和 出方向 (发送 Outbound)。
统一法则 (Golden Rule): 交换机内部处理的数据帧,一定是带 VLAN Tag 的!
- 入方向:如果没 Tag,就给它打上 Tag。
- 出方向:根据端口配置,决定是剥离 Tag 发送,还是保留 Tag 发送。
0. 核心心法:VLAN List (VLAN 列表)
在深入具体端口之前,建立一个核心心理模型非常重要:每个接口都有一个“VLAN List”(允许通过的 VLAN 列表)。
- 转发的前提:只有当数据帧所属的 VLAN 存在于接口的 VLAN List 中时,交换机才会处理(接收或发送)。
- Access 接口:VLAN List 中有且只有 1 个 VLAN (即 PVID)。
- Trunk 接口:VLAN List =
allow-pass vlan列表 + VLAN 1 (默认)。 - Hybrid 接口:VLAN List =
tagged列表 +untagged列表。
查看接口 VLAN List 的命令:
bash
display port vlan GigabitEthernet 0/0/1 active1. Access 端口 (接入端口)
- 场景:连接 PC、服务器、打印机等不支持 Tag 的终端设备。
- 特点:
- 只能加入 1 个 VLAN。
- 发送给终端的帧必须是 无标记 (Untagged) 的。
📥 入方向 (接收帧)
1. 收到无 Tag 帧:
- 打上端口 PVID Tag (默认 VLAN 1)。
- ✅ 接收 (进入交换机内部)。
2. 收到带 Tag 帧:
- 检查 Tag 是否等于 PVID?
- 是 → ✅ 接收。
- 否 → ❌ 丢弃。
📤 出方向 (发送帧)
处理逻辑:
- 检查数据帧的 VLAN ID 是否等于 PVID?
- 相等 → 剥离 Tag (Untag) 后发送。
- 不相等 → 不发送 (逻辑上根本不会走到这个端口)。
配置示例:
bashinterface G0/0/1 port link-type access port default vlan 10 # PVID = 10
Tagged vs Untagged 帧格式对比
Tagged vs Untagged 帧格式对比
Untagged 帧 (无标签帧 - Access 发送给 PC 的帧):
Dst MAC
6B
Src MAC
6B
Type
2B
Data
Payload
FCS
4B
Tagged 帧 (802.1Q 带标签帧 - Trunk/交换机内部):
Dst MAC
6B
Src MAC
6B
802.1Q Tag (4B)
TPID
0x8100
0x8100
PRI
3bit
3bit
CFI
1bit
1bit
VID
12bit
12bit
Type
2B
Data
Payload
FCS
4B
关键差异:
- Untagged 帧:普通以太网帧,共 14 字节头部(6+6+2),PC/服务器可识别
- Tagged 帧:在 Src MAC 和 Type 之间插入 4 字节 802.1Q Tag,头部变为 18 字节
- TPID:固定值 0x8100,标识这是带 VLAN 标签的帧
- VID:12 位,标识该帧属于哪个 VLAN(范围 0-4095)
2. Trunk 端口 (干道端口)
- 场景:连接交换机与交换机、交换机与路由器。
- 特点:
- 可以允许 多个 VLAN 通过。
- 除了 PVID (Native VLAN) 的流量去 Tag 发送,其他允许的 VLAN 均 带 Tag (Tagged) 发送。
📥 入方向 (接收帧)
1. 收到无 Tag 帧:
- 打上端口 PVID 标记。
- 检查 PVID 是否在
Allow-Pass列表中? - 在 → ✅ 接收。
- 不在 → ❌ 丢弃。
2. 收到带 Tag 帧:
- 检查 Tag 是否在
Allow-Pass列表中? - 在 → ✅ 接收 (保持原 Tag)。
- 不在 → ❌ 丢弃。
📤 出方向 (发送帧)
处理逻辑:
- 检查 VLAN ID 是否在
Allow-Pass列表中?不在则丢弃。 - 如果在列表中:
- VLAN ID == PVID:剥离 Tag (Untag) 发送。
- VLAN ID != PVID:保留 Tag (Tagged) 发送。
进阶:Trunk PVID 与 VLAN 1
- 默认情况下,Trunk 端口的 PVID 是 VLAN 1,且 VLAN 1 默认在 Allow-Pass 列表中。
- 这意味着:VLAN 1 的流量默认不带标签(Untagged)传输。
- 安全风险 (VLAN Hopping):攻击者可能利用 PVID 的去标签特性进行跳跃攻击。
- 最佳实践:
- 修改 PVID 为一个不使用的 VLAN (如 999)。
- 或者显式禁止 VLAN 1 通过:
undo port trunk allow-pass vlan 1。
配置示例:
bashinterface G0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 port trunk pvid vlan 1 # 默认就是1,通常不改
3. Hybrid 端口 (混合端口)
- 场景:华为/H3C 特有且默认的模式。极其灵活,可以手动指定哪些 VLAN 发送时带 Tag,哪些不带 Tag。可以实现 Access 和 Trunk 的所有功能,还能实现基于二层的 VLAN 隔离(如 PVLAN 效果)。
- 特点:
- 拥有三个属性:
PVID、Tagged List、Untagged List。 - 入方向规则与 Trunk 类似。
- 出方向规则完全由管理员自定义。
- 拥有三个属性:
⚡ Hybrid 核心逻辑
| 方向 | 情况 | 动作 |
|---|---|---|
| 📥 入方向 (收) | 收到无 Tag 帧 | 打上 PVID。检查 PVID 是否在 (Tag表 + Untag表) 中。在则收,不在丢。 |
| 收到带 Tag 帧 | 检查 Tag 是否在 (Tag表 + Untag表) 中。在则收,不在丢。 | |
| 📤 出方向 (发) | VLAN 在 Untagged List | 剥离 Tag 发送 (像 Access) |
| VLAN 在 Tagged List | 保留 Tag 发送 (像 Trunk) |
Access 是 Hybrid 的特例:
- PVID = 10
- Untagged List = 10
- Tagged List = Empty
Trunk 是 Hybrid 的特例:
- PVID = 1
- Untagged List = 1 (PVID)
- Tagged List = 10, 20 (Allow-Pass)
配置示例:
bashinterface G0/0/1 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 20 # 发送 VLAN 10 和 20 的帧时都去标签!
4. 总结对比图
| 端口类型 | 接收无 Tag 帧 | 接收带 Tag 帧 | 发送帧处理 | 适用场景 |
|---|---|---|---|---|
| Access | 打上 PVID | 仅接收 VID==PVID | 剥离 Tag | 接 PC/服务器 |
| Trunk | 打上 PVID,查 Allow表 | 查 Allow表 | 等于 PVID 去标; 不等于 PVID 带标 | 接交换机/路由器 |
| Hybrid | 打上 PVID,查 Tag/Untag表 | 查 Tag/Untag表 | 在 Untag 表里:去标 在 Tag 表里:带标 | 灵活控制,VLAN 隔离 |
5. 💡 专家视角 (Expert Insights)
5.1 心理模型:染色与褪色
不要死记硬背 Tag/Untag,试着建立这样一个直观模型:交换机内部是一个五颜六色的世界。
- 交换机内部:所有数据流必须带有颜色(VLAN Tag)。红色代表 VLAN 10,蓝色代表 VLAN 20。没有颜色的数据在交换机内部是不存在的。
- Access 端口(色盲/翻译官):
- 入(收):外界发来的数据是“透明”的(无 Tag)。Access 端口负责给它刷上特定的颜色(PVID)再放进交换机。
- 出(发):交换机内部的有色数据要发给电脑。电脑看不懂颜色,Access 端口必须把颜色洗掉(剥离 Tag),变回透明数据发出去。
- Trunk 端口(管道工):
- 负责连接两个五颜六色的世界。它允许带着颜色传输,这样对端交换机收到后,不用重新染色,直接知道“哦,这是红色的 VLAN 10”。
- 例外:PVID(Native VLAN)是特权阶级,Trunk 会把它“洗白”传送,对端收到“透明”数据后,默认它是 PVID 的颜色。
5.2 为什么 Hybrid 是“万能接口”?
很多初学者觉得 Hybrid 难,其实它最简单,因为它回归了本质。
抛开 Access 和 Trunk 的名字,交换机端口的核心动作只有两个维度:
- 进门查票:允许哪些 VLAN 进来?(Access 只能进1个,Trunk 能进多个)
- 出门着装:出去时要不要穿马甲(Tag)?
- Access:必须脱马甲(Untag)。
- Trunk:除了 PVID 都要穿马甲(Tag)。
Hybrid 把这两个权限完全交给了你:
- 你可以让 VLAN 10, 20, 30 都进来(像 Trunk)。
- 但是你可以规定:VLAN 10 出去时脱马甲(像 Access),VLAN 20 出去时穿马甲(像 Trunk)。
- 应用场景:IP 电话。电话数据(VLAN 100)需要带 Tag(为了 QoS 优先级),但级联的 PC 数据(VLAN 200)需要不带 Tag。只有 Hybrid 能在一个端口上同时实现这两个逻辑。
6. ⚔️ 厂商对比:华为 vs 思科 vs 锐捷
不同厂商对端口模式的命名和实现略有不同,特别是 Hybrid 端口。
| 特性 | 华为 (Huawei) / H3C | 思科 (Cisco) | 锐捷 (Ruijie) |
|---|---|---|---|
| 默认端口模式 | Hybrid | Dynamic Auto (老型号) / Access | Access |
| Access 模式 | port link-type access | switchport mode access | switchport mode access |
| Trunk 模式 | port link-type trunk | switchport mode trunk | switchport mode trunk |
| PVID 叫法 | PVID (Port VLAN ID) | Native VLAN | Native VLAN |
| 混合模式 | Hybrid (功能最强,默认) | 无 (但 Trunk 允许 Native VLAN) | Hybrid (部分型号支持,类似华为) |
| 配置差异 | 必须先指定 link-type 才能配 VLAN | 可以直接配 VLAN,模式自动变 | 类似思科 |
6.1 思科为什么没有 Hybrid?
思科的设计哲学更倾向于角色明确:
- 你要么是接 PC 的(Access)。
- 你要么是接交换机的(Trunk)。
- 如果你要接 IP 电话 + PC?思科搞了个
Voice VLAN的概念,其实本质上就是 Access 端口带 Tag(PC 数据走 Access VLAN 不带标,电话数据走 Voice VLAN 带标)。这是一种简化版的 Hybrid。
6.2 锐捷的特点
锐捷的命令风格极其接近思科,但在二层防环等默认配置上(如 STP)更贴近华为。在端口模式上,锐捷通常沿用思科的 Access/Trunk 二分法,但在一些特定场景下也引入了 Hybrid 模式以支持灵活的 Tag 控制。