第12篇:Access 与 Trunk 的区别——谁在打标签

一、写在前面

第 11 篇我们学了三种端口类型的配置,但很多新工程师还是搞不清楚一个核心问题:

VLAN 标签(802.1Q Tag)到底是谁打上去的?Access 和 Trunk 在处理标签时到底有什么不同?

这篇用最直观的方式,把"打标签"这件事彻底讲透。


二、802.1Q VLAN 标签是什么?

2.1 标准以太网帧 vs 带标签帧

标准以太网帧(不带 VLAN):

目的MAC 6字节 源MAC 6字节 类型 2字节 数据 46-1500 FCS 4字节

带 802.1Q 标签的以太网帧:

目的MAC 6字节 源MAC 6字节 Tag 4字节 类型 2字节 数据 46-1500 FCS 4字节

2.2 Tag 的 4 字节结构

16 bit 3 bit 1 bit 12 bit | TPID 0x8100 | Priority (802.1p) | CFI | VLAN ID (0~4095) | | --- | --- | --- | --- |

字段 长度 说明
TPID 16 bit 固定 0x8100,表示这是 802.1Q 标签
Priority 3 bit 802.1p 优先级(0~7)
CFI 1 bit 规范格式指示符(以太网一般为 0)
VID 12 bit VLAN ID(1~4094,0 和 4095 保留)

三、Access 端口的标签行为

3.1 接入方向(Port ← PC)

PC 发出的帧不带标签(普通 PC 不感知 VLAN)。

PC 发出:    [DMAC][SMAC][Type][Data][FCS]
               ↓
交换机 Access 口收到
               ↓
给帧打上 Tag:VID = PVID(端口的默认 VLAN)
               ↓
交换机内部处理(带 Tag 的帧)

3.2 接出方向(Port → PC)

PC 不能处理带标签的帧(普通网卡会丢弃)。

交换机内部(带 Tag,VID = 10)
               ↓
Access 口发出前
               ↓
剥离 Tag,恢复为标准以太网帧
               ↓
PC 收到:    [DMAC][SMAC][Type][Data][FCS]

3.3 Access 标签行为一句话总结

收→打标签,发→剥标签。

        ┌──────────┐
PC ←→   │ Access   │ ←→ 交换机内部
无标签帧  │ 打/剥标签 │ 带标签帧
        └──────────┘

四、Trunk 端口的标签行为

4.1 接出方向(Trunk → 对端交换机)

对端交换机需要能识别 VLAN 标签,所以大部分帧带标签发送。

交换机内部(带 Tag,VID = 10)
               ↓
Trunk 口处理
               ↓
检查 VID 是否在 allow-pass 列表中
    ├── 是 → 检查 VID == PVID?
    │        ├── 是 → 剥离标签发出(华为默认行为)
    │        └── 否 → 保留标签发出
    └── 否 → 丢弃

4.2 接入方向(对端 Trunk → 本端 Trunk)

对端交换机发来(可能带标签或否)
               ↓
本端 Trunk 口收到
               ↓
检查是否带标签
    ├── 带标签 → 检查 VID 在 allow-pass 列表中?
    │            ├── 是 → 接收
    │            └── 否 → 丢弃
    └── 无标签 → 打上 PVID 的标签接收

4.3 Trunk 标签行为一句话总结

默认保留标签(华为特性:PVID 的帧除外),确保对端能识别 VLAN。

        ┌──────────┐
交换机 ←→ │  Trunk   │ ←→ 对端交换机
带标签帧  │ 保留/剥离 │ 带标签帧
        └──────────┘

五、核心对比:Access vs Trunk

对比项 Access Trunk
接收无标签帧 打 PVID 标签 ✓ 打 PVID 标签 ✓
接收有标签帧 只收 VID=PVID 的,否则丢弃 收 allow-pass 列表中的
发送无标签帧 总是无标签 ✓ 仅 PVID 所对应的 VLAN 无标签
发送有标签帧 ❌ 从不发有标签帧 大量发有标签帧
典型连接对象 PC、打印机、服务器 交换机、路由器
能否传递多 VLAN ❌ 不能 ✓ 能(通过标签区分)
PVID 作用 打标签时的 VID 无标签帧的归属 + 发送时 PVID 剥离

六、一个直观的例子

场景

PC-A(VLAN 10) ←Access→ SW1 ←Trunk→ SW2 ←Access→ PC-B(VLAN 10)
                           G0/0/1       G0/0/24        G0/0/1

PC-A → PC-B 通信,帧的标签变化

Step 1: PC-A 发出帧(无标签)
Step 2: SW1 Access 口 G0/0/1 打上 Tag=10
Step 3: SW1 内部查找 MAC 表 → 从 G0/0/24 发出
Step 4: SW1 Trunk 口 → VID=10 ≠ PVID=1 → 保留标签发出
Step 5: SW2 Trunk 口 G0/0/24 收到 → VID=10 在 allow-pass 中 → 接收
Step 6: SW2 内部查找 MAC 表 → 从 Access 口 G0/0/1 发出
Step 7: SW2 Access 口剥离标签 → 无标签帧送达 PC-B
帧的状态变化:

PC-A 发  → 无标签帧
           ↓
SW1 Access 收到 → 打 Tag=10
           ↓
SW1 Trunk 发出 → 保留 Tag=10(华为特性)
           ↓
SW2 Trunk 收到 → VID=10 允许 → 接收
           ↓
SW2 内部处理 → 带 Tag=10
           ↓
SW2 Access 发出 → 剥离标签
           ↓
PC-B 收  → 无标签帧

七、抓包对比:Access vs Trunk

在 Access 口抓包

Frame 1: DMAC=PC-B, SMAC=PC-A, Type=0x0800, IP...
              ↑ 没有 802.1Q Tag

在 Trunk 口抓包

Frame 1: DMAC=PC-B, SMAC=PC-A, Tag=0x8100, VID=10, Type=0x0800, IP...
              ↑ 有 802.1Q Tag,VID=10

这就是你拿着 Wireshark 在 Access 口和 Trunk 口抓包能看到的直观区别。


八、为什么 Trunk 口对 PVID 的帧要剥离标签?

这是华为交换机的一个兼容性设计,原因如下:

假设 Trunk 口的 PVID 保持默认 1:

  • Trunk 口连接的交换机之间,VLAN 1 的帧如果带标签传递,如果对端 Trunk 口的 PVID 也是 1,收到带标签的 VLAN 1 帧时可能因配置不一致而出问题
  • 剥离 PVID 的标签后,对端收到无标签帧,归入自己的 PVID(默认也是 1),VLAN 1 的管理流量正常工作
  • 华为设备的这个设计更容易兼容 Cisco 的 "native VLAN" 概念

Cisco 的习惯术语:Cisco 将 Trunk 上不发标签的 VLAN 称为 "Native VLAN",华为则用 PVID 机制实现。


九、思考

  1. 802.1Q 标签中的 VID 字段占多少 bit?取值范围是多少?
  2. Access 口收到一个带 VLAN 20 标签的帧,但 PVID = 10,交换机会怎么处理?
  3. Trunk 口上,VID=10 且 10=PVID,发出时带标签吗?(华为特性)
  4. 如果不做任何配置,交换机所有端口的默认端口类型是什么?默认 PVID 是多少?
  5. 用 Wireshark 在 Access 口抓包为什么看不到 VLAN 标签?
  6. 两台交换机 Trunk 口互连,对接收到无标签帧,它会属于哪个 VLAN?

下篇预告:第13篇《Hybrid端口_华为特有的灵活端口类型》——掌握华为特有的Hybrid端口类型及其灵活应用场景。