1. 实验背景与整体设计思路
1.1 为什么以太网基础和VLAN是网络入门的必修课
刚接触网络设备配置的朋友,十有八九第一个卡住的地方就是VLAN。不是说它概念有多难,而是很多人一上来就背命令,背完了也不知道自己到底在干什么。我在带新人的时候经常遇到这种情况:vlan batch 10 20敲得飞快,问他为什么这么敲,答不上来。
以太网基础和VLAN配置之所以被放在几乎所有网络课程的最前面,原因很直接——它是后面所有高级特性的地基。你后面要学的链路聚合、STP、VRRP、甚至SDN,全都建立在“广播域怎么划分”这个基本问题之上。VLAN就是回答这个问题的核心工具。
这个实验的价值在于,它让你亲手把一个物理网络切成若干个逻辑网络,并且用两种完全不同的思路去切:一种是看“你插在哪个口”,另一种是看“你是谁”。这两种思路分别对应基于接口划分VLAN和基于MAC地址划分VLAN,理解了它们的区别,你就理解了二层转发最核心的查表逻辑。
1.2 两种VLAN划分方式的本质区别
先说结论:基于接口划分VLAN,是“认口不认人”;基于MAC地址划分VLAN,是“认人不认口”。
基于接口的划分方式,交换机只看这个帧从哪个物理端口进来,进来之后直接打上这个端口预先配置好的VLAN标签。你换一台电脑插上去,只要端口配置没变,它还是属于同一个VLAN。这种方式配置简单、性能好,是实际项目中最常用的方案,占比大概在九成以上。
基于MAC地址的划分方式,交换机需要维护一张MAC地址到VLAN的映射表。当一个帧进入交换机时,交换机会读取源MAC地址,然后去查表,根据MAC地址决定这个帧属于哪个VLAN。这种方式的好处是,用户把电脑从会议室搬到工位,不用重新配置端口,VLAN跟着人走。但缺点也很明显:维护MAC地址表的工作量随终端数量线性增长,而且交换机需要额外查一次表,转发性能会有轻微下降。
注意:基于MAC地址划分VLAN在实际企业网络中很少大规模使用,但在一些特殊场景(比如会议室、培训室这种人员流动性大的地方)仍然有它的价值。考试和实验中出现频率很高,必须掌握。
1.3 实验拓扑与地址规划
这个实验的拓扑不复杂,但要把两种划分方式都验证清楚,需要稍微设计一下。我建议的拓扑是这样的:
- 一台三层交换机作为核心(假设型号支持VLAN划分的多种方式)
- 两台二层交换机作为接入
- 四台PC终端,分别命名为PC1到PC4
- 三层交换机与两台二层交换机之间用Trunk链路互联
地址规划方面,我习惯用这样的方案:
| 设备 | 所属VLAN | IP地址 | MAC地址(模拟) |
|---|---|---|---|
| PC1 | VLAN 10 | 192.168.10.1/24 | 00-01-02-03-04-0A |
| PC2 | VLAN 10 | 192.168.10.2/24 | 00-01-02-03-04-0B |
| PC3 | VLAN 20 | 192.168.20.1/24 | 00-01-02-03-04-0C |
| PC4 | VLAN 20 | 192.168.20.2/24 | 00-01-02-03-04-0D |
网关分别设在三层交换机的VLANIF 10和VLANIF 20接口上,地址用192.168.10.254和192.168.20.254。这样规划的好处是,后面做连通性测试的时候,同VLAN能通、跨VLAN经过三层转发也能通,逻辑非常清晰。
2. 基于接口划分VLAN的配置实操
2.1 Access口和Trunk口的基本配置逻辑
基于接口划分VLAN,核心就是两件事:把接入终端的端口配成Access模式并划入指定VLAN,把交换机之间的互联端口配成Trunk模式并放行对应VLAN。
先看接入侧的配置。以连接PC1的端口为例,假设是GigabitEthernet0/0/1:
interface GigabitEthernet0/0/1 port link-type access port default vlan 10这两条命令的含义是:这个端口只属于VLAN 10,进来的无标签帧全部打上VLAN 10的标签,出去的帧剥离VLAN 10的标签。PC1完全感知不到VLAN的存在,它以为自己接在一个普通的以太网口上。
再看Trunk口的配置。交换机之间的互联端口需要放行多个VLAN:
interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20这里有个细节很多人会忽略:Trunk口默认只放行VLAN 1,你不手动allow-pass的话,VLAN 10和20的流量是过不去的。我见过不止一个新人配完Trunk发现不通,排查半天最后发现是忘了放行VLAN。
提示:如果Trunk口需要放行大量VLAN,可以用
port trunk allow-pass vlan all,但生产环境不建议这么做,安全风险较大。实验环境图省事可以用。
2.2 三层交换机上的VLANIF配置
二层交换机只管转发,跨VLAN通信必须靠三层。三层交换机上需要创建VLANIF接口并配置IP地址,充当各VLAN的网关:
vlan batch 10 20 interface Vlanif10 ip address 192.168.10.254 24 interface Vlanif20 ip address 192.168.20.254 24配完这一步,三层交换机就相当于有了两个虚拟的三层接口,分别对应VLAN 10和VLAN 20。PC1 ping PC3的时候,流量先到VLANIF 10,三层交换机查路由表发现目标网段是192.168.20.0/24,直接从VLANIF 20转发出去,整个过程不需要额外配置静态路由,因为直连网段自动生成路由。
这里有个容易踩的坑:三层交换机上创建VLANIF之前,必须先创建对应的VLAN。顺序反了的话,VLANIF接口起不来。我一般习惯先vlan batch把所有需要的VLAN一次性建好,再去配VLANIF。
2.3 连通性验证与结果分析
配置完成后,验证步骤要按顺序来,不要跳步:
- 先在PC1上ping PC2(同VLAN同交换机),确认二层转发正常
- 再在PC1上ping PC3(跨VLAN),确认三层转发正常
- 最后在PC1上ping PC4(跨交换机跨VLAN),确认Trunk链路和三层转发都正常
如果第1步就不通,问题大概率在Access口配置或者PC的IP配置上。如果第1步通、第2步不通,检查VLANIF接口状态和IP地址。如果前两步通、第3步不通,重点检查Trunk口的allow-pass列表。
我实测下来,最常见的故障原因排名是:Trunk口没放行VLAN(占40%)、PC的网关配错(占30%)、VLANIF接口没up(占20%)、其他(占10%)。按这个顺序排查,基本能覆盖绝大多数问题。
3. 基于MAC地址划分VLAN的配置实操
3.1 MAC地址与VLAN映射表的建立
基于MAC地址划分VLAN,配置思路和基于接口完全不同。你不再关心端口属于哪个VLAN,而是告诉交换机:“看到这个MAC地址的帧,给它打上这个VLAN的标签。”
配置命令是这样的:
vlan 10 mac-vlan mac-address 0001-0203-040A priority 0 vlan 20 mac-vlan mac-address 0001-0203-040C priority 0这里0001-0203-040A是PC1的MAC地址,priority 0是优先级,数值越小优先级越高。当一个帧的源MAC地址同时匹配多条表项时,优先级高的生效。实际环境中一般不会出现一个MAC匹配多个VLAN的情况,但实验里可以故意配一条冲突的表项来验证优先级机制。
配完映射表之后,还需要在端口上启用MAC-VLAN功能:
interface GigabitEthernet0/0/1 mac-vlan enable注意,端口不需要配port link-type access,也不需要指定默认VLAN。端口在这里的角色变成了一个“透明通道”,交换机根据帧的源MAC地址动态决定它属于哪个VLAN。
3.2 端口模式与MAC-VLAN的配合要点
这里有一个非常关键的细节:MAC-VLAN功能只在Hybrid端口上生效。如果你把端口配成了Access模式,MAC-VLAN是不起作用的。很多实验指导书没写清楚这一点,导致很多人配完了发现不生效,排查半天找不到原因。
正确的端口配置应该是:
interface GigabitEthernet0/0/1 port link-type hybrid mac-vlan enableHybrid端口的特点是既可以处理带标签的帧,也可以处理不带标签的帧,非常灵活。MAC-VLAN功能需要这种灵活性来根据MAC地址动态打标签。
注意:如果端口之前配过
port default vlan,需要先undo掉,否则MAC-VLAN和静态VLAN配置会冲突,交换机的行为可能不符合预期。
3.3 两种划分方式的对比验证
为了直观展示两种方式的区别,我设计了一个对比实验:
第一步,在基于接口划分的方案下,把PC1从端口1拔下来插到端口2(端口2属于VLAN 20),PC1的IP不变。结果:PC1无法ping通PC2了,因为端口2属于VLAN 20,PC1的流量被划到了VLAN 20,但PC1的IP还是192.168.10.1,网关在VLAN 10,跨VLAN通信需要经过三层转发,但PC1的网关配置没变,实际上PC1现在在VLAN 20里用VLAN 10的地址,肯定不通。
第二步,在基于MAC地址划分的方案下,做同样的操作。结果:PC1依然能ping通PC2。因为交换机是根据PC1的MAC地址来决定VLAN的,不管PC1插在哪个端口,只要MAC地址不变,它始终属于VLAN 10。
这个对比非常直观地展示了两种方案的核心差异。我在实际项目中选型的时候,如果终端位置固定,一律用基于接口的方案,简单可靠;如果终端流动性大,才会考虑基于MAC地址的方案,但也会控制终端数量,一般不超过50个,否则MAC地址表维护起来太痛苦。
4. 常见问题排查与避坑经验
4.1 VLAN配置不生效的排查思路
VLAN配完了不生效,原因可能有很多层。我总结了一个排查顺序,按这个顺序走,基本能定位到问题:
| 排查步骤 | 检查内容 | 常见问题 |
|---|---|---|
| 1 | 端口模式是否正确 | Access口配了Trunk,或者Hybrid口没启用MAC-VLAN |
| 2 | VLAN是否已创建 | 直接配端口默认VLAN但没建VLAN,端口起不来 |
| 3 | Trunk口是否放行 | allow-pass列表里没有目标VLAN |
| 4 | 三层接口是否up | VLANIF接口状态down,检查VLAN是否存在 |
| 5 | PC的IP和网关 | 网关配错、子网掩码配错、IP冲突 |
这个表看着简单,但每一步都有细节。比如第1步,Hybrid口没启用MAC-VLAN这个坑,我至少踩过三次。每次都是配完了发现不生效,检查MAC地址表发现表项是空的,才想起来端口模式不对。
4.2 MAC地址表项不生效的典型原因
MAC-VLAN配完了,用display mac-vlan all查看表项,发现表项存在,但流量就是不按预期走。这种情况我遇到过几种原因:
第一种,MAC地址格式写错了。不同厂商的设备对MAC地址格式的要求不一样,有的要求0001-0203-040A,有的要求00:01:02:03:04:0A,还有的要求0001.0203.040A。写错了表项虽然能配进去,但匹配不上。解决办法是用display mac-address先看交换机学到的MAC地址格式,照着抄。
第二种,端口没有启用MAC-VLAN。前面说过了,Hybrid口必须显式启用mac-vlan enable,Access口和Trunk口都不行。
第三种,MAC地址表项优先级冲突。如果同一个MAC地址配了多条表项,优先级数值相同的情况下,交换机的行为不确定。我一般建议优先级从0开始,每条表项用不同的优先级,避免冲突。
4.3 实验环境中的几个实用技巧
第一个技巧:用display vlan命令查看VLAN的端口成员关系。这个命令会列出每个VLAN下有哪些端口,是Access口还是Trunk口,一目了然。排查端口划错VLAN的问题特别快。
第二个技巧:用display mac-vlan all查看MAC-VLAN映射表。这个命令会显示所有MAC地址到VLAN的映射关系,包括优先级。配完了先看一眼,确认表项都进去了再测试。
第三个技巧:在PC上抓包。如果条件允许,在PC上开Wireshark抓包,能看到交换机发出来的帧到底带不带VLAN标签。Access口出来的帧不带标签,Trunk口出来的帧带标签,Hybrid口根据配置决定。抓一次包,比看十遍文档都管用。
提示:实验环境中如果PC不支持抓包,可以在交换机上配端口镜像,把流量镜像到另一个端口,再接一台抓包设备。这个方法稍微麻烦一点,但非常有效。
4.4 从实验到实际项目的经验迁移
实验做完了,怎么用到实际项目里?我的经验是,实际项目中90%以上的场景用基于接口划分VLAN就够了。基于MAC地址划分VLAN虽然灵活,但维护成本高,而且不是所有交换机都支持。选型的时候先确认设备支持哪些VLAN划分方式,再根据终端流动性决定用哪种。
另外,实际项目中VLAN规划要有前瞻性。我见过太多项目一开始只规划了10个VLAN,结果半年后不够用,临时加VLAN导致配置混乱。我的习惯是按部门、按楼层、按功能三个维度预留VLAN号段,比如10-19给部门A,20-29给部门B,30-39给服务器,40-49给管理网段。这样后面扩展的时候不会乱。
最后说一个我踩过的坑:Trunk口两端的allow-pass列表必须一致。有一次我配一端放行了VLAN 10 20 30,另一端只放行了VLAN 10 20,结果VLAN 30的流量死活过不去。排查的时候只看了本端配置,忘了看对端,浪费了半个小时。从那以后我养成了一个习惯:配Trunk口的时候,两端同时配,配完用display port vlan对比两端的放行列表,确认一致再往下走。