VLAN 端口逻辑只看两件事 ——入方向:收到帧,怎么标记 VLAN;出方向:发送帧,要不要剥离标签。

判断依据:端口类型、PVID、VLAN 允许列表。 交换机内部转发帧默认携带 VLAN 标签;MAC 地址学习、广播域隔离均以 VLAN 为边界。

一、基础概念表

表格

概念说明
Tag(802.1Q 标签)以太网帧插入 4 字节标签,其中 12bit 为 VID(VLAN 编号,范围 1~4094)
Untagged 帧不带 VLAN 标签的原始以太网帧,PC、机器人等终端默认收发这类帧
PVID端口默认 VLAN。端口收到 Untagged 帧时,打上该 VLAN 标签;思科体系中称为 Native VLAN
允许列表端口允许转发的 VLAN 编号集合,不在列表内的 VLAN 帧直接丢弃

二、入方向(接收帧)规则

表格

端口类型收到 Untagged 帧收到 Tagged 帧
Access打上 PVID 标签,校验 PVID 在允许列表后接收VID 等于 PVID 则接收,否则直接丢弃
Trunk打上 PVID 标签;PVID 在允许列表内则接收,否则丢弃VID 在允许列表内则接收,否则丢弃
Hybrid和 Trunk 一致和 Trunk 一致

三、出方向(发送帧)规则

表格

端口类型转发规则
Access仅转发 PVID 对应的 VLAN;发送前剥离 VLAN 标签,发出 Untagged 帧
Trunk① VID 不在允许列表 → 丢弃② VID 等于 PVID → 剥离标签发出③ VID 属于其他允许 VLAN → 保留标签发出
Hybrid按 VLAN 单独定义:在 untagged 列表内 → 剥标签发送在 tagged 列表内 → 保留标签发送不在两个列表 → 丢弃

✅ 速记口诀

  • Access:对接终端,单一 VLAN,进打标、出剥标
  • Trunk:交换机 / AP 互联,多 VLAN 透传,PVID 无标签,其余带标签
  • Hybrid:灵活混合模式,每个 VLAN 可单独指定是否带标签

四、典型组网示例

终端(VLAN10)→ Access 口(PVID 10)→ 交换机 → Trunk 口(PVID 1,允许 VLAN10、20)→ 对端交换机 / AP

  1. 终端发出 Untagged 帧,进入 Access 端口,打上 VLAN10 标签;
  2. 交换机在 VLAN10 广播域内查 MAC 地址表,从 Trunk 口转发;
  3. VLAN10 ≠ PVID (1),帧携带 VLAN10 标签发给对端;
  4. 对端 Trunk 口识别标签,在 VLAN10 内转发;最终从 Access 口剥离标签,交给终端。

五、配置样例

华为 / H3C

plaintext

# 接终端:Access口
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

# 接AP/交换机:Trunk口
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk pvid vlan 1
 port trunk allow-pass vlan 10 20

# Hybrid混合口(最灵活)
interface GigabitEthernet0/0/3
 port link-type hybrid
 port hybrid pvid vlan 10
 port hybrid untagged vlan 10
 port hybrid tagged vlan 20 30

# 查看端口VLAN信息
display port vlan

思科 IOS(无 Hybrid 端口)

plaintext

interface GigabitEthernet0/1
 switchport mode access
 switchport access vlan 10

interface GigabitEthernet0/2
 switchport mode trunk
 switchport trunk native vlan 1
 switchport trunk allowed vlan 10,20

# 验证命令
show interfaces trunk
show vlan brief

思科 & 华为差异要点

  1. 思科没有 Hybrid 端口;
  2. Trunk 的 Native VLAN 帧发送时不带标签;
  3. 链路两端 Native VLAN 不一致,会引发 VLAN 串流,CDP 会告警 native VLAN mismatch。

Linux 网桥(嵌入式开发常用,VLAN 过滤)

bash

# 开启网桥VLAN过滤
ip link set br0 type bridge vlan_filtering 1

# 等价Access口:VLAN10,untagged发出
bridge vlan add dev eth0 vid 10 pvid untagged
# 等价Trunk口:VLAN10、20带标签转发
bridge vlan add dev eth1 vid 10
bridge vlan add dev eth1 vid 20

# 查看VLAN表
bridge vlan show

Linux 字段对照:pvid 对应入方向规则;untagged 对应出方向是否剥标签。

六、和机器人 WiFi DHCP 故障的关联

WiFi 场景中,一个 SSID 通常映射一个业务 VLAN;AP 上联口为 Trunk,DHCP 中继配置在该 VLAN 的三层接口(SVI/VLANIF)。

表格

故障现象根因排查方向
机器人跨 AP 漫游后,DHCP 续约失败AP 上联 Trunk 未放行业务 VLAN;不同 AP 同 SSID 映射到不同 VLAN,漫游后三层网关不可达
获取到错误网段 IPAP 上联口 PVID 和 SSID 绑定 VLAN 配置错误,流量被划入错误 VLAN
广播包正常,单播不通VLAN 透传正常,重点排查 DHCP 中继、ACL 放通策略

排查建议: 让网管在机器人接入 AP 的上联交换机端口执行: 华为:display port vlan 思科:show interfaces trunk 确认业务 VLAN 在 Trunk 允许列表,同时检查该 VLAN 三层接口 DHCP 中继配置。

接口的出和入的定义

核心准则:入(Ingress)、出(Egress)永远站在交换机角度判断

帧从某个端口进入交换机 → 该端口执行入口规则

帧从某个端口离开交换机 → 该端口执行出口规则

同一帧在交换机内部转发流程:先经过入口规则 → 交换机内部 VLAN 转发 / MAC 查表 → 再经过出口规则

┌────────────────────── 交换机 ──────────────────────┐
终端A ──► Port A【入口规则】──► VLAN内MAC查表转发 ──► Port B【出口规则】──► 终端B
        接收、打标签逻辑                   放行、剥/保留标签逻辑

示例:Port A(Access,VLAN10),Port B(Trunk,允许 VLAN10/20,PVID=1)

正向:终端 A → Port A → Port B

  1. Port A(入口):终端 A 发送 Untagged 帧,Access 口按 PVID 打上 VLAN10 标签,接收该帧;
  2. 交换机内部:在 VLAN10 广播域查询 MAC 地址表;命中单播则转发至 Port B;未知单播 / 广播,向 VLAN10 内除入端口外所有端口泛洪;
  3. Port B(出口):
    • 校验 VLAN10 是否在端口允许 VLAN 列表内,不在则直接丢弃;
    • VID=10 ≠ PVID=1 → 保留 VLAN 标签向外发送。

反向:终端 B 回复流量 → Port B → Port A

  1. Port B(入口):收到带 VLAN10 标签的帧,校验 VID 在允许列表,接收;
  2. 交换机内部:VLAN10 内查表转发到 Port A;
  3. Port A(出口):Access 口,发送前剥离 VLAN 标签,以 Untagged 帧发给终端 A。

端口方向对照表

表格

流量方向Port APort B
A → B入口(Ingress)出口(Egress)
B → A出口(Egress)入口(Ingress)

两个极易混淆的关键点

  1. 视角区分 终端收到报文,对终端是 “入”,但对交换机对应的端口,是出(Egress)。 看配置、抓包、读厂商文档时,优先锁定视角:以交换机 / 接口为准。

  2. ACL 与策略的 inbound /outbound 沿用同一套逻辑

  • 物理接口 inbound:流量从该端口进入交换机;
  • 物理接口 outbound:流量从该端口离开交换机;
  • VLANIF/SVI 三层接口 inbound:流量从 VLAN 进入三层网关(终端→网关方向);

 交换机内部转发时,比如是从port a到port b,那么对于 port b来说,不是入吗

不是入,还是出。

关键在于:入和出是相对整台交换机来说的,不是相对端口。端口是交换机内部和外部线缆之间的"门":

- 入(ingress):帧从线缆经过这个端口进入交换机。
- 出(egress):帧从交换机内部经过这个端口发到线缆上。

从 A 转发到 B 时,帧是从交换机内部"到达" B,但它的目的是经过 B 离开交换机,所以对 B 来说是出。只有从 B 的线缆上收进来的帧,对 B 来说才是入。

可以把端口想成一扇门:你从屋里走到门口,是为了"出门",不能因为"到了门口"就说是"进门"。

从交换芯片的处理流程看更清楚

每个端口的硬件都分成入方向流水线和出方向流水线两套,一个帧只会经过 A 的入方向和 B 的出方向:

线缆 ──► [Port A 入方向]                                    [Port B 出方向] ──► 线缆
          · 解析帧                                            · VLAN 是否允许(出口过滤)
          · 确定 VLAN(打 PVID 或检查 VID)    ──交换矩阵──►      · 加标签或剥标签
          · 入方向 ACL                                         · 出方向 ACL
          · 查 MAC 表,决定发往哪个端口                          · 排队调度,发送

B 的入方向流水线只处理从 B 的线缆上收进来的帧,比如终端 B 发出的回包。从 A 转过来的帧不会经过它。

所以在配置上:
- 对 A→B 这个方向的流量,在 B 上起作用的是出口规则:允许列表、tagged/untagged、outbound ACL。
- B 的入口规则(PVID、inbound ACL)管不到这个方向的流量。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐