第12篇:Access 与 Trunk 的区别:谁在打标签
关键词:Access端口、Trunk端口、VLAN标签、802.1Q、入方向处理、出方向处理、PVID、Native VLAN
一、引言
在上一篇文章中,我们快速了解了 Access 和 Trunk 两种端口模式。但在实际运维中,最让人困惑的问题往往是:到底谁在打标签?谁在剥标签?标签在什么情况下会被添加或删除?本文通过数据包在不同端口间流转的全过程,带你彻底搞懂 Access 与 Trunk 的标签处理差异。
二、核心概念
2.1 标签处理的两个方向
理解 Access 与 Trunk 的区别,关键是区分数据帧经过端口时的"入方向"和"出方向"。
| 方向 | 说明 | 关注点 |
|---|---|---|
| 入方向(Ingress) | 外部设备发送帧进入交换机端口 | 是否需要添加 VLAN 标签 |
| 出方向(Egress) | 交换机端口向外部设备发送帧 | 是否需要剥离 VLAN 标签 |
2.2 终端设备与交换机的标签认知
| 设备类型 | 能否发送带标签帧 | 能否接收带标签帧 | 说明 |
|---|---|---|---|
| 普通 PC | 否 | 否 | 网卡驱动丢弃带标签帧 |
| 打印机 | 否 | 否 | 同普通 PC |
| 支持 VLAN 的 AP | 是 | 是 | 多 SSID 场景需要 |
| 虚拟机(VLAN Trunking) | 是 | 是 | 配置 VLAN 标签后 |
| 交换机/路由器 | 是 | 是 | 网络设备间通信 |
2.3 Access 与 Trunk 的标签处理对比总览
| 对比项 | Access 端口 | Trunk 端口 |
|---|---|---|
| 所属 VLAN 数量 | 仅 1 个 | 多个(allow-pass 列表) |
| 入方向:收到无标签帧 | 添加 PVID 标签 | 添加 PVID 标签 |
| 入方向:收到带标签帧 | 丢弃(与 PVID 不一致时直接丢弃) | 检查标签是否在 allow-pass 列表 |
| 出方向:发送帧 | 剥离所有标签 | PVID VLAN 剥标签,其余保留标签 |
| 标签可见性 | 外部永远看不到标签 | 外部能看到非 PVID VLAN 的标签 |
注意:Access 端口只属于一个 VLAN,因此入方向收到任何非 PVID 标签帧都会直接丢弃,不会再"剥标签"或放行——这一点与 Trunk 端口(检查 allow-pass 后允许放行)行为完全不同。
三、技术细节
3.1 Access 端口标签处理全流程

关键规则: 1. Access 端口出方向永远发送无标签帧 2. Access 端口入方向永远给帧打上 PVID 3. 如果 Access 端口收到带标签的帧,且标签与 PVID 不一致,帧被丢弃
3.2 Trunk 端口标签处理全流程

关键规则: 1. Trunk 端口入方向检查标签是否在 allow-pass 列表中,不在则丢弃 2. Trunk 端口出方向:如果帧的 VLAN 等于 PVID,剥离标签后发送;否则保留标签发送 3. Trunk 端口收到无标签帧时,同样添加 PVID 标签
3.3 PVID 的实际影响
PVID 决定了无标签帧进入交换机后被归入哪个 VLAN。
| 场景 | PVID 设置 | 无标签帧归属 | 风险 |
|---|---|---|---|
| Access 端口 | VLAN 10(port default vlan 10) | VLAN 10 | 无 |
| Trunk 端口默认 | VLAN 1 | VLAN 1 | 终端误连 Trunk 时帧进入 VLAN 1 |
| Trunk 端口修改后 | VLAN 10(手动修改) | VLAN 10 | 两端 PVID 不匹配导致通信异常 |
3.4 Native VLAN 概念(与 Cisco 对应)
在 Cisco 设备上称为 Native VLAN,在华为设备上就是 Trunk 端口的 PVID 对应的 VLAN。
| 特性 | 说明 |
|---|---|
| 定义 | Trunk 端口上发送时不带标签的 VLAN |
| 默认值 | VLAN 1 |
| 安全建议 | 不要将业务 VLAN 设为 Native VLAN |
| 两端一致性 | Trunk 链路两端的 PVID 必须相同,否则产生 VLAN 不匹配 |
四、实战配置/案例分析
4.1 案例一:抓包验证 Access 与 Trunk 的标签差异
实验拓扑描述:
PC1(VLAN 10)→ Access端口(GE0/0/1, VLAN 10)→ 核心交换机 → Trunk端口(GE0/0/24)→ 接入交换机 → Access端口(VLAN 20)→ PC2(VLAN 20)
PC1 和 PC2 分别接在不同 VLAN 的 Access 端口上,跨 VLAN 通讯需经过核心交换机 VLANIF 路由。
在核心交换机 Trunk 端口抓包:
# 在 Trunk 端口开启端口镜像,通过 Wireshark 抓包
# PC1(VLAN 10)Ping PC2(VLAN 20),经过核心交换机路由
# Wireshark 观察到:
# 1. 从 PC1 方向来的 ARP 请求:带 802.1Q Tag=10
# 2. 核心交换机路由后发出的 ARP 请求:带 802.1Q Tag=20
# 3. Trunk 端口发出的所有帧均携带 VLAN 标签(因为 PVID=1,与业务 VLAN 不同)
抓包关键发现: - Access 端口抓包看不到 VLAN 标签 - Trunk 端口抓包能看到 802.1Q 标签(TPID=0x8100) - 标签值在不同 VLAN 间的路由后会改变
4.2 案例二:Trunk PVID 不匹配导致的通信故障
故障描述:两台交换机通过 Trunk 级联,VLAN 10 的终端无法与 VLAN 10 的服务器通信。
两端配置对比:
# 核心交换机侧
<Core-SW> display current-configuration interface GigabitEthernet 1/0/1
port link-type trunk
port trunk pvid vlan 1 ← 默认 PVID=1
port trunk allow-pass vlan 10 20 30
# 接入交换机侧
<Access-SW> display current-configuration interface GigabitEthernet 0/0/24
port link-type trunk
port trunk pvid vlan 10 ← 被误修改为 PVID=10
port trunk allow-pass vlan 10 20 30
故障分析:

修复:
# 恢复接入交换机 Trunk PVID 为 1
[Access-SW] interface GigabitEthernet 0/0/24
[Access-SW-GigabitEthernet0/0/24] undo port trunk pvid vlan
# 或显式恢复
[Access-SW-GigabitEthernet0/0/24] port trunk pvid vlan 1
[Access-SW-GigabitEthernet0/0/24] quit
4.3 案例三:误将 Access 端口作为级联端口
故障描述:新入职员工将接入交换机的 GE0/0/24 端口配为 Access,连接到核心交换机,结果只有该端口的 VLAN 能通,其他 VLAN 全部中断。
# 错误配置
<Access-SW> display current-configuration interface GigabitEthernet 0/0/24
port link-type access
port default vlan 10
# 分析:Access 端口只属于 VLAN 10
# 1. 核心交换机发出的 VLAN 20 / 30 数据帧到达该 Access 端口后
# 标签为 20/30,与 PVID=10 不一致 → 直接丢弃
# 2. 即使假设帧被接收,Access 端口出方向也会剥掉所有标签
# 对端交换机无法区分 VLAN,仍无法正常转发
# 综上,所有非 PVID 的 VLAN 在该链路上全部中断
# 修复
[Access-SW] interface GigabitEthernet 0/0/24
[Access-SW-GigabitEthernet0/0/24] port link-type trunk
[Access-SW-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20 30
[Access-SW-GigabitEthernet0/0/24] quit
4.4 案例四:Trunk allow-pass 配置不当的隐患
# 场景:核心交换机 Trunk 端口配置了 allow-pass vlan all
<Core-SW> display current-configuration interface GigabitEthernet 1/0/1
port trunk allow-pass vlan all
# 问题:allow-pass all 存在安全风险
# 1. 所有 VLAN 的流量都从该 Trunk 通过,无法隔离
# 2. 如果下联接入交换机被攻击者控制,可嗅探所有 VLAN 流量
# 3. 任何新建 VLAN 都会被自动允许通过,可能将本不应该跨设备传输的 VLAN 也泄露出去
# 最佳实践:只允许必要的 VLAN 通过
[Core-SW] interface GigabitEthernet 1/0/1
[Core-SW-GigabitEthernet1/0/1] port trunk allow-pass vlan 10 20 30 100
[Core-SW-GigabitEthernet1/0/1] quit
五、总结
| 对比维度 | Access 端口 | Trunk 端口 |
|---|---|---|
| 标签处理原则 | 入加标,出剥标 | 入检查列表,出按 PVID 决定是否剥标 |
| VLAN 数量 | 仅 1 个 | 多个(由 allow-pass 控制) |
| 外部可见标签 | 无 | PVID VLAN 无标签,其余带标签 |
| 典型连接对象 | PC、打印机、电话 | 交换机、路由器、AP |
| 配置复杂度 | 低(2 条命令) | 中(3 条命令) |
| 安全控制粒度 | 无 | 可通过 allow-pass 精确控制 |
| 排错金句 | 对应场景 |
|---|---|
| "谁在打标签?" → 交换机入方向 | 无标签帧进入任何端口都会被打上 PVID |
| "谁在剥标签?" → Access 出方向 / Trunk 出方向(PVID VLAN) | 终端永远收不到带标签帧(除非对标签有认知) |
| "Trunk 两端 allow-pass 必须一致" | 级联链路排错第一原则 |
| "Trunk 两端 PVID 必须一致" | 避免 VLAN 归属混乱 |
思考
- 如果两台交换机之间的 Trunk 链路,一端 PVID=1,另一端 PVID=10,但两端的 allow-pass 都包含 VLAN 10,VLAN 10 的终端能正常通信吗?为什么?
- 为什么在 Cisco 设备上,Native VLAN 不匹配会产生控制台告警信息,而华为设备默认不告警?
- 如果一个 Trunk 端口的 PVID 设置为 VLAN 10,allow-pass 包含 VLAN 10 和 20,从该端口发出的 VLAN 10 帧和 VLAN 20 帧分别带不带标签?
下篇预告:第13篇:Hybrid 端口:华为特有的灵活端口类型