news 2026/9/8 6:31:26

交换机间VLAN通信实战:Trunk、PVID与VLANIF配置排错指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
交换机间VLAN通信实战:Trunk、PVID与VLANIF配置排错指南

交换机之间带VLAN的通信,是所有网络运维和数通初学者绕不开的问题。在单台交换机上划分VLAN、配置Access口,很多人能很快完成;一旦改成两台交换机互联,就很容易出现跨交换机同VLAN主机互相不通、Trunk看起来配对了但Ping不通、三层VLANIF地址配了却无法访问其他VLAN等奇怪现象。大多数问题的根源并不在某个孤立端口,而在VLAN标记(Tag)、Trunk允许列表、PVID(Port-based VLAN ID)以及三层网关这几层规则没有配合好。

本文从二层入手,用华为eNSP模拟两台交换机互联,先让两个VLAN跨交换机互通,再通过三层交换机实现VLAN间通信。配置过程中会解释Access与Trunk的本质区别、PVID对Untagged帧的影响,并给出从物理端口到三层路由的排查链路。读完可以独立完成多交换机VLAN互联的配置,也能针对“同VLAN不通、跨VLAN不通”快速定位原因。

1. 先理解VLAN通信的两种场景和一条Trunk链路上的关键规则

1.1 单台交换机划分VLAN时,通信规则到底是什么

VLAN可以把一台物理交换机划分成多个互相隔离的二层广播域。设备加入VLAN后,交换机会在MAC地址表和转发逻辑上给数据帧打上VLAN标签,转发只在相同VLAN的端口之间进行。这里的“隔离”是二层隔离:不同VLAN的帧不会互相广播,也不会直接转发。

在这种场景里,一个Access端口只属于一个VLAN。进入Access口的普通以太网帧没有VLAN标签,交换机会按该端口所属VLAN处理。所以Access端口上“允许通过VLAN列表”不是重点,“这个口属于哪个VLAN”才是重点。VLAN 10里的PC1与同交换机下的PC2通信,走的是二层交换路径,不需要配置网关。

1.2 跨交换机通信为什么会把问题放大

当两台交换机用一条物理链路互联,而这条互联链路上同时承载VLAN 10和VLAN 20时,问题就不再是“一个口属于哪个VLAN”,而是“一条链路上怎么能让多个VLAN的数据同时通行且互不混淆”。

答案依赖IEEE 802.1Q。交换机在把数据帧发送到Trunk链路之前,会在以太网头部加入VLAN Tag,用于标识这个帧属于哪个VLAN;对端交换机根据Tag知道该帧应该进入哪个VLAN,再转发给对应Access端口时,把Tag去掉。这样一条物理链路就能同时传输多个VLAN的数据。

1.3 真正决定通信结果的三个规则

  • Tagged:帧带VLAN标签。
  • Untagged:帧不带标签。
  • PVID:端口对无标签帧默认划分到的VLAN。

Access口发出去的帧通常是Untagged,因为它面向终端设备。Trunk口除了Native VLAN(本征VLAN)对应的帧外,其他VLAN的帧通常是Tagged。PVID决定了一个无标签帧进入端口后会被划分到哪个VLAN,也决定Trunk口上哪个VLAN以Untagged方式发送。

端口类型入方向无标签帧出方向行为典型场景
Access归入PVID,PVID等于default vlan无标签出接PC、服务器、AP
Trunk归入PVID,默认PVID=1VLAN 1默认无标签出,放行的其他VLAN打标签出交换机互联、上行核心
Hybrid归入PVID按用户配置决定打标或不打标灵活业务口,如同时接用户和上行

实际故障中,很多问题都出在这三个规则的组合。比如Trunk两端PVID不一致时,无标签帧会被错误划分到另一个VLAN;Trunk没有放行业务VLAN时,再正确的Access配置也无法跨交换机转发。

2. 搭建实验环境:两台交换机、两个VLAN、一条Trunk

2.1 用eNSP搭建拓扑

学习环境推荐使用eNSP。它模拟华为VRP命令行,帮助在没有真实交换机的情况下验证VLAN、Trunk和VLANIF配置。不同系列设备、不同版本命令存在差异,落地真实设备前先确认设备型号和命令兼容性。

实验拓扑设计如下:

  • LSW1:承担三层网关,配置VLANIF 10和VLANIF 20。
  • LSW2:作为接入交换机,只做二层转发。
  • PC1:接LSW1 GE0/0/1,属于VLAN 10。
  • PC3:接LSW1 GE0/0/2,属于VLAN 20。
  • LSW1 GE0/0/0与LSW2 GE0/0/0互联,配置为Trunk。
  • PC2:接LSW2 GE0/0/1,属于VLAN 10。
  • PC4:接LSW2 GE0/0/2,属于VLAN 20。
设备端口连接对象端口类型VLAN
LSW1GE0/0/1PC1AccessVLAN 10
LSW1GE0/0/2PC3AccessVLAN 20
LSW1GE0/0/0LSW2 GE0/0/0Trunk放行VLAN 10、20
LSW2GE0/0/1PC2AccessVLAN 10
LSW2GE0/0/2PC4AccessVLAN 20
LSW2GE0/0/0LSW1 GE0/0/0Trunk放行VLAN 10、20

2.2 IP与VLAN规划

VLAN ID网段PC地址网关
VLAN 10192.168.10.0/24PC1 192.168.10.1,PC2 192.168.10.2192.168.10.254
VLAN 20192.168.20.0/24PC3 192.168.20.1,PC4 192.168.20.2192.168.20.254

网关只放在LSW1上。LSW2不配置VLANIF,也不把PC的网关指向LSW2。实际生产环境中,网关通常放在核心交换机或汇聚交换机上,接入层做二层转发。

2.3 端口类型规划:Access、Trunk分别在哪些位置

端口类型不是随便选的。面向PC、服务器、打印机这类终端设备的口,使用Access最合适,因为终端发出的帧不带Tag,也期望收到的帧不带Tag。交换机之间的互联口,如果需要同时承载多个VLAN,必须使用Trunk或Hybrid。Access口即使配置了port default vlan 10,也只能在一个VLAN内工作,无法把VLAN 10和VLAN 20同时传出去。

因此,这个实验里:

  • PC侧全部用Access。
  • LSW1与LSW2互联口全部用Trunk。

如果互联口误配成Access,VLAN 10可以通,VLAN 20一定不通,因为Access口只能承载一个VLAN。

2.4 为什么先规划再动手配置

很多人上来就敲配置,敲完发现各种不对。先规划端口类型和IP地址,可以把二层和三层分开验证:第一步只验证同VLAN跨交换机互通,第二步再打开VLAN间路由。先做第一步,如果不通就检查Trunk和Access;第一步通了再配置VLANIF,否则排查时会同时面对二层和三层的问题,多一层干扰。

注意:规划阶段可以画一张简单拓扑图,标记每条链路两端端口、端口类型、VLAN和IP。排障时这张图比记忆可靠得多。

3. Access与Trunk的配置逻辑:先让同一个VLAN跨交换机互通

3.1 设备基础配置:创建VLAN

在LSW1和LSW2上都创建VLAN 10、20。

LSW1:

system-view sysname LSW1 vlan batch 10 20

LSW2:

system-view sysname LSW2 vlan batch 10 20

sysname用于区分设备,尤其在查看日志和远程管理时,能直接知道当前操作的是哪一台设备。vlan batch 10 20一条命令创建多个VLAN,比逐条vlan 10、vlan 20更高效。

3.2 配置Access端口

LSW1上配置PC所属端口:

interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quit

LSW2上配置对应端口:

interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quit

Access口只能属于一个VLAN。port default vlan 10定义了该端口的PVID,也决定Access口归属的VLAN。PC发出的帧无标签,进入端口后被分配VLAN 10,交换机根据MAC表把帧转发到目标端口,出Access口前去掉Tag。终端设备不感知VLAN Tag。

3.3 配置Trunk互联口

LSW1与LSW2的互联口GE0/0/0配置为Trunk:

interface GigabitEthernet0/0/0 port link-type trunk port trunk allow-pass vlan 10 20 quit

LSW2同样配置:

interface GigabitEthernet0/0/0 port link-type trunk port trunk allow-pass vlan 10 20 quit

port link-type trunk让端口进入Trunk模式。华为VRP中,Trunk口默认只放行VLAN 1,所以业务VLAN 10、20必须用port trunk allow-pass vlan 10 20显式放行。不同版本命令可能有差异,部分版本也支持port trunk allowed vlan 10 20,以设备帮助信息为准。

这里没有修改PVID,因此VLAN 1作为Native VLAN保持Untagged,VLAN 10、20在Trunk上以Tagged方式传输。

3.4 验证跨交换机同VLAN通信

启动设备后,先给PC配置IP。PC1地址192.168.10.1/24,PC2地址192.168.10.2/24,PC3地址192.168.20.1/24,PC4地址192.168.20.2/24。

在LSW1上执行:

display vlan display port vlan

关注display port vlan的输出。正常结果是:GE0/0/0上VLAN 10、20为Tagged状态,GE0/0/1上VLAN 10为Untagged,GE0/0/2上VLAN 20为Untagged。如果GE0/0/0上业务VLAN显示为Untagged,说明PVID被修改过,需要重点检查。

然后测试:

  • PC1 ping PC2,应该通。
  • PC3 ping PC4,应该通。
  • PC1 ping PC3,此时不通是正常的,因为还没有三层网关。

eNSP中刚启动设备时STP需要收敛,第一次ping超时非常常见。等接口状态稳定后再测试。

4. 通过三层交换机和VLANIF实现VLAN间通信

4.1 为什么二层交换机不能直接实现VLAN间通信

同一VLAN内的PC通信,依靠MAC地址表完成二层转发。不同VLAN间的PC要通信,数据帧的目标MAC地址不在本地二层域内,必须提交给网关做三层路由,再根据路由表决定从哪个VLAN转发出去。二层交换机没有路由能力,因此必须引入三层设备。

VLAN间路由也被称为路由VLAN。核心思路是给每个VLAN配置一个三层接口当作网关,三层设备根据目的IP做路由。实验中使用LSW1作为三层交换机,通过VLANIF实现。

4.2 在核心设备上创建VLANIF

在LSW1上执行:

interface Vlanif10 ip address 192.168.10.254 255.255.255.0 quit interface Vlanif20 ip address 192.168.20.254 255.255.255.0 quit

然后给PC配置网关:

  • PC1:192.168.10.254
  • PC2:192.168.10.254
  • PC3:192.168.20.254
  • PC4:192.168.20.254

配置完成后,PC1与PC3之间应能通信。

4.3 VLANIF和物理端口的关系

VLANIF不是物理端口,而是逻辑接口。只要交换机上存在VLAN 10,并且至少有一个端口属于VLAN 10,VLANIF 10就能转发该VLAN的报文。VLANIF上的IP地址就是该VLAN内终端的网关。

这里有一个常见坑:LSW2也会学习到VLAN 10、20,如果为了“图方便”在LSW2上也配置VLANIF 10地址192.168.10.254,就会与LSW1的网关地址冲突。终端通过ARP学习网关MAC时,可能学到LSW2的MAC,也可能学到LSW1的MAC,结果是流量时通时断。

实际生产环境中,如果做双网关高可用,通常用VRRP或堆叠做主备,而不是简单地在两台设备上重复配置同一个IP。

4.4 关于port trunk pvid vlan的常见误区

网上经常能看到port trunk pvid vlan 10这类配置片段。它到底做什么?

PVID作用于Trunk口识别无标签帧。默认所有端口PVID都是1,Trunk口把VLAN 1作为Native VLAN,出口不打Tag。如果执行port trunk pvid vlan 10,那么这个Trunk口收到无标签帧后归入VLAN 10,并且VLAN 10的帧从该口输出时不再打Tag。

这会导致两个后果:

  • 对端Trunk口如果PVID仍是1,收到这些不带Tag的VLAN 10帧后,会当成VLAN 1的帧处理,VLAN归属直接错乱。
  • 如果两端都改成pvid vlan 10,VLAN 10帧在Trunk上全部不打Tag,抓包时看到VLAN 10流量没有Tag,和预期不符。

注意:在没有明确Native VLAN需求时,不建议随意修改Trunk的PVID。如果确实要改,至少保证链路两端PVID一致,并且不要把需要跨交换机传输的业务VLAN设为PVID。

4.5 验证VLANIF和VLAN间路由

在LSW1上执行:

display vlan brief display ip interface brief ping -a 192.168.10.254 192.168.20.1

display ip interface brief可以看到VLANIF 10和VLANIF 20的IP地址和UP状态。display vlan brief可以看到VLAN状态为Enable。然后从PC1 ping PC3,结果应该通。

有些资料会把命令记混写成display int vlan brief。华为VRP中更常见的查看三层接口命令是display ip interface brief,查看VLAN状态是display vlan brief。不同设备版本存在差异,无法确认命令时可以使用display ?查看支持的命令列表。

5. 交换机带VLAN通信的排错链路

5.1 排错顺序:先二层后三层,先本端再对端

遇到带VLAN的通信问题,不建议随机敲命令。按以下顺序检查:

  1. 物理链路是否UP,双工和速率是否协商一致。
  2. 端口link-type是否两端一致。
  3. 两端Trunk放行的VLAN列表是否一致。
  4. Trunk的Tag/Untagged状态和PVID是否一致。
  5. 三层接口(VLANIF)是否创建,IP是否正确。
  6. 终端IP、掩码、网关是否正确。
  7. 路由表、ACL和安全策略是否放行。

先确认二层问题,再查三层。如果PC1 ping PC3不通,直接去查ACL,很可能前面的Trunk根本没放行VLAN 20,只会白费时间。

5.2 场景一:同交换机下能通,跨交换机同VLAN不通

现象:PC1 ping PC2不通,但PC1 ping LSW1下其他同VLAN设备能通。

可能原因:

  • 互联口被误配成Access,无法承载多个VLAN。
  • Trunk没放行VLAN 10。
  • 对端Trunk放行列表不一致。
  • 线缆接错端口或接口没有UP。
  • STP阻塞了互联端口。

检查命令:

display interface GigabitEthernet0/0/0 display port vlan display stp brief

处理方式:

  • 确认互联口是Trunk,并执行port trunk allow-pass vlan 10 20。
  • 两端放行列表必须一致。
  • STP收敛需要时间,如果端口一直阻塞,检查是否存在环路。不要为解决问题直接关闭STP,生产环境下关闭STP风险很高。

5.3 场景二:VLANIF配置了,跨VLAN还是不通

现象:同VLAN互通正常,但PC1 ping PC3不通。

按下面顺序检查:

  • 先ping自己的网关192.168.10.254。不通说明二层或VLANIF有问题。
  • 再ping LSW1上的VLANIF 20地址192.168.20.254。不通说明VLANIF20或VLAN20三层转发有问题。
  • 最后ping PC3地址192.168.20.2。不通检查PC3网关是否配置正确。

常见原因包括:

  • PC没有配置网关。
  • LSW1不是三层交换机,不支持VLANIF。
  • VLANIF 20没有创建。
  • 中间接入层设备把Tag剥掉,导致VLAN归属变化。
  • 设备间使用Access口互联,VLAN 20流量无法穿过链路。
  • ACL或安全策略拦截了VLAN间的报文。

5.4 场景三:PVID不一致导致的Tag/Untagged错乱

现象:Trunk抓包时看到VLAN 10的帧没有Tag,或者对端交换机把VLAN 10流量当成VLAN 1处理。

原因:一端Trunk执行了port trunk pvid vlan 10,另一端没有;或者两端PVID配置不一致。

检查方式:display port vlan,关注Untagged列。正常情况下,Trunk放行的业务VLAN应该是Tagged,只有VLAN 1或人为设置为Native VLAN的VLAN是Untagged。

处理建议:

  • 两端PVID保持一致。
  • 不要把业务VLAN设为PVID。
  • 如果必须使用不同Native VLAN,要做好这条链路两侧的流量隔离,不要混用业务VLAN。

5.5 场景四:核心交换机Telnet正常,PC远程登录却失败

这个场景在真实运维中很典型:从核心交换机Telnet任何一台接入交换机都正常,但从某个PC远程登录就失败。

排查方向:

  • 管理VLAN是否可达。管理地址所在VLAN的VLANIF是否配置了路由,Trunk是否放行了该管理VLAN。
  • PC与管理VLAN是否在同一广播域或同一路由域。
  • 远程管理服务是否启用了源地址白名单策略。ACL如果只允许管理网段访问,PC所在业务VLAN自然会被拒绝,这属于安全策略设计,不是配置错误。

远程管理服务本来就应当只对管理网段开放。确认管理面ACL、SSH或Telnet服务和VTY权限即可。不要为了“让PC能登录”而放宽所有源地址限制。

5.6 通用排错表

问题现象常见原因验证命令解决方向
同VLAN跨交换机不通Trunk未放行该VLANdisplay port vlan两端加入allow-pass
业务VLAN抓包无Tag该VLAN成为Native VLANdisplay port vlan、抓包恢复PVID一致
跨VLAN不通缺VLANIF或网关错误display ip interface brief、ipconfig创建VLANIF并配网关
时通时断STP收敛、环路、双工不匹配display stp brief、display interface检查环路和链路协商
远程管理失败ACL限制、管理VLAN不可达display acl、display ip routing-table按源地址放行或修正路由

6. 生产环境建议、快速参考与扩展方向

6.1 学习环境与生产环境的差异

eNSP中配置成功,不代表生产环境可以原样照搬。真实交换机还要关注以下几点:

  • 生成树协议:Trunk链路上要确认STP不会阻塞。存在环路风险时,端口全部放行后,一个广播帧可能在环路里反复复制,引发广播风暴。
  • 链路冗余:单条Trunk是单点,建议用Eth-Trunk(链路聚合)承载VLAN,提高带宽,同时保证链路可靠性。
  • 三层架构:接入层通常只做二层,网关放在核心交换机。不要在每台接入交换机上都配置同一网段的VLANIF。
  • 安全策略:VLAN间通信、远程管理都要有ACL策略,不能只依赖VLAN做隔离。
  • 配置备份:操作前保存当前配置、备份版本文件,配置错误时能够回滚。

保存配置命令:

save

6.2 参数快速参考表

功能华为VRP常用命令作用
创建多个VLANvlan batch 10 20一次性创建VLAN 10、20
Access口划入VLANport link-type access / port default vlan 10端口归属VLAN 10
Trunk口放行VLANport link-type trunk / port trunk allow-pass vlan 10 20Trunk承载VLAN 10、20
设置Trunk PVIDport trunk pvid vlan 10设置无标签帧默认VLAN
创建VLANIFinterface Vlanif10 / ip address ...创建三层网关
查看VLAN状态display vlan brief确认VLAN存在且端口已加入
查看端口VLANdisplay port vlan确认Tag/Untagged状态
查看三层接口display ip interface brief确认VLANIF状态和IP

不同厂商设备命令不同。锐捷、思科等设备的命令关键字和查询方式有差异,但Access/Trunk/PVID的处理逻辑一致。切换厂商设备前,先查看对应厂商文档。

6.3 发布前检查清单

  • [ ] 所有互联口两端link-type一致。
  • [ ] Trunk两端放行VLAN列表一致。
  • [ ] Trunk两端PVID一致,业务VLAN保持Tagged。
  • [ ] VLANIF只在一台三层设备配置,或按高可用方案统一配置。
  • [ ] 终端PC地址、掩码、网关正确。
  • [ ] 路由可达,ACL放行必要流量。
  • [ ] STP状态正常,无环路。
  • [ ] 配置已保存,版本有备份。

6.4 扩展方向

带VLAN的通信不只在传统交换机里出现。后续可以围绕下面几个方向继续深入。

基于IP子网的VLAN划分:不按端口划分VLAN,而是根据报文源IP自动分类,适合终端频繁移动的场景。

虚拟化与容器网络:K8s中Multus多网络插件会创建多套网络接口,不同Pod可以挂到不同VLAN或叠加网络,底层依然依赖VLAN Tag完成隔离。

分布式交换机:在虚拟化环境中,分布式交换机把多台宿主机虚拟端口统一管理,VLAN策略集中在控制面维护,转发面在各宿主机实现。

多VLAN网卡:让一块物理网卡同时承载多个VLAN,通常做法是在Linux上配置VLAN子接口或把网卡加入桥接设备后打Tag,适合虚拟化宿主机和带VLAN的业务服务器。

单臂路由与VRRP:如果只有二层交换机,VLAN间通信可以通过路由器子接口完成,也就是路由器上创建多个子接口分别对应不同VLAN并做802.1Q封装,这是理解“VLAN Tag在路由场景下如何再打标和剥标”的好实验。

要从根本上掌握交换机之间的VLAN通信,关键不是背命令,而是建立一条判断链路:先确认一根物理链路上的数据帧如何打Tag、Trunk放行了哪些VLAN、无标签帧归到哪个VLAN,再进入三层路由。把本文的Trunk实验完整做完后,建议用Wireshark或eNSP自带抓包功能抓一次Trunk链路,亲眼对比VLAN 10和VLAN 20帧的Tag差异。理解了这个过程,后面再学VRRP双网关、Eth-Trunk、虚拟化多VLAN,都会顺畅很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 6:30:46

离线环境libpcap源码编译安装攻略:依赖链与排错指南

简介:libpcap(数据包捕获函数库)是Unix/Linux平台上广泛使用的网络数据包捕获开发库,支持原始数据包捕获、自定义数据包发送、流量采集统计与规则过滤,也是tcpdump、Wireshark等常见网络工具的重要底层依赖。但在离线、…

作者头像 李华
网站建设 2026/9/8 6:30:41

ARM Compiler v5.05 Build 169在Windows下的部署与排坑指南

简介:这是ARM Compiler v5.05 Build 169的Windows版本安装更新包,主要为使用Keil MDK及ARM Compiler 5工具链的嵌入式开发者提供。它用于在已有相应许可证的ARM Compiler 5产品上完成版本替换,适用于需要锁定编译器版本、保证构建可复现的工程…

作者头像 李华
网站建设 2026/9/8 6:29:55

HyperOSUnfucker深度解析:Android系统性能解锁原理与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/8 6:28:44

前端录音上传完整实战:getUserMedia、MediaRecorder与权限踩坑

简介:面向前端开发者的音频功能实战资源,聚焦H5调用麦克风获取实时音频流、录音并上传后台的完整链路,适合需要实现语音识别、在线通话、实时音频处理等交互应用的前端初中级开发者。资源共9个文件,核心包括3个JavaScript脚本与2个…

作者头像 李华
网站建设 2026/9/8 6:27:22

基于BP神经网络与MFCC的音乐风格自动分类:MATLAB实现全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/8 6:24:32

3DMAX次世代道具建模:Box起型制作药水瓶全流程

这次我们来看一个3DMAX游戏建模中非常常用、但常被讲得绕弯的需求:如何用一个box,快速搭出次世代药水瓶。这件事的实用价值不在于“做一个瓶子”本身,而在于把次世代道具建模的完整链路走通——从box起型、可编辑多边形调整、涡轮平滑&#x…

作者头像 李华