多 VLAN 跨路由组网这个题目,看着像是认证教材里的标准实验,但真正在设备上从头到尾敲一遍配置、抓一遍包、再回头梳理协议行为,你会发现很多“理所当然”的结论其实经不起推敲。比如同一台交换机上两个 VLAN 明明都配了网关,可终端就是 ping 不通;比如 trunk 口明明放通了所有 VLAN,可某些网段就是不通;再比如单臂路由和三层交换都能实现 VLAN 间路由,但抓包看到的 ARP 行为完全不一样。这篇文章不绕弯子,直接把我做华为多 VLAN 跨路由组网实验的完整过程、配置命令、验证结果和协议层面的思考整理出来,实验基于 VRP 平台,用 eNSP 模拟器完成,思路和真机一致,可以照着敲。
适合谁看?刚学完 VLAN 基础、准备啃 VLAN 间路由和三层交换的人;被“trunk 口 PVID”坑过的人;还有那些想在模拟器里把抓包、排错、路由表分析一次做透的人。我会尽量把每一步为什么这么做讲清楚,把排障时看哪些字段也写清楚。
1. 实验需求与整体拓扑设计:别急着敲命令,先想清楚数据流怎么走
做网络实验最容易犯的毛病就是一上来就配 IP、配 VLAN,敲完发现不通,然后开始瞎猜。我这次刻意先把需求拆开,把拓扑画明白,把地址规划写在纸上,再动手配。
1.1 需求拆解:两层交换与三层互通的结合点
实验要解决两个层面的问题:
- 二层层面:同一台交换机(或跨交换机)上多个 VLAN 的隔离与透传。VLAN 10 和 VLAN 20 的终端不能直接二层互通,这是 VLAN 隔离广播域的基本诉求。
- 三层层面:VLAN 10、VLAN 20、VLAN 30 三个网段之间需要能够互相访问,也就是 VLAN 间路由。核心问题是:网关放在哪儿?用单臂路由还是三层交换机?
我把这两个问题放在同一个拓扑里解决,既包含纯二层链路设计,又包含三层网关终结。这样做完一个实验,既能看清 VLAN 在接入链路上的行为,也能看清路由设备如何处理来自不同 VLAN 的流量。
1.2 拓扑与地址规划:给每个接口一个明确身份
拓扑设计如下:
- LSW1 作为二层接入交换机,下挂两个终端:PC1 属于 VLAN 10,PC2 属于 VLAN 20。两个终端分别使用独立的接入端口,互不打标签。
- LSW1 通过一个 trunk 上行口连接 LSW2。这个 trunk 链路需要放通 VLAN 10 和 VLAN 20。
- LSW2 同时充当三层交换设备:它上面创建 VLANIF 10 和 VLANIF 20 作为网关,并连接一台 PC3(VLAN 30),用于验证跨 VLAN 的三层互通。
地址规划如下:
| 设备 | 接口/所属 VLAN | IP 地址 | 网关 |
|---|---|---|---|
| PC1 | VLAN 10 | 192.168.10.10/24 | 192.168.10.1 |
| PC2 | VLAN 20 | 192.168.20.10/24 | 192.168.20.1 |
| PC3 | VLAN 30 | 192.168.30.10/24 | 192.168.30.1 |
| LSW2 | VLANIF 10 | 192.168.10.1/24 | — |
| LSW2 | VLANIF 20 | 192.168.20.1/24 | — |
| LSW2 | VLANIF 30 | 192.168.30.1/24 | — |
这样的结构,LSW1 只做二层转发,LSW2 既做二层(透传来自 LSW1 的 VLAN 帧)又做三层(终结 VLAN 并路由)。如果后面想验证“分层网关”或“网关漂移”,还可以在这个基础上扩展,但本次实验先聚焦基础。
1.3 数据流预判:在配置之前先画出通信路径
我在动手前把三条典型流量路径写在纸上:
- PC1 → PC2:PC1 发现目的 IP(192.168.20.10)不在本网段,于是将报文交给网关 192.168.10.1。这里有个关键细节:PC1 必须先通过 ARP 请求解析网关 IP 对应的 MAC,而网关 MAC 来自 LSW2 的 VLANIF 10 接口。随后报文被 LSW2 三层转发到 VLAN 20 的网关,再通过 ARP 解析 PC2 的 MAC,最后交付。
- PC1 → PC3:同样先到网关,再由 LSW2 根据路由表转发到 VLANIF 30,PC3 的网关就是 LSW2 的 VLANIF 30,整个过程发生在 LSW2 内部,不再经过 LSW1。
- PC1 → 网关:这是最基础的连通性验证,能通说明二层链路和 VLAN 终结没问题;这一步不通,后面跨网段必然失败。
预先画出这条路径,后面排查问题时就有了一个“应该通”的基线。实际排查中,我就是靠这个基线把问题定位在二层链路还是三层转发的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 二层链路搭建:access、trunk 与 PVID 的那些坑
二层链路是整个实验的地基。很多初学者在这块出问题,不是不会配 access 和 trunk,而是不理解一个端口在某个 VLAN 下“打不打标签”的本质。
2.1 接入端口用 access:为什么边缘口不要用 trunk
PC 和交换机之间的链路上只有一个 VLAN,所以端口类型选 access 最合适。access 口干两件事:收到不带标签的帧时,打上该端口 PVID(默认就是 VLAN 1,需要改成对应 VLAN)对应的 VLAN 标签;发送帧时剥离 VLAN 标签,让终端看到原始的以太网帧。
有些初学者为了让“以后扩展方便”,在 PC 口上配 trunk。这里有两个问题:一是很多终端的网卡驱动对 802.1Q 标签支持不好,会出现能协商但收不到数据的情况;二是 trunk 口默认放通所有 VLAN,如果这个口被误接了一台交换机,会意外扩大二层域。接入层老老实实配 access,把 untagged 流量收进来,是网络工程里最稳的写法。
LSW1 的接入配置如下:
code复制<LSW1> system-view
[LSW1] vlan batch 10 20
[LSW1] interface GigabitEthernet0/0/1
[LSW1-GigabitEthernet0/0/1] port link-type access
[LSW1-GigabitEthernet0/0/1] port default vlan 10
[LSW1-GigabitEthernet0/0/1] quit
[LSW1] interface GigabitEthernet0/0/2
[LSW1-GigabitEthernet0/0/2] port link-type access
[LSW1-GigabitEthernet0/0/2] port default vlan 20
[LSW1-GigabitEthernet0/0/2] quit
2.2 trunk 口的 PVID 选择:到底该不该改成默认 VLAN 以外的值
上联口要承载多个 VLAN 的帧,所以必须配 trunk。这里最关键的坑就是 PVID。
华为交换机上,trunk 口的默认 PVID 是 VLAN 1。在 trunk 链路上,如果对端交换机收到一个不带 VLAN 标签的帧,就会认为它属于接收端口的 PVID。而在真正传输时,VLAN 10 的帧带着 802.1Q 标签走 trunk,VLAN 20 的帧也带着标签走 trunk——这两个都没问题。
但问题出在当 trunk 口的 PVID 仍然为 VLAN 1,而实际上链路两端都没有 VLAN 1 的数据流量时,链路中传输的 VLAN 10 和 VLAN 20 帧是不受影响的;可一旦某个帧丢了标签(比如某台设备把 VLAN 10 的 access 口配错成了 trunk,或是一些特殊抓包场景),对端就会把它当成 VLAN 1 的帧,于是直接进 VLAN 1,导致“明明配置了放通 VLAN 10,却还是不通”的诡异现象。
我在实验中把 LSW1 上联口的 PVID 保持为 VLAN 1,同时用 port trunk allow-pass vlan 10 20 放通对应 VLAN。这种做法在标准组网中没有任何问题,反而是新手常常多此一举地改 PVID 导致 VLAN 划分混乱。为了验证 PVID 的影响,我也单独做过一组对比实验:把上联口 PVID 改成 10,结果对端接入了一个不带标签的帧时,它会被划进 VLAN 10,而不是 VLAN 1——这在某些场景下是设计需要(比如对接不支持 802.1Q 的设备),但对“纯 trunk 承载多 VLAN”的场景反而制造了隐性问题。
所以这里的经验是:trunk 口的 PVID 默认别动,除非你明确知道链路上会有 untagged 流量,并且希望它进入哪个 VLAN。
LSW1 和 LSW2 的上联配置如下:
code复制[LSW1] interface GigabitEthernet0/0/3
[LSW1-GigabitEthernet0/0/3] port link-type trunk
[LSW1-GigabitEthernet0/0/3] port trunk allow-pass vlan 10 20
[LSW1-GigabitEthernet0/0/3] quit
[LSW2] interface GigabitEthernet0/0/1
[LSW2-GigabitEthernet0/0/1] port link-type trunk
[LSW2-GigabitEthernet0/0/1] port trunk allow-pass vlan 10 20
[LSW2-GigabitEthernet0/0/1] quit
2.3 hybrid 模式:华为交换机的隐藏特性,这次实验为什么不选它
华为 VRP 平台上,端口默认类型其实就是 hybrid。hybrid 端口同时支持 tagged 和 untagged 两种放行方式,比 access 和 trunk 更灵活,但也更容易让初学者迷糊。
比如 hybrid 口可以设置 port hybrid tagged vlan 10 和 port hybrid untagged vlan 20,让 VLAN 10 的帧带标签通过、VLAN 20 的帧剥离标签通过。这个能力在部署 IP 电话、多网卡服务器等场景非常有用。
这次实验我刻意没有用它,原因是:在搭建标准 VLAN 间路由实验时,access + trunk 是最直观、最符合通用网络教材描述的模型。 hybrid 的灵活会掩盖某些端口行为,比如抓包时明明同一端口却看到有的帧带标签、有的不带,初学者就会混乱。先用标准模型把数据流转搞懂,再回头研究 hybrid,学习曲线反而更平缓。
不过如果你是在公司机房接手一台华为交换机,大概率看到的配置全是 hybrid,因为 S5700 系列新配置默认就是 hybrid。所以下面的排查章节我会专门说明 hybrid 口如何看转发行为。
3. VLAN 间路由:单臂路由与三层交换两条路线的取舍
二层链路通了之后,进入实验核心——打通 VLAN 间的三层路由。这里有两种经典方案,我都做了配置验证,并且抓包对比了差异。先说结论:规模小、设备少用单臂路由;规模大、性能要求高用三层交换机。 但这个结论背后有具体的协议行为差异,值得展开。
3.1 单臂路由的原理与配置:一条物理链路带多个 VLAN 标签
单臂路由,路由器的物理接口只有一个,但通过子接口(sub-interface)承载多个 VLAN。每个子接口绑定一个 VLAN ID,配置一个 IP 作为该网段的网关。物理接口收进来带 802.1Q 标签的帧后,路由器根据标签把帧分发到对应的子接口处理。
在 eNSP 里,我单独搭了一个类似的拓扑来验证单臂路由行为:用一台路由器 AR1 连接交换机,交换机上划分 VLAN 10 和 VLAN 20,路由器上配置两个子接口。
配置命令如下:
code复制[AR1] interface GigabitEthernet0/0/0.10
[AR1-GigabitEthernet0/0/0.10] dot1q termination vid 10
[AR1-GigabitEthernet0/0/0.10] ip address 192.168.10.1 255.255.255.0
[AR1-GigabitEthernet0/0/0.10] arp broadcast enable
[AR1-GigabitEthernet0/0/0.10] quit
[AR1] interface GigabitEthernet0/0/0.20
[AR1-GigabitEthernet0/0/0.20] dot1q termination vid 20
[AR1-GigabitEthernet0/0/0.20] ip address 192.168.20.1 255.255.255.0
[AR1-GigabitEthernet0/0/0.20] arp broadcast enable
[AR1-GigabitEthernet0/0/0.20] quit
注意 dot1q termination vid 和 arp broadcast enable 两个命令,前者告诉路由器在收到该 VLAN 标签的帧时交给哪个子接口处理,后者保证子接口能响应 ARP 广播请求。缺了 arp broadcast enable,终端发 ARP 请求网关 IP 时路由器不会应答,VLAN 间通信直接失败——这是单臂路由实验里非常经典的一个坑。
单臂路由的瓶颈很明显:所有 VLAN 的流量都挤在同一条物理链路上进出,带宽被共享。在实验环境里无所谓,但在真实办公网里,几百台终端的跨 VLAN 流量全部走一条千兆链路,压力很快就会出现。所以现在很少用单臂路由做核心网关,它更多出现在小型分支、临时组网或实验教学中。
3.2 三层交换方案:VLANIF 终结网关,转发走硬件
这次主实验我选择的是三层交换机方案,在 LSW2 上创建 VLANIF 接口作为网关。VLANIF 是一个虚拟三层接口,和 VLAN 一一对应。它存在的意义是:交换机既做二层交换,又能承担三层路由转发,而且这个转发通常在硬件芯片上完成,性能比路由器软转高得多。
配置非常简单:
code复制[LSW2] interface Vlanif 10
[LSW2-Vlanif10] ip address 192.168.10.1 255.255.255.0
[LSW2-Vlanif10] quit
[LSW2] interface Vlanif 20
[LSW2-Vlanif20] ip address 192.168.20.1 255.255.255.0
[LSW2-Vlanif20] quit
[LSW2] interface Vlanif 30
[LSW2-Vlanif30] ip address 192.168.30.1 255.255.255.0
[LSW2-Vlanif30] quit
三层交换机在转发时有一个关键行为:收到来自 VLAN 10 的报文,通过路由表查找到目的网段是 VLAN 20,于是把报文从 VLANIF 20 发出。 在发出前,它会先查看 VLAN 20 对应的二层转发表,找到目的 IP 对应的 MAC 和出接口,然后重新封装以太网帧头(源 MAC 变成 VLANIF 20 的 MAC,目的 MAC 变成 PC2 的 MAC),再交给 VLAN 20 的端口转发。这个过程叫“VLAN 间路由 + 二层重封装”,是三层交换机和纯路由器最大的区别。
如果目的 MAC 不在 VLAN 20 的二层转发表里,交换机会先发一个 ARP 请求,等终端回应后再完成封装转发。这就是我第一次抓包时看到的现象:PC1 ping PC2,中间必然伴随 PC2 对网关 ARP 请求的回应,而且这个 ARP 请求是从交换机发出的。
3.3 两种方案的核心差异对比
我用一张表把两个方案的差异整理出来,方便后面回顾:
| 对比项 | 单臂路由 | 三层交换(VLANIF) |
|---|---|---|
| 三层终结位置 | 路由器子接口 | 交换机 VLANIF |
| 转发性能 | 受物理接口带宽限制 | 硬件芯片转发,性能高 |
| 配置复杂度 | 需要配置子接口、dot1q 终结、ARP 广播 | VLANIF 加 IP 即可 |
| 典型应用 | 小型网络、实验教学 | 园区网核心/汇聚层 |
| ARP 行为 | 子接口需开启 ARP 广播使能 | VLANIF 自动响应 ARP |
| 故障排查重点 | 子接口 VLAN 绑定是否一致 | VLANIF 是否有 IP、端口是否放通 |
实际工作中,绝大多数多 VLAN 组网都会选三层交换方案,核心交换机配 VLANIF,接入交换机做二层透传,干净利落。
4. 配置回放与连通性验证:从 ping 网关到跨 VLAN 全程
这一章把完整配置流程串起来,并给出每一个验证步骤的命令和预期结果。我建议你在模拟器或真机上按顺序走一遍,不要跳步,因为后面排障章节我会直接引用这里的中间状态。
4.1 LSW1 与 LSW2 的完整配置回放
LSW1 最终配置如下(已经包含前面提到的接口配置):
code复制<LSW1> system-view
[LSW1] vlan batch 10 20
[LSW1] interface GigabitEthernet0/0/1
[LSW1-GigabitEthernet0/0/1] port link-type access
[LSW1-GigabitEthernet0/0/1] port default vlan 10
[LSW1-GigabitEthernet0/0/1] quit
[LSW1] interface GigabitEthernet0/0/2
[LSW1-GigabitEthernet0/0/2] port link-type access
[LSW1-GigabitEthernet0/0/2] port default vlan 20
[LSW1-GigabitEthernet0/0/2] quit
[LSW1] interface GigabitEthernet0/0/3
[LSW1-GigabitEthernet0/0/3] port link-type trunk
[LSW1-GigabitEthernet0/0/3] port trunk allow-pass vlan 10 20
[LSW1-GigabitEthernet0/0/3] quit
LSW2 的配置在前面 Vlanif 的基础上,还需要补上连接 PC3 的接入端口和 trunk 放通。否则 PC3 无法进入 VLAN 30:
code复制[LSW2] vlan batch 10 20 30
[LSW2] interface GigabitEthernet0/0/1
[LSW2-GigabitEthernet0/0/1] port link-type trunk
[LSW2-GigabitEthernet0/0/1] port trunk allow-pass vlan 10 20
[LSW2-GigabitEthernet0/0/1] quit
[LSW2] interface GigabitEthernet0/0/2
[LSW2-GigabitEthernet0/0/2] port link-type access
[LSW2-GigabitEthernet0/0/2] port default vlan 30
[LSW2-GigabitEthernet0/0/2] quit
[LSW2] interface Vlanif 10
[LSW2-Vlanif10] ip address 192.168.10.1 255.255.255.0
[LSW2-Vlanif10] quit
[LSW2] interface Vlanif 20
[LSW2-Vlanif20] ip address 192.168.20.1 255.255.255.0
[LSW2-Vlanif20] quit
[LSW2] interface Vlanif 30
[LSW2-Vlanif30] ip address 192.168.30.1 255.255.255.0
[LSW2-Vlanif30] quit
每台 PC 记得要把网关指向对应的 VLANIF:PC1 指向 192.168.10.1,PC2 指向 192.168.20.1,PC3 指向 192.168.30.1。
4.2 验证点 1:PC1 ping 网关
code复制PC> ping 192.168.10.1
Ping 192.168.10.1: 32 data bytes, Press Ctrl_C to break
Request timeout!
Request timeout!
Reply from 192.168.10.1: bytes=32 time<1ms TTL=255
Reply from 192.168.10.1: bytes=32 time<1ms TTL=255
前两个包超时属于正常现象,因为 PC1 第一次通信前要做 ARP 解析,模拟器里 ARP 学习有延迟,真机上通常第一个包就能通。如果一直 timeout,优先排查接入端口 VLAN 是否配对、PC 的 IP 与网关是否同网段。
4.3 验证点 2:PC1 ping PC3(跨三层到另一个 VLAN)
PC1 到 PC3 走了完整的三层转发链路:PC1 → 网关 VLANIF 10 → LSW2 查路由 → VLANIF 30 → PC3。
code复制PC> ping 192.168.30.10
Ping 192.168.30.10: 32 data bytes, Press Ctrl_C to break
Reply from 192.168.30.10: bytes=32 time<1ms TTL=125
Reply from 192.168.30.10: bytes=32 time<1ms TTL=125
Reply from 192.168.30.10: bytes=32 time<1ms TTL=125
Reply from 192.168.30.10: bytes=32 time<1ms TTL=125
TTL=125 是因为报文经过了一次路由器三层转发,TTL 从 128 减到 125(有的终端初始 TTL 是 128,有的模拟器里是 127,不必死记具体值,重点是看 TTL 是否在减小)。
4.4 验证点 3:用 display 命令确认二层转发表与 VLANIF 状态
交换机上验证 VLAN 和接口状态,命令集中在三条:
code复制[LSW2] display vlan brief
U: Up; D: Down; TG: Tagged; UT: Untagged
VID Type Status Ports
---------------------------------------------------------------------
10 common up GE0/0/1(U) VLANIF10(U)
20 common up GE0/0/1(U) VLANIF20(U)
30 common up GE0/0/2(U) VLANIF30(U)
说明 VLAN 已创建,对应端口和 VLANIF 接口都处于 UP 状态。
code复制[LSW2] display interface Vlanif 10
Vlanif10 current state : UP
Line protocol current state : UP
Internet Address is 192.168.10.1/24
VLANIF 10 已配好地址且状态为 UP。
code复制[LSW1] display mac-address
MAC Address VLAN Learned-From Type
--------------------------------------------------------------
5489-98aa-xxxx 10 GE0/0/1 dynamic
5489-98bb-xxxx 20 GE0/0/2 dynamic
二层转发表里有 PC1 和 PC2 的 MAC,说明终端上线正常。
4.5 验证点 4:路由表里看到直连网段
三层交换机最终要转发报文,必须有路由。VLANIF 自动生成直连路由:
code复制[LSW2] display ip routing-table
Route Flags: R - relay, D - download to fib
Destination/Mask NextHop Flags Cost Interface
192.168.10.0/24 0.0.0.0 U 0 Vlanif10
192.168.20.0/24 0.0.0.0 U 0 Vlanif20
192.168.30.0/24 0.0.0.0 U 0 Vlanif30
看到这三条直连路由,就说明三层网关配置没问题。如果 PC1 ping PC3 不通,但这里能看到路由,问题大概率在二层链路或终端 ARP 学习上。
5. 抓包验证与协议行为透视:ARP、广播域与 VLAN 标签的真相
配置全通之后,我并没有直接收工,而是用 eNSP 的抓包功能把 PC1 ping PC2 的整个过程抓了下来。这一步是这次实验最有价值的部分,因为它把“VLAN 间通信”从抽象概念变成了肉眼可见的帧流。
5.1 在 trunk 口抓包:看到 VLAN 标签到底长什么样
在 LSW1 的 GE0/0/3(上联口)上抓包,可以看到所有 VLAN 10 和 VLAN 20 的帧都带着 802.1Q 标签。这个标签在 Ethernet II 帧头里,位于源 MAC 之后,包含两个关键字段:
- TPID(Tag Protocol Identifier):固定为 0x8100,标识这是一个 802.1Q 标签帧。
- TCI(Tag Control Information):里面最重要的是 VLAN ID,占 12 bit,取值 0-4095,其中 0 和 4095 保留,实际可用 1-4094。实验里看到的 VID 10 和 VID 20 就在这个字段里。
所以 trunk 口抓包的正确姿势,是确认每一帧头上都有正确的 VLAN ID。如果发现某些帧根本没有标签,而对端又设了 PVID,那这些帧就会被划进对端 PVID 对应的 VLAN,导致跨 VLAN 通信异常。
5.2 在 access 口抓包:看标签被剥掉的过程
在 LSW1 的 GE0/0/1(PC1 所在 access 口)抓包,PC1 发出的帧是 untagged 的。这个帧进入交换机后被打上 VLAN 10 标签,转发到 trunk 口时带着标签出去。反向流量在从 trunk 口进入后,最终从 GE0/0/1 出去时,标签被剥离,PC1 收到的是干净的原始以太网帧。
所以终端网卡永远看不到 802.1Q 标签,这也是为什么 access 口被称为“untagged 口”。如果你在某个终端上抓包看到了 VLAN 标签,那说明这个接口被配成了 trunk 或 hybrid tagged,属于配置失误。
5.3 抓包看 VLAN 间通信的完整过程:两次 ARP 是核心
PC1 ping PC2 的完整过程是这样的:
- PC1 判断目的 IP 192.168.20.10 不在本网段,于是查看本地 ARP 表,发现没有网关 192.168.10.1 的 MAC,于是广播 ARP 请求“谁是 192.168.10.1”。
- LSW2 收到该广播帧,VLANIF 10 接口回应 ARP 应答,告诉 PC1“网关 MAC 是 00e0-fcxx-xxxx”。
- PC1 封装 ICMP 报文,源 MAC 是自己的 MAC,目的 MAC 是网关 MAC,源 IP 192.168.10.10,目的 IP 192.168.20.10,发送出去。
- LSW2 收到后,根据目的 IP 查路由表,发现是直连网段 192.168.20.0/24,出接口是 VLANIF 20。接着查 MAC 表,发现 PC2 的 MAC 不在表里,于是从 VLANIF 20 发出一个 ARP 请求“谁是 192.168.20.10”。
- PC2 回应 ARP,LSW2 学到 PC2 的 MAC 后,重新封装以太网帧,源 MAC 改为 VLANIF 20 的 MAC,目的 MAC 改为 PC2 的 MAC,然后把 ICMP 请求从 VLAN 20 的端口发出去。
- PC2 收到 ICMP 请求,回 ICMP 应答,同样先发 ARP 解析网关,再发给 LSW2,由 LSW2 转发回 PC1。
抓包时你会发现一个问题:在 trunk 口上,你只会看到 PC1 和 PC2 的 ICMP 报文,以及 PC1 的 ARP 请求和 PC2 的 ARP 应答。 LSW2 发出的 VLANIF 20 ARP 请求是从交换机本身发出的,如果没有在 LSW2 接 PC2 的端口上抓包,这个 ARP 请求是看不到的。
这也解释了为什么跨 VLAN 通信比同 VLAN 通信慢:多了一次网关 ARP 解析,多了一次三层转发。在真实运维中,如果终端规模大且经常首次通信,可以预先在所有终端上静态配置网关 ARP,或者使用交换机上的 ARP 代理功能减少广播,但现代园区网一般不需要刻意优化这个。
5.4 广播域与冲突域:VLAN 切分的是逻辑边界
这个实验最能直观感受到的是广播域的变化。VLAN 10 里的广播帧只能在 VLAN 10 内传播,无法跨 VLAN;VLAN 20 的广播同样被隔离。PC1 发一个广播,LSW2 的 VLANIF 20 和 PC2 都收不到。
在二层交换网络里,所有端口默认处于同一个广播域,引入 VLAN 就是把一个大的广播域切成多个小的广播域。广播域缩小带来的直接好处是:减少了不必要的广播流量、提升了网络安全性(不同 VLAN 之间默认无法二层互访)、缩小了故障影响范围。
而冲突域这个概念在交换网络中已经基本消失——每个交换端口都是一个独立的冲突域。交换机的每个端口独享带宽,不再像集线器那样共享冲突域。
6. 故障排查实录:多 VLAN 组网最常踩的几个坑
即使你完全照着上面配置,实验中也可能因为一个细节导致不通。这一节把我自己实验时踩过的坑和网上高频求助的问题整理成排查思路。
6.1 PC ping 不通网关:先查接入端口,再看 ARP
如果 PC1 ping 192.168.10.1 超时,按这个顺序查:
display vlan brief看 PC1 所在端口是否属于 VLAN 10。如果端口显示在 VLAN 1,说明port default vlan 10没生效或者配错接口。- 确认 PC1 的 IP 和网关是否同一个网段。这个错误在模拟器里很常见,而在真机上会有终端网卡配置页面可查。
- 在 LSW2 上看 VLANIF 10 是否 UP:
display interface Vlanif 10。如果接口 down,说明 VLAN 10 在交换机上不存在,或没有包含任何物理端口。VLANIF 接口在没有对应 VLAN 或对应物理口全 down 时,是会 down 的。
最常见的问题出在 VLANIF 接口 down:在 LSW2 上创建了 VLANIF 10,但 VLAN 10 的物理接口 GE0/0/1(trunk 口)没有 port trunk allow-pass vlan 10,VLANIF 就会因“没有可用的二层转发成员”而 down。
6.2 PC1 能 ping 通网关,但 ping 不通 PC2
网关能通说明二层链路和 VLAN 终结没问题,问题出在三层转发。按这个顺序查:
display ip routing-table看 LSW2 上有没有 192.168.20.0/24 的直连路由。没有的话,检查 VLANIF 20 是否配了 IP,VLAN 20 是否有活跃端口。- 在 LSW2 上
display arp | include 192.168.20.10,看 VLAN 20 的 ARP 表有没有 PC2 的条目。没有说明 PC2 没有回应 ARP,可能 PC2 的 IP 或网关配置错误,或者 VLAN 20 的链路没通。 - 确认 PC2 的网关是 192.168.20.1,而不是 PC1 的网关。终端网关配错是新手最常见的错误。
6.3 跨交换机 VLAN 不通:trunk 放通和 PVID 的经典坑
当 PC1 挂在 LSW1 上、网关在三层交换机 LSW2 上,PC1 能 ping 通自己但 ping 不通网关时,极大概率是 LSW1 和 LSW2 之间的 trunk 只放通了 VLAN 1。
检查命令:
code复制[LSW1] display port vlan
Port Link Type PVID VLAN
GigabitEthernet0/0/1 access 10 10
GigabitEthernet0/0/2 access 20 20
GigabitEthernet0/0/3 trunk 1 1 10 20
重点看 PVID 和 VLAN 列。如果 trunk 口 VLAN 列表里没有 10 和 20,或者只有 1 10 20 中的 10,说明 allow-pass 没配全。
另外要强调一下:trunk 链路两端必须放通同一组 VLAN。 只在一端放通,对端不放通,照样不通。可以用 display port vlan 同时对比两台交换机的状态。
6.4 hybrid 端口误配导致“时通时不通”
华为交换机默认端口类型是 hybrid,如果不小心把 trunk 口配成了 hybrid,并且放行方式设置成了 untagged,那么带标签的帧从对端过来后,会被剥离标签,而本端再转发的时候又会打上 PVID。如果 PVID 是 VLAN 1,所有跨交换机 VLAN 流量就全被划进 VLAN 1,导致“时通时不通”——实际上根本不通,只是因为 ARP 表还没老化时,某些流量碰巧通了一下。
遇到这类诡异问题,第一时间查端口类型。很多时候问题不在于“配置错”,而在于“配置没有按预期生效”。
6.5 排障经验总结:一张表直接对照
| 现象 | 优先检查项 | 对应命令 |
|---|---|---|
| ping 网关不通 | 接入端口 VLAN、终端 IP/网关、VLANIF 状态 | display vlan brief、display interface Vlanif 10 |
| 网关通、跨 VLAN 不通 | 路由表、ARP 表 | display ip routing-table、display arp |
| 跨交换机 VLAN 不通 | trunk 放通列表、PVID、端口类型 | display port vlan |
| 终端收到带标签帧 | 端口类型为 trunk/hybrid tagged | display port vlan |
| VLANIF down | VLAN 是否有活跃物理端口、trunk 放通 | display interface Vlanif 10 |
7. 协议与路由的底层逻辑:从 ARP 到转发的完整链路
这一章回答一个更深入的问题:VLAN 间路由在协议栈层面到底是怎么工作的?很多教材讲 VLAN 只说“隔离广播域”,但实验做完你会发现,它和 ARP、路由表、MAC 表之间的关系密不可分。
7.1 为什么需要 ARP 解析网关 MAC:三层转发的前提是二层封装
任何 IP 报文要在一个广播域内传输,都必须封装成以太网帧。以太网帧头里的目的 MAC 地址,决定了这个帧被哪台设备接收。
对于跨网段通信,源终端知道自己要访问的 IP 不在本网段,所以它不能直接把目的 MAC 设成目标主机的 MAC,而必须设成网关的 MAC。怎么知道网关 MAC?靠 ARP。这就是为什么每次新终端上线或 ARP 表老化后,第一次跨网段通信都会伴随 ARP 解析过程。
在三层交换机上,这个逻辑同样成立。LSW2 收到 PC1 发来的、目的 MAC 为 VLANIF 10 MAC 的帧后,把它交给 IP 层处理。IP 层查路由表,发现目的网段是 VLAN 20 直连,于是要从 VLANIF 20 发出。发出前必须知道 PC2 的 MAC,于是查 ARP 表,没有就发 ARP 请求。整个过程和路由器一模一样。
7.2 交换机的“三层转发”本质:路由一次,交换多次
还有一个值得深挖的点:三层交换机并不是每个报文都走 CPU 查路由表,那样性能撑不住。真正生产环境的交换机用的是硬件转发表(FIB),第一次转发某个流向的报文时会查路由并在硬件里建立转发表项,后续同流向报文直接命中硬件表项快速转发。
实验环境下我们看不到 FIB 的细节,但可以理解这个层次关系:路由表决定“去哪个网段走哪个接口”,MAC 表决定“在这个 VLAN 里找谁”。两者配合,才能真正把一个 IP 报文从源设备送到目的设备。
7.3 路由重分布在多 VLAN 场景的延伸思考
当你从单台三层交换机扩展到多台路由器或多台三层交换机互联时,直连路由就不够用了。比如 LSW2 上新增一个网段 192.168.40.0/24,但网关在另一台路由器上,LSW2 必须知道去这个网段的路由。这时候就要引入动态路由协议或静态路由。
我在实验后期把拓扑扩展成了两台三层设备互联,在之间跑 OSPF,把 VLAN 10/20/30 的网段重分布进 OSPF。配置其实很简单:
code复制[LSW2] ospf 1
[LSW2-ospf-1] area 0.0.0.0
[LSW2-ospf-1-area-0.0.0.0] network 192.168.10.0 0.0.0.255
[LSW2-ospf-1-area-0.0.0.0] network 192.168.20.0 0.0.0.255
[LSW2-ospf-1-area-0.0.0.0] network 192.168.30.0 0.0.0.255
直连网段会自动被 OSPF 发布。如果你想把其他协议重分布进来,用 import-route。这个扩展实验的意义在于:VLAN 间路由解决的是单台设备内部多个广播域的互通,而路由协议解决的是多台设备之间的路径选择。把这两个层次分清楚,园区网络设计的思路就清晰了。
8. 实验后的几个认识与建议
整个实验做下来,我最深的一个体会是:配置命令不是难点,难点在于理解每一层技术在转发链路中扮演的角色。
VLAN 负责隔离,trunk 负责跨设备承载多 VLAN 流量,VLANIF 负责终结三层网关,ARP 负责完成 IP 到 MAC 的解析,路由表负责决定去哪个网段走哪条逻辑路径。任何一个环节出问题,现象都可能是“ping 不通”,但排查方向完全不同。
如果你想把这个实验玩得更深,我建议往这几个方向扩展:
- 把单臂路由和三层交换放在同一个拓扑里对比,两台 PC 分别走不同方案,抓包看差异。
- 在 LSW1 和 LSW2 之间加一条链路,做链路聚合,观察跨交换机多 VLAN 流量如何负载分担。
- 在三层交换机上配置 DHCP 服务,让终端自动获取 IP,观察 DHCP 广播帧在 VLAN 间行为。
- 用 OSPF 把两台三层设备互联,验证 VLAN 间路由和动态路由如何协同。
对于刚入门的朋友,我只有一个建议:配置完不要急着下一个实验,先在命令行里把 display vlan brief、display mac-address、display ip routing-table、display arp 这几条命令的结果截图或手抄一遍,强迫自己解释每条输出里的每一列代表什么。能把输出讲明白,比能背下配置命令有价值得多。
