资讯动态

交换机之间VLAN通信原理与排障实战指南

发布时间:2026/9/8 7:50:37 来源:尧图企业网站定制
两台交换机之间明明划分了 VLANPC 也配好了同一网段的 IP可就是 ping 不通。这是网络工程师日常排障里出现频率极高的一幕。大多数时候问题不在 IP 地址也不在防火墙策略而是出在一个很基础却经常被忽略的环节两台交换机之间的链路没有用正确的身份让 VLAN 数据通过。VLAN 这个技术放在今天已经不算新鲜很多教材把它描述成“把物理局域网在逻辑上划分成多个广播域”。这个定义没有错但它太静态了。真实网络环境里VLAN 的价值从来不是“划出来”就结束而是要在交换机之间、在三层网关之上把流量正确地透传、隔离和路由起来。今天这篇文章我想围绕“交换机之间带 VLAN 通信”这条主线把原理、配置、排错和不同厂商的细节差异一次讲清楚。1. 先理解一个前提VLAN 在交换机之间是靠“标签”识别身份的1.1 虚线链路两端的交换机到底在交换什么两台 PC 接入同一台交换机划分到同一个 VLAN彼此通信没有问题。这个逻辑很好理解交换机在 MAC 地址表里基于 VLAN 端口建立转发条目收到帧以后查表从对应端口送出去。但换到两台交换机呢PC A 连在交换机 SW1 上PC B 连在交换机 SW2 上两台 PC 都划分在 VLAN 10。PC A 发一个数据帧到 SW1SW1 查 MAC 地址表发现目标 MAC 对应的是连接 SW2 的那个端口。于是这个帧被从该端口送出去进入网线或光纤到达 SW2SW2 再查表转发给 PC B。问题来了SW2 收到这个帧之后它怎么知道这个帧属于 VLAN 10如果 SW1 和 SW2 之间这条链路上没有携带 VLAN 信息SW2 只能按照接收端口的默认 VLAN 来处理这个帧。一旦 SW2 那边的默认 VLAN 和 PC B 实际所属的 VLAN 不一致这个帧就会被当成另一个 VLAN 的流量甚至直接被丢弃。所以交换机之间要正确通信必须解决一个核心问题帧进入链路之后如何让对端知道它从哪个 VLAN 来。标准答案就是打标签。IEEE 802.1Q 在以太网帧头部插入一个 4 字节的 Tag其中包含 12 位的 VLAN ID取值范围是 0 到 4095实际可用的是 1 到 4094。交换机会根据这个标签来决定把帧放进哪个 VLAN 转发。1.2 这里引出了 Access 和 Trunk 两种端口类型可能有人会问为什么平时接入 PC 的交换机端口不用打标签PC 的网卡默认发送的是不带 802.1Q 标签的标准以太网帧。如果交换机往 PC 方向发送的帧也带标签普通网卡根本识别不了直接就丢了。所以面向终端设备的端口必须把 VLAN 信息去掉再把不带标签的帧发给 PC。这种端口就是 Access 口。而交换机与交换机之间的连接或者交换机与路由器之间的连接需要的是另一种角色Trunk 口华为也叫 Hybrid思科叫 Trunk。Trunk 口默认允许所有 VLAN 通过而且发出的帧会保留 VLAN 标签。对端交换机收到带标签的帧就能准确识别它来自哪个 VLAN然后按照对应 VLAN 的 MAC 地址表继续转发。在这里我想强调一个很常见的认知误区Trunk 不是“把多个 VLAN 合并成一个通道”而是“在一条物理链路上通过标签区分不同 VLAN 的帧”。Trunk 口仍然保持每一个 VLAN 的逻辑隔离只是传输介质被复用了。所以交换机之间带 VLAN 通信的第一条铁律是交换机互联端口除非只承载一个 VLAN 且明确不需要扩展否则一律配置为 Trunk 口并确保两端允许相同的 VLAN 集。1.3 华为和思科在默认行为上的细微差异不同交换厂商对 Trunk 的实现细节有差异这一点在跨厂商环境里最容易出坑。以华为交换机为例它的 Trunk 口默认允许所有 VLAN 通过PVID端口的默认 VLAN默认是 1。思科交换机的 Trunk 口默认也是允许所有 VLAN 通过PVID 同样默认是 1。看起来一样但在实际配置里华为的 Trunk 端口如果在入方向收到不带标签的帧会把它归类到 PVID 对应的 VLAN 中思科则是通过 native VLAN 这个概念来支持这个行为默认也是 VLAN 1。如果两边都保持默认Trunk 链路并不需要额外配置。但是一旦你手动修改了对端某个端口的 native VLAN 或 PVID两边不一致就会出现“看似接口通了但 VLAN 间流量却异常”的隐蔽故障。这个问题的排查难度很高因为端口状态是 up 的物理链路没有任何问题但 VLAN 10 的广播帧、组播帧或者某些特定流量就是过不去。原因就是我前面说的帧的 VLAN 身份在两端理解不一致。2. 从“通到一台交换机”到“通到另一台交换机”中间差了什么2.1 配置两层交换机之间的 VLAN 透传假设现在有一个最常见的环境两台二层交换机 SW1 和 SW2各自下挂了几台 PC需要让相同 VLAN 的 PC 跨交换机通信。配置思路分四步在第一台交换机上创建 VLAN。在第二台交换机上创建相同的 VLAN。面向 PC 的端口划分到对应 VLAN并设置为 Access 口。在两台交换机互联的端口上配置 Trunk并允许对应 VLAN 通过。华为交换机上的典型配置是这样的# 在 SW1 上 vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 # interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20# 在 SW2 上 vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 # interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20这里有一个细节值得注意华为交换机的 Trunk 口默认会放行 VLAN 1。很多人在做实验时只在 Trunk 上放行了 VLAN 10 和 20导致 VLAN 1 的流量比如部分管理流量、部分协议报文无法通过从而出现一些奇怪的连接问题。建议写成明确只放行你需要的 VLAN 集合而不是依赖默认值。思科交换机上对应配置是这样的# 在 SW1 上 vlan 10 vlan 20 interface GigabitEthernet0/1 switchport mode access switchport access vlan 10 ! interface GigabitEthernet0/24 switchport mode trunk switchport trunk allowed vlan 10,20命令不同原理完全一样。关键是理解Trunk 的本质是“一条链路承载多个 VLAN 的带标签流量”。2.2 默认 PVID 为什么经常不被关注PVID 这个参数在很多网络工程师的配置模板里几乎是隐形的直到出了问题才注意到。PVID 的含义是当端口收到一个不带 VLAN 标签的帧时交换机默认把它归入哪个 VLAN。所有端口的帧接收处理逻辑都可以概括为这样一条规则如果帧带标签直接读取标签中的 VLAN ID确认该 VLAN 是否被允许通过。如果帧不带标签打上端口的 PVID 所对应的 VLAN ID再进入该 VLAN 的转发流程。对于 Access 口PVID 就是它划分的那个 VLAN。华为交换机上port default vlan设置的就是 PVID。在思科交换机上Access 口的 PVID 自动跟随switchport access vlan一般也不需要手动关注。但对于 Trunk 口PVID 的意义完全不同。Trunk 口同时承载多个 VLAN如果它收到不带标签的帧默认归入 PVID。华为交换机的 Trunk 口默认 PVID 是 1思科交换机的 native VLAN 默认也是 1。在纯三层交换机互联场景中这个默认值通常没问题因为交换机之间发出的帧都会带标签。但在涉及混合接入设备、IP 电话、AP 桥接、或者部分特殊终端时不带标签的帧会进入 Trunk 链路如果 PVID 设置不合理这些帧就会被划入错误的 VLAN。这里要给出一个更实用的建议如果 Trunk 链路两端设备都能理解 802.1Q 标签那就保持两端 PVID 一致并且不要把 PVID 对应的 VLAN 从允许列表里删掉。如果你明确知道这条链路上会出现不带标签的流量那就要单独规划一个专用 VLAN 作为 PVID并确保两端配置一致。2.3 为什么“链路通了”但“VLAN 不通”我在实际排障中见过最多的情况是接口状态为 up物理链路正常但 VLAN 10 的终端就是彼此 ping 不通。排查思路要有层次第一步看物理层。用display interface brief查看互联端口是否 up。如果 down检查网线、光模块、速率和双工模式。第二步看端口类型和允许 VLAN 列表。用display port vlan或display interface GigabitEthernet0/0/24查看端口类型、PVID 和允许通过的 VLAN。这里最容易发现问题是两边 Trunk 允许的 VLAN 集合不一致或者一端是 Access 口、一端是 Trunk 口。第三步看 MAC 地址表。在源端交换机上执行display mac-address vlan 10看看是否能学到目标设备的 MAC 地址。如果学不到说明二层转发路径有断裂返回值要回到上一步继续查。第四步看广播域隔离情况。如果 PC 能 ping 通同一台交换机上的其他 PC但 ping 不通另一台交换机上的同 VLAN PC而两端配置看起来也都正确那就要考虑是不是 Trunk 上某个 VLAN 被子接口或者三层接口拦截了。这个排查顺序有很强的现实意义很多人一上来就去查三层路由、查防火墙策略但二层的问题都没解决后面排查全白费。网络通信是一个逐层依赖的过程先解决下面一层的问题再去看上面一层的现象才能高效定位。3. 跨交换机 VLAN 间通信难点从“透传”变为“路由”3.1 二层只能隔离三层才能互通同一个 VLAN 之间的通信是二层转发的问题只要交换机 MAC 地址表正确、Trunk 透传正确就能通。但不同 VLAN 之间的通信就完全不同了。VLAN 10 的 PC 要访问 VLAN 20 的服务器源和目标不在同一个广播域内二层交换机永远不会跨 VLAN 转发帧。要实现通信必须经过三层设备——路由器或者三层交换机。在企业网络中最常见的方案就是用三层交换机启用 VLAN 接口SVISwitch Virtual Interface作为每个 VLAN 的网关。比如 VLAN 10 的网关是 192.168.10.1VLAN 20 的网关是 192.168.20.1。PC 把网关设成它所属 VLAN 的 SVI 地址跨网段访问时数据帧先到达网关三层交换机再通过路由表把数据从另一个 VLAN 接口转发出去。华为三层交换机上的配置是这样的vlan batch 10 20 interface Vlanif10 ip address 192.168.10.1 255.255.255.0 # interface Vlanif20 ip address 192.168.20.1 255.255.255.0思科三层交换机上的配置vlan 10 vlan 20 interface Vlan10 ip address 192.168.10.1 255.255.255.0 ! interface Vlan20 ip address 192.168.20.1 255.255.255.0 ! ip routing注意思科需要在全局配置模式下通过ip routing开启三层路由功能华为交换机一般在创建 VLANIF 后只要设备具备三层能力就会走路由流程。3.2 单臂路由和三层交换本质是同一个逻辑在早期路由器时代或者在没有三层交换机的环境中还有一种实现 VLAN 间通信的方式单臂路由。所谓单臂路由就是在路由器上用一条物理链路连接交换机然后在路由器的物理接口上划分子接口每个子接口对应一个 VLAN并配置一个 VLAN ID。交换机这边的端口要配置为 Trunk。当 VLAN 10 的帧到达路由器时路由器根据帧上的 VLAN 标签把数据交给对应的子接口处理子接口完成三层路由决策后再把数据打上新的 VLAN 标签沿原路送回交换机。用华为路由器来举例配置大致这样interface GigabitEthernet0/0/1.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 # interface GigabitEthernet0/0/1.20 dot1q termination vid 20 ip address 192.168.20.1 255.255.255.0单臂路由和三层交换机路由从三层的视角来看做的事情完全相同识别 VLAN 标签根据源和目标 IP 地址做出路由决策再重新封装帧转发到另一个 VLAN。差别只在于性能——路由器用软件转发三层交换机用硬件芯片转发吞吐量差别很大。所以在设计上要有一个判断如果 VLAN 间通信量不大、只是临时方案单臂路由够用。如果是正式业务尤其在汇聚层三层交换机是更合适的选择。3.3 网关放哪一侧决定了 Trunk 链路的压力跨交换机 VLAN 间通信还有一个网关位置的选择问题。如果网关放在核心交换机上接入交换机的 Trunk 链路只需要承载客户端到网关之间的二层流量。客户端访问网关时流量路径是PC → 接入交换机 → Trunk → 核心交换机网关→ 路由 → 核心交换机 → Trunk → 接入交换机 → 目标 PC。Trunk 链路上会同时出现两个方向的数据。如果网关放在接入交换机上则跨交换机访问流量会先到接入交换机完成路由再把数据从 Trunk 链路送到目标交换机。这种设计减少了核心交换机的压力但对接入交换机提出了三层能力要求而且如果接入交换机型号不支持三层功能这套方案就走不通。这里没有绝对的标准答案关键是理解取舍。更常见的生产网设计是接入层做二层汇聚或核心层做三层网关。这个模式可以简化接入层设备配置也让故障排查更集中。越简单的架构在长期维护中越可靠。4. 跨厂商环境里的 VLAN 通信细节最容易让你熬夜4.1 华为和思科对 Trunk 的默认行为差异在企业网络里华为和思科设备混存的情况并不少见。虽然 802.1Q 是一个国际标准但厂商在默认行为上的差异确实存在而且这些差异一旦不处理就会变成隐蔽故障。以 Trunk 口的默认允许 VLAN 列表来说华为交换机的 Trunk 口默认放行所有 VLAN思科交换机的 Trunk 口默认也放行所有 VLAN。看起来一致但需要注意华为的 Trunk 口在流量入方向时存在一个默认处理如果收到的帧不带标签它会被打上 PVID 的标签思科则通过 native VLAN 表示不带标签帧的归属。两边 VLAN 1 的语义是类似的。但这些默认值在以下情形会产生问题华为交换机配置port trunk pvid vlan 10后如果思科那边的 native VLAN 不是 10两端对不带标签帧的 VLAN 归属判断就会不一致。华为交换机如果使用port trunk allow-pass vlan all思科端默认也是 all但如果你在思科端使用了switchport trunk allowed vlan remove移除某些 VLAN而华为端没有对应调整就会出现一边发送、一边丢弃的情况。在华为交换机的 Hybrid 端口模式下可以根据需要指定某些 VLAN 剥标签、某些 VLAN 保持标签灵活性比 Trunk 更高但也更复杂跨厂商对接时更容易出错。面对这些差异我在实际项目中会采取一个相对安全的原则凡是 Trunk 链路明确指定允许通过的 VLAN 列表不要依赖默认 all如果链路涉及不带标签的流量明确规划 PVID/native VLAN并在两端保持一致。4.2 对接锐捷或华三时命令和逻辑的换算锐捷交换机是一个在国内项目里出现频率很高的品牌它的命令风格整体接近思科。基本的 Trunk 配置命令如下interface GigabitEthernet 0/1 switchport mode trunk switchport trunk allowed vlan 10,20华三H3C交换机的配置风格在几十个核心命令上和华为非常接近很多华为的老工程师切到华三设备基本无感vlan 10 vlan 20 interface GigabitEthernet1/0/1 port link-type trunk port trunk permit vlan 10 20熟悉多个厂商之后你会发现一个规律这些平台的差异主要集中在命令关键词上但底层逻辑完全统一。只要理解了 VLAN 标签在链路中的传递方式、PVID 对无标签帧的处理逻辑、以及三层网关的转发路径换任何一个品牌都能快速对照配置。这也是为什么我不建议初学者只背厂商命令。命令背得再熟不理解为啥这样写换一个环境照样抓瞎。真正值得花时间的是理解那套通用的转发原理。4.3 一个跨厂商的排障案例说一个典型的案例华为接入交换机通过 Trunk 连接思科核心交换机VLAN 10 和 VLAN 20 在两边都存在。接入交换机上的 PC 能 ping 通自己的网关但 ping 不通同一 VLAN 内另一台接入交换机上的 PC。排查过程如下查看物理层互联端口均为 up。查看思科核心交换机配置Trunk 接口允许 VLAN 10 和 20。查看华为接入交换机配置Trunk 放行 VLAN 10 和 20。在华为接入交换机上执行display mac-address vlan 10发现学不到远端设备的 MAC。再查看两端端口的 PVID 和 native VLAN发现思科核心交换机端口被设置了switchport trunk native vlan 99而华为接入交换机端口的 PVID 仍然是 1。由于 VLAN 1 在华为端没有被显式放行而思科端的 native VLAN 99 已经变化两边对无标签帧的归属判断不一致导致部分控制协议报文无法正确处理最终 MAC 地址表学习失败。修复方法把两端 PVID 和 native VLAN 改成一致的专用管理 VLAN或者华为端 PVID 改 99并确保 VLAN 99 在两端都被允许。问题解决。这个案例的关键点不是最后改成什么数字而是提醒我们跨厂商 Trunk 对接不仅要看 allow VLAN 列表还要看 PVID/native VLAN、VLAN 1 的默认放行策略、以及边缘端口如思科的 PortFast华为的 stp edged-port对协议报文的影响。每一条默认值都可能成为排障路上的陷阱。5. 交换机互联的长期稳定性靠的其实是对细节的敬畏5.1 配置规范化把 VLAN 编号、命名和用途统一起来VLAN 通信的配置本身并不复杂但真实网络中最容易出问题的不是某一次配置而是长期演进中没有人维护 VLAN 规划。一个可长期维护的网络至少要做到三件事VLAN ID 全公司统一规划不能在不同交换机上同一个业务用不同编号。每个 VLAN 在交换机上要有明确名称比如vlan 10 name Office_PC这样查看配置时能一眼知道用途。Trunk 端口必须显式指定允通的 VLAN 列表而不是依赖默认值。这样未来新增 VLAN 时不会因为忘记放行而出现“部分通部分不通”的诡异现象。5.2 我建议的交换机互联排障清单把前文的经验收束成一个可复用的排查清单按顺序执行会节省大量时间检查层检查项确认方法物理层端口是否 up光模块/网线是否正常display interface brief或show interfaces status二层接口互联端口是否为 Trunk 或 Hybrid 并放行对应 VLANdisplay port vlan或show interface trunk标签规则两端 PVID/native VLAN 是否一致display interface查看 PVID思科用show interface trunk允许列表两端允许通过的 VLAN 集合是否完全一致比较port trunk allow-pass与switchport trunk allowed vlan二层转发表是否学到目的 MAC 地址display mac-address vlan 10或show mac address-table vlan 10三层网关VLANIF 是否存在且 IP 正确VLAN 内 PC 网关是否指向该地址display ip interface brief或show ip interface brief安全策略是否配置了 ACL、IPSG、DHCP Snooping 等策略影响转发检查端口下绑定的策略和全局策略如果你按照这个表格排查完还没有定位问题那就要考虑 STP 阻塞、链路聚合成员接口不一致、或者交换机软件版本缺陷。这类问题相对少见但一旦存在排障时间会显著拉长。5.3 警惕 VLAN 1 被过度依赖还有一个很多人避而不谈的问题VLAN 1 的默认放行。原始标准中VLAN 1 是默认 VLAN不能删除也无法改名所有端口默认都在 VLAN 1 中。很多人在做配置时会把管理 IP 放在 VLAN 1 上。这在小型实验环境没有问题但一旦网络规模变大VLAN 1 会被不断放大的广播流量淹没管理面和数据面混在一起风险很高。更合理的做法是划分一个专用管理 VLAN把所有交换机管理地址放进这个 VLAN并通过 ACL 限制登录来源。Trunk 口上尽量不让管理 VLAN 参与业务放行减少无标签帧在核心链路上出现的概率。这需要你在网络建设初期就做好规划而不是等故障发生后再来补救。等到线上环境已经跑起来再改管理 VLAN通常会涉及所有交换机动作很大。6. 理解 VLAN才能真正理解网络里的“隔离”和“互通”从一个最基础的场景开始两台交换机之间通信为什么配置 VLAN 之后反而可能不通答案不是 VLAN 带来了障碍而是我们没有正确地让 VLAN 跨链路传递身份。看似是接口类型的选择问题背后其实是对标签转发机制的掌握程度。看似是三层网关放在哪里的设计问题背后其实是对二层隔离与三层互通的整体理解。在这个领域待得越久我越觉得网络工程里最难的不是某个高级特性的配置而是把底层原理和现网行为对上号。你理解了 802.1Q 标签就不会在 Trunk 和 Access 之间选错你理解了 PVID 对无标签帧的处理方式就不会在跨厂商环境里迷路你理解了三层网关的路径就不会把跨交换机 VLAN 通信问题误判成路由问题。所以我的建议很简单先掌握原理再把原理落到厂商命令上最后用一套规范的排查顺序来面对所有“不通”。这三个能力叠加起来比背下所有厂商的命令手册都更有价值。下次当你遇到交换机之间带 VLAN 通信的问题时不妨先问自己三个问题这条链路上帧的身份是否被正确标记两端对无标签帧的归属是否一致三层网关是否在正确的设备上把这三个问题回答清楚大部分故障就已经解决了一半。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价