第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 端口标签处理全流程

Access 端口标签处理全流程 - 图示

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

3.2 Trunk 端口标签处理全流程

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 不匹配导致的通信故障 - 图示

修复:

# 恢复接入交换机 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 归属混乱

思考

  1. 如果两台交换机之间的 Trunk 链路,一端 PVID=1,另一端 PVID=10,但两端的 allow-pass 都包含 VLAN 10,VLAN 10 的终端能正常通信吗?为什么?
  2. 为什么在 Cisco 设备上,Native VLAN 不匹配会产生控制台告警信息,而华为设备默认不告警?
  3. 如果一个 Trunk 端口的 PVID 设置为 VLAN 10,allow-pass 包含 VLAN 10 和 20,从该端口发出的 VLAN 10 帧和 VLAN 20 帧分别带不带标签?

下篇预告:第13篇:Hybrid 端口:华为特有的灵活端口类型