这次实验是围绕IP和VLAN的联动关系展开的。很多人配华为交换机时,VLAN命令敲得飞快,但真被问一句“PC1在VLAN 10,PC2在VLAN 20,PC1 ping PC2,中间的数据包究竟在哪一层被处理,谁改了MAC、谁改了IP”,不少人会卡壳。这个实验报告就是把这整个过程拆开揉碎看了一遍,既包含VLAN划分的常用命令,也包括VLAN间通信的完整配置、报文转发过程以及常见坑点。
这套实验适合刚接触园区网络的网络工程师、正在备考数通认证的学员,以及需要给业务网段做隔离设计的人。通过一组简单的拓扑,把Access端口、Trunk端口、PVID、VLANIF、单臂路由这些概念全部串起来,最终可以用Wireshark亲眼看到802.1Q标签和ARP报文长什么样。理解了这套东西,后面再看ACL、DHCP Snooping、甚至K8s里的网络插件,都会轻松很多。
1. 实验目标与整体设计思路
1.1 实验要验证的核心问题
说起VLAN的用处,官方定义叫虚拟局域网,本质就是把一台物理交换机划分成多个互相隔离的广播域。但“隔离”只是基础,真正的问题是:业务上需要隔离,可终端之间还要通信,这时候IP地址作为网络层寻址手段就要出来救场。所以这个实验真正想验证的,是VLAN(二层隔离)和IP(三层寻址)如何协同工作,以及我们在配置时为什么会有那么多“看似多余”的命令。
具体来说,实验想回答四个问题:
- VLAN是怎么把端口分组隔离的,同VLAN内通信和跨VLAN通信在数据帧层面有什么区别?
- Access端口、Trunk端口、PVID这些概念到底在转发过程中扮演什么角色?
- 单臂路由和三层交换机VLANIF两种VLAN间路由方案各自的特点是什么?
- 网络不通时应该按什么顺序排查,而不是乱试命令?
带着这四个问题去看配置命令,你会发现每一条命令都有明确的目的,而不是死记硬背。
1.2 实验拓扑与工具选型
模拟器我用了eNSP(华为网络模拟器)做交换机部分,配合GNS3抓包做路由分析。两者各有侧重:eNSP对华为命令的仿真度高,适合练习真实设备操作习惯;GNS3里的路由器之间跑抓包更灵活,分析IP数据转发和ARP协议更直观。真机条件允许的话,用两台交换机加一台路由器也能复现,原理上没有差别。
实验拓扑比较常见,是校园网三层架构的缩略版:
| 设备 | 角色 | 说明 |
|---|---|---|
| PC1 | VLAN 10终端 | 接入交换机,办公网段 |
| PC2 | VLAN 20终端 | 接入交换机,研发网段 |
| PC3 | VLAN 30终端 | 接入交换机,服务器网段 |
| LSW1 | 接入交换机 | 负责终端接入,划分VLAN |
| LSW2 | 汇聚/核心交换机 | 负责VLAN间路由 |
| AR1 | 路由器 | 单臂路由实验时使用 |
接入交换机通过Trunk链路连到汇聚交换机,汇聚交换机再连路由器或者直接启用三层转发。终端全部通过Access口接入,这样最贴合真实园区网场景。
1.3 IP地址规划与VLAN编号规则
做实验前我习惯先把IP规划表画在纸上,再动手敲命令。很多新手上来就配,配到一半发现网关冲突、网段重叠,回头改配置头痛得很。规划思路很简单:一个VLAN对应一个网段,网关就放在这个网段里,由三层设备充当。
| VLAN ID | 业务用途 | 网段 | 网关 | 说明 |
|---|---|---|---|---|
| VLAN 10 | 办公网 | 192.168.10.0/24 | 192.168.10.254 | PC1所在网段 |
| VLAN 20 | 研发网 | 192.168.20.0/24 | 192.168.20.254 | PC2所在网段 |
| VLAN 30 | 服务器区 | 192.168.30.0/24 | 192.168.30.254 | PC3所在网段 |
| VLAN 99 | 管理VLAN | 192.168.99.0/24 | 192.168.99.254 | 设备远程管理专用 |
这里有个习惯问题:很多人把网关设成.1,我更喜欢用.254。倒不是说.1不行,而是很多网段会配置DHCP地址池,起始地址通常从.10或者.100开始,网关放在.254能避免和自动分配的地址撞车。另外,如果团队里有人习惯手动配置网关,统一约定用.254也会少很多排障麻烦。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. IP与VLAN协同工作的原理拆解
2.1 VLAN是二层隔离,IP是三层寻址
用生活化类比来说,VLAN相当于楼层,IP相当于门牌号,网关就是电梯。不同楼层之间默认不通,你需要坐电梯(网关)才能到达对面。一台交换机划分了VLAN 10和VLAN 20之后,从二层看就是两栋独立的楼,广播帧到不了对面,ARP请求也不会穿越VLAN边界。
但到了三层,IP地址是全局寻址的。PC只要发现目标IP不在本地网段,就会先查看自己的路由表,把数据交给网关。网关在路由表里找到目标网段的出接口之后,把这个帧重新封装,从对应VLAN的接口丢进去。整个过程对终端基本透明,终端只关心网关是谁,不关心网关后面到底有几层网络。
所以VLAN和IP是分工不是竞争关系:VLAN负责把广播域划小,IP负责在划好的网段之间做逻辑寻址。少了VLAN,ARP风暴和广播泛滥会拖垮大二层网络;少了IP,VLAN之间就变成了无法逾越的孤岛。
2.2 同VLAN通信与跨VLAN通信的帧差异
同VLAN内通信很好理解。PC1发一个ARP广播,问“谁是192.168.10.2”,同一个VLAN下的PC2收到ARP请求后回复,交换机在MAC地址表里查到对应端口,之后的数据帧就单播转发。整个过程都在二层完成,源IP、目的IP、源MAC、目的MAC都不需要经过网关处理。
跨VLAN通信就不一样了。PC1 ping 192.168.20.2时,PC1会先用自己的掩码算一下,发现目标不在同网段,于是把帧发给网关192.168.10.254。此时帧的二层信息是:源MAC是PC1的MAC,目的MAC是网关的MAC,VLAN Tag是10。网关收到后剥掉二层信息,查路由表,发现20网段从另一个VLAN接口出去,再重新封装一个新帧:源MAC变成网关在VLAN 20里的MAC,目的MAC变成PC2的MAC(如果还不知道,就再发一个ARP请求),VLAN Tag变成20。IP层始终不变,变的只是二层的MAC和VLAN标签。
这里有一个关键点:跨网段通信时,ARP请求的目标永远是你和网关之间能到达的下一跳,而不是远处那台真实主机。很多人抓包时看到电脑发了一堆ARP问网关的MAC,就以为网络有问题,其实这是完全正常的行为。
2.3 单臂路由与三层交换机VLANIF的取舍
单臂路由和VLANIF解决的是同一个问题:网关放在哪里。
单臂路由是把网关做在路由器的一个物理端口上,通过子接口和802.1Q封装把所有VLAN的网关都收敛到同一条链路上来。比如路由器的GigabitEthernet0/0/0物理口接到交换机上,再在这个物理口下面创建0/0/0.10、0/0/0.20这样的子接口,每个子接口对应一个VLAN。优点是设备门槛低,一台普通路由器就能跑;缺点是所有跨VLAN流量都挤在同一条物理链路,带宽共享,流量一多就容易成为瓶颈。适合实验室、小规模网络等场景。
三层交换机VLANIF则完全不同。它在设备内部直接创建VLANIF接口并配置IP地址,交换机通过硬件芯片查表转发,性能远高于外部路由器。园区网的汇聚层到核心层基本全部采用这种方式。但要注意一个坑:如果交换机本身是二层型号,比如老的S2700系列,即使配置了VLANIF也不会生效,业务流量依然无法跨VLAN转发。这种设备上配置VLANIF通常只能当管理IP用,三层转发还是要靠上级路由器。
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 单臂路由 | 设备门槛低,配置灵活 | 跨VLAN流量有瓶颈 | 小网络、实验环境 |
| 三层交换机VLANIF | 转发性能高,配置简单 | 需要三层交换机,管理IP与业务IP容易混淆 | 园区网、数据中心 |
3. 交换机VLAN配置详细实操
3.1 华为交换机基础VLAN划分与端口加入
先演示最基础的配置,使用eNSP里的S5700交换机,命令在真机上同样适用。
bash复制system-view
sysname LSW1
vlan batch 10 20 30 99
vlan batch这条命令的作用是批量创建VLAN,比一个个vlan 10、vlan 20敲效率高很多。创建完VLAN之后,还不能直接通,因为交换机的端口默认都躺在VLAN 1里面。接下来要把端口划到对应VLAN:
bash复制interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
interface GigabitEthernet0/0/3
port link-type access
port default vlan 30
华为的命令和思科有一个明显区别:思科用switchport access vlan,华为用port default vlan。新手第一次从思科切到华为可能有点不习惯,但逻辑是一样的。port link-type access指定了端口类型,port default vlan 10把这个端口放进VLAN 10。这里要注意,必须先指定链路类型,再设置默认VLAN,顺序反了有些版本会报错或者不生效。
配置完成后,PC1接在0/0/1口,PC2接在0/0/2口,PC3接在0/0/3口。此时同VLAN内通信没问题,但跨VLAN肯定不通,因为还没有网关。
3.2 Access、Trunk与PVID的关系
Access端口主要用于接终端设备,一个端口就属于一个VLAN,PVID自动等于这个VLAN,出去的帧不带标签。Trunk端口则用于交换机之间、或者交换机到路由器之间,一条链路上可以放行多个VLAN,帧带着VLAN Tag在链路上传输。
这里必须重点讲PVID,因为我在实际排障中见过太多因为PVID导致的不通。PVID是端口对“无标签帧”的默认处理方式。当Trunk口收到一个没有打标签的帧时,会按照PVID给它打上VLAN标签。你可能见过别人配置里有一句port trunk pvid vlan 10,意思是:这条链路上没带标签的流量,全部按VLAN 10处理。
但要小心,前提是VLAN 10必须已经通过port trunk allow-pass vlan放行,否则这个帧依然会被丢弃。PVID和allow-pass是两个独立的概念,一个管“进来的无标签帧打什么标签”,一个管“哪些VLAN允许通过”。很多奇怪的不通问题就是这么来的。
| 场景 | PVID | allow-pass | 帧处理结果 |
|---|---|---|---|
| Trunk口PVID=10,allow-pass包含VLAN 10 | 10 | 10, 20 | 无标签帧进入VLAN 10,正常转发 |
| Trunk口PVID=10,allow-pass不包含VLAN 10 | 10 | 20 | 无标签帧被打上VLAN 10,但被丢弃 |
| Trunk口PVID=1,allow-pass包含VLAN 10 | 1 | 10, 20 | 无标签帧进入VLAN 1,不会进入VLAN 10 |
如果两台交换机之间用Trunk互连,需要把互联端口都配置成Trunk,并且放行相关VLAN:
bash复制interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10 20 30 99
很多新手只配了一台交换机的Trunk,忘了对端也要配,结果链路就是不通。Trunk是双方的事,配置一定要成对出现。
3.3 display命令怎么读
配置完之后,验证比配置本身更重要。我常用的验证命令是这几条:
bash复制display vlan brief
display interface GigabitEthernet0/0/1
display port vlan
display current-configuration interface GigabitEthernet0/0/1
display vlan brief是必看的,它会列出所有VLAN的ID、名称、状态以及哪些端口属于这个VLAN。如果发现VLAN 10下面没有端口,说明端口没划进去,或者划错了。display interface GigabitEthernet0/0/1重点看几个字段:端口状态是不是up、链路类型是不是access、PVID是多少。如果PVID是1但业务在VLAN 10,多半是端口default vlan没配置成功。
display port vlan会一次性列出所有端口的VLAN信息,排查大规模配置错误时很好用。看到某个端口“PVID: 10, Allowed VLAN: 10-20”就说明这个端口当前是Trunk模式,PVID是10,放行了VLAN 10到20。
3.4 基于IP子网的VLAN划分
除了基于端口的VLAN划分,华为交换机还支持基于IP子网的VLAN划分,这个功能在终端IP固定但接入位置不固定的场景下非常实用。比如办公网用户换了工位,插到哪个口都能自动进入对应网段,而不是非要管理员去改端口。
配置思路是:给VLAN绑定一个IP子网规则,端口不关心自己属于哪个VLAN,而是看进来的帧源IP属于哪个子网,就把这个帧划分到哪个VLAN。
bash复制vlan 10
ip-subnet-vlan 1 ip 192.168.10.0 255.255.255.0
vlan 20
ip-subnet-vlan 1 ip 192.168.20.0 255.255.255.0
interface GigabitEthernet0/0/1
port link-type hybrid
port hybrid ip-subnet-vlan vlan 10
interface GigabitEthernet0/0/2
port link-type hybrid
port hybrid ip-subnet-vlan vlan 20
需要注意,基于IP子网的VLAN划分通常要求端口工作在Hybrid模式,而且不同版本的命令细节会有差异,配置前可以用display vlan去确认当前设备是否支持。这种方式的灵活性高,但排障时如果终端IP配错,或者DHCP分配规则混乱,很容易出现“人明明坐在办公区,却被划进了服务器VLAN”的诡异现象。所以生产环境用这个功能之前,一定要先规划好地址分配机制。
4. VLAN间通信配置与报文验证
4.1 单臂路由配置详解
先看单臂路由。拓扑里AR1的GigabitEthernet0/0/0接到交换机的Trunk口,然后在路由器上创建子接口,每个子接口对应一个VLAN的网关。
bash复制interface GigabitEthernet0/0/0.10
dot1q termination vid 10
ip address 192.168.10.254 255.255.255.0
arp broadcast enable
interface GigabitEthernet0/0/0.20
dot1q termination vid 20
ip address 192.168.20.254 255.255.255.0
arp broadcast enable
interface GigabitEthernet0/0/0.30
dot1q termination vid 30
ip address 192.168.30.254 255.255.255.0
arp broadcast enable
dot1q termination vid是告诉路由器,这个子接口专门处理带有VLAN 10标签的帧。ip address就是给这个子接口配置网关IP。arp broadcast enable这条命令容易漏,但漏了之后子接口不会响应ARP广播,终端上配置了网关也ping不通。
交换机侧配置:
bash复制interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10 20 30 99
此时PC1 ping PC2的完整路径是:PC1发出帧,交换机打上VLAN 10标签,从Trunk口送给路由器,路由器解封装查路由表,发现目标网段从VLAN 20子接口出,于是重新封装,打上VLAN 20标签,从同一个物理口发回交换机,交换机再转发给PC2。验证时用display ip routing-table可以看到路由器的直连路由都指向各个子接口,说明网关配置成功。
4.2 三层交换机VLANIF配置详解
三层交换机配置更干脆,直接在汇聚交换机上创建VLANIF接口:
bash复制interface vlanif 10
ip address 192.168.10.254 255.255.255.0
interface vlanif 20
ip address 192.168.20.254 255.255.255.0
interface vlanif 30
ip address 192.168.30.254 255.255.255.0
VLANIF就是一个三层逻辑接口,VLAN创建好并配置IP之后,交换机就有了对应网段的网关。和单臂路由的区别是,这里不需要外层物理接口的Trunk配合,流量直接在交换机内部的芯片完成转发。验证命令:
bash复制display ip interface brief
display ip routing-table
display ip interface brief会列出所有三层接口和IP地址,重点看VLANIF接口状态是不是up,IP有没有配错。display ip routing-table能看到各VLAN网段的路由都指向对应的VLANIF接口。
这里必须再强调一遍:只有三层交换机才能用VLANIF做VLAN间路由。如果手头是二层交换机,配置了VLANIF后确实也能配上IP,但业务流量无法跨VLAN转发,只能当管理地址用。这是“华为交换机划VLAN都是一样的吗”这个问题背后最容易踩的坑,交换机型号不同,能力差距很大。
4.3 Wireshark抓包看IP包、ARP与802.1Q标签
配置都通了之后,抓包验证是非常有价值的一步,能让你对理论有直观感受。实验场景是PC1(192.168.10.2)ping PC2(192.168.20.2)。
建议在交换机Trunk口到路由器之间抓包,以及PC1接入端口抓包。理论上你会看到这样的过程:
PC1首先发出ARP请求:“Who has 192.168.10.254? Tell 192.168.10.2”。注意,它问的是网关的MAC,不是192.168.20.2的MAC。这就是跨网段通信的第一步。网关响应之后,PC1发送ICMP Echo Request,此时帧的源MAC是PC1的MAC,目的MAC是网关的MAC,IP层源地址是192.168.10.2,目的地址是192.168.20.2,如果在Trunk口上抓,还能看到这个帧带着VLAN Tag 10。
路由器收到后重新封装,转发到VLAN 20时的ICMP Echo Request变成:源MAC是网关在VLAN 20的MAC,目的MAC是PC2的MAC,VLAN Tag变成20,IP层依然不变。PC2回包时再反着走一遍。
新手看抓包结果时最容易误解的是:看到PC1发了一堆ARP请求,以为网络不通。其实只要看到ARP请求问的是网关MAC,后面跟着ICMP包,就说明跨VLAN通信的逻辑完全正常。还有个小技巧:在Access口上抓包看不到VLAN标签,Access口出去的帧不带Tag;想看802.1Q标签就要在Trunk口上抓,这个位置不对会导致你误判“VLAN是不是没生效”。
5. 常见故障排查与实验心得
5.1 同VLAN内不通,按这个顺序查
同VLAN内通信理论上很简单,但实际出错的地方很基础。我的排查顺序是:
- 物理层:display interface查看端口状态是不是up。有时候模拟器环境里端口被shutdown了,display interface显示状态是Administratively down,配置再多都白搭。
- 端口归属:display vlan brief查看端口到底在哪个VLAN里,确认没有划错。
- 端口类型:确认链路类型是不是access,default vlan是不是目标VLAN。
- 终端地址:IP、掩码是否和VLAN网段匹配。比如VLAN 10是192.168.10.0/24,终端却配了192.168.20.0的地址,二层能通但业务根本对不上。
- 终端防火墙:Windows防火墙拦截ICMP的情况也很常见,先ping网关确认终端自身三层通不通。
实际案例:有一次我在模拟环境里怎么都不通,最后发现是端口shutdown了。这种低级错误说出来有些丢人,但排查顺序清晰的时候,一分钟就能定位。
5.2 跨VLAN不通,原因速查表
跨VLAN不通的原因比同VLAN多,我把最常见的整理成了一张表:
| 现象 | 可能原因 | 定位命令 | 解决办法 |
|---|---|---|---|
| ping网关不通 | VLANIF没配置或IP错误 | display ip interface brief | 在对应VLANIF下配置正确IP |
| 网关通了、跨VLAN不通 | Trunk没有放行目标VLAN | display port vlan | 两端Trunk都allow-pass对应VLAN |
| 终端能ping通部分VLAN | allow-pass只放行了部分VLAN | display current-configuration | 补全allow-pass列表 |
| 终端网卡有两个IP | 手动IP和DHCP地址冲突 | ipconfig /all | 去掉多余IP,只保留正确配置 |
| 时有通时不通 | 网段内IP冲突 | display arp,抓包看ARP应答 | 检查重复地址并修正 |
| 二层交换机配了VLANIF也不通 | 设备不支持三层转发 | display version查看型号 | 改用三层交换机或外接路由器 |
这里要特别说IP冲突的问题。公司局域网里经常有人手动配了一个和DHCP地址池重叠的静态IP,结果终端时通时不通。排查方法很直接:在交换机上display arp,如果同一个IP出现了两条记录,但MAC地址不一样,那基本可以确认冲突了。再配合抓包,能看到ARP应答报文的源MAC和IP不匹配,一次就能抓到元凶。
5.3 管理VLAN、设备IP与安全注意点
给设备做远程管理时,一个不能偷懒的设计是单独划一个管理VLAN。我在实验里用的是VLAN 99,网段192.168.99.0/24,专门给交换机、路由器等设备的管理接口提供服务,不承载任何业务流量。
在核心交换机上配置:
bash复制interface vlanif 99
ip address 192.168.99.254 255.255.255.0
然后把需要远程管理的交换机都加入VLAN 99,并且保证Trunk链路放行VLAN 99。如果是接入交换机通过Access口接网管PC,那就把对应端口划到VLAN 99。这样设备的管理地址和业务地址彻底分开,即使业务VLAN出了问题,管理员还能通过管理VLAN登进设备排查。
安全方面有几个基本操作必须养成习惯:管理网段只允许特定管理员IP访问,可以在VLANIF 99下挂ACL控制;设备口令设置有效期策略,避免长期不换密码;绝对不用默认密码和弱口令。这些看似不是“实验报告”的常规内容,但生产环境中写进设备基线管理是必须的。
5.4 扩展:K8s场景里VLAN怎么玩
可能有人觉得VLAN这种概念太“传统”,其实在云原生环境里它依然是底层物理网络的基本隔离方式。K8s的默认CNI网络通常是Overlay模式,Pod IP和物理网络不直接打通。但如果业务需要Pod直接接入现有二层网络,常见的做法是用Multus CNI给Pod挂第二块虚拟网卡,通过macvlan或IPvlan插件关联到宿主机物理网卡,再打上VLAN Tag。
你可以把它理解成:传统实验里交换机的Access/Trunk,在K8s里变成了网络插件的配置项。比如NetworkAttachmentDefinition里指定VLAN ID和master物理网卡,Pod创建后就直接进入对应广播域,陌生人访问不到。这和我在上面做的经典实验核心逻辑完全一致,只是把“端口加入VLAN”变成“Pod网卡绑定VLAN Tag”。
所以我一直认为这个经典实验值得反复做,不管技术栈怎么变,IP和VLAN的映射关系、二层隔离与三层寻址的分工,永远是网络通信的基本框架。
6. 做完实验后我的一点体会与下一步玩法
做完这组实验,我最大的体会是:配置命令永远是次要的,真正值钱的是脑子里能跑通“数据包从PC1出来,打上什么标签,经过哪个接口,MAC改了谁,IP有没有变”这条推理链。建议新手做实验时先把IP规划表和VLAN对照表画在纸上,再动手敲命令;每改完一段配置,立刻用display验证,别等全配完才一起查,否则问题一多根本分不清是配置错还是环境错。
后续想继续往深走的话,可以在这个拓扑上加ACL做VLAN间访问控制,指定谁可以访问服务器区;也可以接一台DHCP Server下发地址,配合DHCP Snooping防私接小路由;再进阶一点,还能把生成树、链路聚合加进来,模拟一个收敛时间更短的冗余环境。每一次扩展,都会让你对IP和VLAN这套体系的理解更深一层。
