第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 机制实现。
九、思考
- 802.1Q 标签中的 VID 字段占多少 bit?取值范围是多少?
- Access 口收到一个带 VLAN 20 标签的帧,但 PVID = 10,交换机会怎么处理?
- Trunk 口上,VID=10 且 10=PVID,发出时带标签吗?(华为特性)
- 如果不做任何配置,交换机所有端口的默认端口类型是什么?默认 PVID 是多少?
- 用 Wireshark 在 Access 口抓包为什么看不到 VLAN 标签?
- 两台交换机 Trunk 口互连,对接收到无标签帧,它会属于哪个 VLAN?
下篇预告:第13篇《Hybrid端口_华为特有的灵活端口类型》——掌握华为特有的Hybrid端口类型及其灵活应用场景。