1. VLAN到底是什么——从一次“全网卡死”事故说起
先讲个我早年遇到的真实场景。某公司办公区大概有四五十台电脑,加上打印机、无线AP、监控摄像头,全部连在几台交换机上,没有做任何VLAN划分。平时上网刷刷网页还好,一到上午十点大家集中办公,整个网络就开始卡顿,ping网关的延迟从1毫秒飙升到两三百毫秒,公司内部共享文件夹打开要转圈十几秒,视频会议基本没法开。最严重的一次,一台染毒电脑在局域网里疯狂发广播包,直接把全网所有终端的网络全部打瘫,交换机CPU占用率飙到90%以上,所有端口都在闪。
排查了半天才定位到问题根源——整个网络就是一个巨大的广播域。任何一台设备发出的广播帧,都会被交换机转发给所有其他设备,所有终端都要停下来处理这个广播。设备多了之后,广播流量就像几百个人同时在一个房间里大声喊话,谁也别想安静干活。这就是VLAN技术解决的第一个核心问题:划分广播域,让广播流量被限制在某一个虚拟局域网内。
VLAN全称是Virtual Local Area Network,虚拟局域网。它的本质作用是把一台物理交换机在逻辑上切成若干台“虚拟交换机”。我常拿写字楼来打比方,一栋楼(一台交换机)里面有很多家公司,如果不隔断,所有人的电话、邮件、访客都在同一空间里互相干扰。VLAN就是给这栋楼装上隔断,划分出独立的办公室,每间办公室的信号只在内部传播,互不串扰。
这个实验是路由交换学习中绕不开的一道坎。网络上经常有人问,配置了VLAN之后PC之间ping不通是怎么回事,跨交换机VLAN不通又是哪里没配。这篇文章就把VLAN从原理到实验完整走一遍,包括Access口和Trunk口的配置、VLAN间路由的实现方式、以及最常见的故障排查思路。适合刚学网络基础的学生、准备网络工程师认证的人,以及在日常工作中需要配交换机但没人带的朋友。读完你可以直接照着步骤在自己的模拟器或现有设备上复现整个实验过程。
1.1 广播域失控的真实代价
广播域这个概念,搞网络的人天天挂在嘴边,但真正意识到它分量的人不多。广播帧是MAC地址全F的设备发出来的“喊话”,用来做ARP解析(知道对方IP、询问对方MAC地址)、DHCP租约获取这类工作。在同一个广播域内,所有接在同一台交换机上的设备,无论物理端口在哪,只要收到广播帧就必须处理。
我见过一个比较典型的失误。某公司在网络改造的时候,为了省一个路由器的钱,把原来分属两个部门的电脑全部怼在同一台48口交换机上,两台核心交换机之间只做了一条链路。表面上看网络是通了,但两个部门各自的广播协议、Windows的发现机制、打印机扫描广播、摄像头组播,全部混在一起。一次全网扫描类软件跑下来,广播流量瞬间翻了好几倍,普通办公终端的网卡被迫处理大量无关广播,CPU占用升高,在线会议的音质断断续续。最终没办法,还是乖乖上VLAN重新割接。
从这个例子能引出VLAN的第一个收益:缩小故障域。一个端口连接的主机出现问题、疯狂发帧的时候,只影响它所在的VLAN,其他VLAN设备依然正常工作。这也是网络设计中“一个VLAN尽量对应一个业务或一个部门”的核心原因——把风险隔离到最小范围。
1.2 VLAN的原理和802.1Q标签机制
先看数据链路层的帧结构。普通以太网帧有目标MAC、源MAC、类型字段和数据。交换机收到帧之后,根据目标MAC查MAC地址表,决定从哪个端口转发出去。问题来了:如果交换机端口上划分了VLAN,交换机怎么知道这个帧属于哪个VLAN?
答案是打标签。IEEE 802.1Q标准定义了VLAN标签的封装格式,在源MAC地址和类型字段之间插入4个字节的Tag,其中包含12位的VLAN ID,取值范围0到4095,可用范围一般是1到4094。交换机内部处理帧的时候,会先看Tag里的VLAN ID,再决定在哪个VLAN范围内转发。这个逻辑跟快递分拣很像——包裹外面贴了标签,分拣机才能知道该扔到哪个格口。
不同厂商的命令行风格有差异,核心逻辑一致。给交换机端口划分VLAN之后,端口就分成了两类工作模式。Access模式端口只属于一个VLAN,一般用来接PC、打印机这类终端设备,打上Tag后再发出去的场景很少;Trunk模式端口允许承载多个VLAN的流量,一般用来交换机之间互联或者连路由器。Trunk口在转发帧时,会把VLAN Tag保留在以太网帧里传过去,对端交换机照着Tag做转发。
1.3 为什么不直接用IP网段隔离
我记得有朋友问过,既然划分网段也能隔离,比如财务部用192.168.1.0/24、技术部用192.168.2.0/24,何必搞VLAN?这是个好问题,但要知道,IP网段只是逻辑地址的划分,它自己能限制广播吗?答案是:有一个前提,必须通过三层设备(路由器或三层交换机)隔开广播域。
两台电脑虽然IP在不同网段,但接在同一台交换机上,它们之间可以直接通过MAC地址通信吗?严格说,不同网段的主机通信必须经过网关转发,但广播帧(比如ARP请求网关MAC的广播)依然是二层广播,交换机照样会把它从所有同VLAN的端口泛洪出去。也就是说,如果没有VLAN隔离,你划分了多个IP网段,二层的广播风暴依然会跨越网段边界传播。只有VLAN(或独立的物理网络)才能在三层以下真正切断广播域。正确的网络设计是:先划分VLAN做隔离和广播控制,再给每个VLAN配置IP网段和网关做三层转发,两层配合,既隔离了广播又保留了通信能力。
2. 实验拓扑设计与VLAN规划
做实验之前,先把拓扑和地址规划搞明白。这一步看着简单,但直接影响后面所有配置和排错。我见过不少人在实验里配到一半才发现IP掩码写错、交换机互联端口忘记规划,回头又从头重来,浪费时间不说,排查的时候还容易被误导。
2.1 实验环境的最低要求
这个实验需要准备一台路由器或三层交换机,外加至少两台二层交换机、几台PC。设备数量可以灵活调整,但至少要满足“两台交换机之间有一条互联链路,交换机下分别接PC,并且配置两个VLAN”的模型,这样才能把Access、Trunk、VLAN间路由都覆盖到。
我用的是模拟器环境。现在的模拟器功能已经相当成熟,可以按照真实设备的命令行敲命令,也能模拟抓包,适合初学者反复练习。如果你手头有真机那就更好,毕竟真实设备的端口气泡、指示灯反应和模拟器还是有一点差别,但实验逻辑和命令行为基本一致。不管是真机还是模拟器,实验做完之后记得把配置文件导出保存,方便以后复盘。
在开始之前还有一个容易忽略的准备项:把模拟器中所有设备恢复出厂状态。有些旧配置文件里残留了VLAN信息,可能干扰实验结果。确保所有设备处于清空状态后再动手,能省不少麻烦。
2.2 地址规划与VLAN规划表
我设计的这个实验拓扑如下。三台设备:交换机A、交换机B,还有一台路由器。交换机A和交换机B之间用一条链路直连。PC1接在交换机A的F0/1口,PC2接在交换机A的F0/2口,PC3接在交换机B的F0/1口,PC4接在交换机B的F0/2口。
VLAN划分按业务逻辑来:VLAN 10规划给办公区,VLAN 20规划给服务器区。这是最常见的做法——办公终端和服务器区域彼此隔离,但又能通过L3路由通信。
| 设备 | 接口 | 所属VLAN | IP地址 | 网关 |
|---|---|---|---|---|
| PC1 | 交换机A F0/1 | VLAN 10 | 192.168.10.1/24 | 192.168.10.254 |
| PC2 | 交换机A F0/2 | VLAN 20 | 192.168.20.1/24 | 192.168.20.254 |
| PC3 | 交换机B F0/1 | VLAN 10 | 192.168.10.2/24 | 192.168.10.254 |
| PC4 | 交换机B F0/2 | VLAN 20 | 192.168.20.2/24 | 192.168.20.254 |
交换机互联链路规划为Trunk模式,允许VLAN 10和VLAN 20通过。路由器的接口则要做成单臂路由的形态,也就是在同一个物理接口上划分子接口,分别承担VLAN 10和VLAN 20的网关角色。这个后文会详细展开。
这里要特别提醒一点,地址规划和VLAN ID表最好在纸上先画出来。很多新手配的时候直接看屏幕敲命令,配完才想起没有记录哪个IP对应哪个PC、哪个VLAN给到哪个网段,结果排查的时候对着配置一行行翻,效率极低。把它当成实验的第一个正式步骤,认真对待。
2.3 基础配置的搭建思路
交换机的基础配置顺序很重要。我习惯的步骤是:先改设备主机名,方便后续识别;然后创建VLAN并命名;再配置端口模式;最后做验证查看。改主机名这一步看起来可有可无,实际排错的时候特别有用。尤其是跨多台交换机操作,如果所有设备还是默认名字,用show命令看到输出时根本分不清是登录到哪台设备上。
交换机上创建VLAN的通用逻辑是进入VLAN数据库创建编号,再给VLAN起个名字。VLAN名字主要用于可读性,配置里对转发行为没有实际影响,但一个规范的命名习惯能让你半年后回看配置时轻松理解业务意图。
3. 核心实验:Access口和Trunk口的配置
这个部分是VLAN实验的重头戏。很多人对Access口和Trunk口的概念理解不深,经常出现“PC能通但服务器不通”“跨交换机同一个VLAN不通”之类的问题。把这两个端口的工作模式彻底搞明白,后面所有排错都能迎刃而解。
3.1 Access口配置与PVID
Access口在交换机上承担的角色是“接入终端设备”。它只归属于一个VLAN,收到不带Tag的普通帧时,会给这个帧打上该端口所属的VLAN的Tag,交换机随后在VLAN内部转发;从交换机转发到Access口时,则会剥掉Tag后再发给终端。终端设备(PC、打印机)本身不感知VLAN,它们发出的帧是普通无Tag帧,Access口负责双向翻译。
配置命令分为几个要素。先创建VLAN:
vlan 10 name office_vlan vlan 20 name server_vlan然后进入端口做配置:
interface fastEthernet0/1 switchport mode access switchport access vlan 10关键在于两条命令。switchport mode access将端口锁定为Access模式,switchport access vlan 10将该端口的PVID(Port VLAN ID)设为10。PVID的含义就是:这个端口收到不带Tag的帧时,默认给帧打上VLAN 10的标签。这个概念在Trunk口上同样存在,但意义略有不同,后面会讲到。
如果要让PC1和PC3之间通信,前提是它们所在的两个端口都属于同一个VLAN且IP在同一网段。实验里PC1接在交换机A的F0/1属于VLAN 10,PC3接在交换机B的F0/1也属于VLAN 10,中间链路做成Trunk,那么二层转发路径就通了。
这个小节的操作看似只有三行命令,但有一个细节值得玩味:Access口的VLAN属性可以在数据帧进入交换机的一瞬间决定它属于哪个广播域。也就是说,同一台交换机上哪怕所有端口连的都是相同型号的电脑,想让它们互相隔离,不需要换设备、不需要改网线,只需要把端口划到不同的VLAN里。二层网络的灵活改变,核心就落在这条简单的配置上。
3.2 Trunk口配置与802.1Q封装
Trunk口是交换机与交换机之间的桥接通道。它允许承载多个VLAN的数据帧,转发时必须保留帧里的Tag信息,否则对端交换机就无法判断帧属于哪个VLAN。802.1Q标签的作用从这里体现出来——接口收到帧时看到Tag为10,就知道这是VLAN 10的流量。
配置Trunk口的步骤:
interface gigabitEthernet0/1 switchport mode trunk switchport trunk allowed vlan 10,20有些设备上还需要额外指定封装的类型:
switchport trunk encapsulation dot1q这个命令在部分设备上是必要的,如果不指定封装,接口可能默认跑其他私有协议或协商失败,结果就是两边都是Trunk,但标签格式对不上,流量全丢。模拟器环境一般默认已经封装为802.1Q,真机则务必注意检查。
我看到不少人在配置Trunk时直接把allowed vlan写成all,图省事让所有VLAN都过。这个改法在实验里没问题,但实际生产环境不建议这么干。万一后期有人在交换机上新建了一个机密业务VLAN,忘了Trunk口全放行,流量就悄悄跨设备传播了。规范的Trunk策略应当显式声明允许哪些VLAN通过,不允许的一律排除。
配完之后用验证命令查看:
show interfaces trunk show vlan brief如果看到端口状态为trunking,且allowed vlan列表里包含VLAN 10和VLAN 20,说明配置正确。如果接口状态显示down或者trunk模式协商失败,先检查对端交换机的相同接口是否也配置成了trunk,再检查物理线缆是否连接正常。
3.3 二层隔离验证:同VLAN互通、跨VLAN不通
配置完成之后,最直观的验证方式是用PC之间互相ping。预期结果是PC1和PC3能ping通(同VLAN 10跨交换机),PC2和PC4能ping通(同VLAN 20跨交换机),但PC1和PC2之间ping不通(不同VLAN,且尚未做VLAN间路由)。
如果你做的实验结果违背了这个预期,别慌,这是排查的开始。我遇到过最常见的情况是PC1和PC3互相ping不通,查了半天发现不是VLAN的问题,而是两台PC的IP不在同一网段,或者模拟器里PC的网关地址填错了。VLAN解决了二层隔离,但IP层通信的前提依然没有变:同网段才能直连通信,跨网段必须走三层网关。
这里顺便提一个排查二层通断的好用工具:在两台PC上同时ping网关地址,然后在交换机上用debug或者抓包功能观察ARP请求走向。如果ARP能看到但ICMP Reply回不来,说明链路通了但某个VLAN内环路或者端口协商有问题,缩小范围去查。如果ARP根本过不去,那就是VLAN划分或Trunk放行有问题。这个方法比盲目改配置高效得多。
4. VLAN间通信的两种实现方案
VLAN之间默认是二层隔离状态,但办公场景里不可能让所有部门彻底断网,很多时候依然需要访问共享服务器或跨部门协作。这就引出VLAN间路由的问题。实现方式主要两种:单臂路由和三层交换机的SVI。我用同一个拓扑分别演示两种做法,可以对比一下各自的手感和适用场景。
4.1 单臂路由的原理与配置
单臂路由的思路很朴素:路由器只有一个物理接口连接交换机,但在这个物理接口上划分子接口,每个子接口对应一个VLAN的网关IP。交换机侧把连接路由器的端口配为Trunk,将各VLAN的帧以带Tag的形式送到路由器;路由器子接口收到帧后,根据Tag判断属于哪个VLAN,从对应的子接口处理转发。
路由器上配置示例:
interface fastEthernet0/0.10 encapsulation dot1q 10 ip address 192.168.10.254 255.255.255.0 interface fastEthernet0/0.20 encapsulation dot1q 20 ip address 192.168.20.254 255.255.255.0 interface fastEthernet0/0 no shutdown这个配置有两个关键点。第一,物理接口本身不能配置IP地址,IP必须配置在子接口上,否则子接口无法正常工作。第二,encapsulation dot1q后面的数字必须和VLAN ID一一对应,这个数字不仅是标识,还决定了路由器收到Tag为10的帧时走哪个子接口。
我曾经在这上面栽过跟头。物理接口忘了敲no shutdown,结果路由器子接口配置得漂漂亮亮但从头到尾起不来,PC的网关一直ping不通。后来检查接口状态才发现物理层down了。在模拟器里这个命令往往默认开启,真机则必须显式执行。
单臂路由的优点是设备门槛低,只要有台路由器就能做实验,适合学习和测试。缺点同样明显:所有VLAN间的流量都要挤在同一条物理链路上,带宽共享、延迟高,数据量大了容易拥塞。生产环境一般不建议把它作为大流量的主干方案。
4.2 三层交换机的SVI配置
三层交换机把路由功能集成到了交换机内部,不需要占用物理链路跑到外面绕一圈。通过配置SVI(Switch Virtual Interface,交换虚拟接口)直接给每个VLAN一个虚拟的三层接口,VLAN之间通信时数据帧只在交换机内部交换结构里转发,速度远快于单臂路由。
只需要在交换机上创建VLAN,配置对应VLAN接口的IP和开启三层转发:
interface vlan10 ip address 192.168.10.254 255.255.255.0 interface vlan20 ip address 192.168.20.254 255.255.255.0在三层交换机上还需要开启IP路由功能:
ip routing这条命令让交换机具备转发三层流量的能力。如果少了它,SVI接口即使配置了IP地址,交换机也不会在VLAN之间做路由,流量到了交换机就丢。这也是新手最容易漏掉的一步。
SVI的优势是性能高、配置简洁、天然适合大规模VLAN互访。做完二层Access/Trunk配置后,只需要创建VLAN、配置vlan接口IP、开启ip routing,整个三层网络就完成了。在实际企业网络中,三层交换机是绝大多数内网VLAN间路由的标准方案,单臂路由更多存在于实验教科书或者小型测试环境。
4.3 两种方案怎么选
直接给结论:如果你是要做实验学习原理,两种都做一遍最好,能加深理解;如果是在模拟器中模拟企业环境做综合实验,建议把三层交换机方案作为首选实现,因为操作维护更简单、效果更接近真实核心网络。
单臂路由适合在设备条件有限的环境临时顶替,或者做小规模流量不大的分支网络。而一旦业务量上来、VLAN数量增多,单臂路由的链路瓶颈就会被无限放大,这时候三层交换机的优势就明显了。三层交换并不是“淘汰”了路由器,而是在内网VLAN间转发这个具体场景里效率更高。路由器依然承担着连接外部网络、策略控制、NAT等更复杂的功能。
5. 常见问题与排查思路实录
这个章节写的是我从VLAN实验和实际工程中遇到比较多的故障点,每条都附上排查思路,你可以直接对照着操作。
5.1 PC之间ping不通,第一反应查什么
最基本但最容易被忽略的两点摆在最前面。一是IP地址和掩码,确认两台PC是不是在同一网段。VLAN隔离的是二层广播域,但IP不在同一网段依然不通。二是网关地址是否填了正确。如果网关错了,跨网段通信就无从谈起。
确认完这两点后,用ping网关先做分段定位。PC1能ping通自己的网关,说明从PC到交换机VLAN接口这段链路正常;PC1不能ping通网关,问题多半出在PC的接入端口所属VLAN、IP配置或者网关设备配置。排除法在网络故障排查里永远是最高效的思路。
5.2 Trunk口通了,但跨交换机的同VLAN不同
这是我在模拟器里做过很多次实验后总结出的一个高发问题。两台交换机之间的Trunk配置看着没问题,show interfaces trunk显示也在工作,但PC3就是ping不通PC1。
排查步骤按顺序走:第一,检查PC两端是否在同一VLAN,这是最基础的一层;第二,检查Trunk的allowed vlan是否包含对应VLAN,有些配置里写了vlan 10,20,但手滑漏掉了其中之一;第三,检查交换机之间的链路是否真正协商成了Trunk模式。在一些设备上两端需要手动指定模式,如果一端是trunk一端是auto或者desirable,可能协商失败而走成其他模式。
还可以在交换机上查MAC地址表来定位。在交换机B上执行查看命令,如果发现PC1的MAC地址出现在交换机B的Trunk口下,说明二层转发没问题;如果找不到对应MAC,说明Trunk链路或VLAN放行有问题。这个方法比漫无目的地改配置有意义得多。
5.3 VLAN间网关通了,但PC上不了外网
这是把VLAN和路由都配完之后最容易出现的困惑。PC能ping通网关,甚至能ping通对端VLAN的设备,但访问外部网络不通。排查方向要从路由表入手。在路由器或三层交换机上查看路由表里有没有去往外部的路由条目,没配默认路由就加一条,有的话再确认下一跳地址是否可达。
另一个容易被忽略的点是NAT或ACL。外部网络地址是私网地址时可以直通,但访问公网必须做地址转换,没有NAT策略流量自然是出不去的。这个问题已经超出VLAN本身,但做综合实验时常常交织在一起,顺手提一下,免得被困住很久。
5.4 VLAN 1的特殊性
VLAN 1是默认VLAN,交换机所有端口初始都在VLAN 1,DTP、VTP这类协议默认跑在VLAN 1的管理域上。很多网工在实验里习惯直接把VLAN 1删了或者把端口全从VLAN 1挪走,但要知道VLAN 1在很多设备上无法删除,且控制面协议的默认承载VLAN就是它。
生产环境的安全建议是把Trunk口的Native VLAN改成其他VLAN(在802.1Q中不带Tag的Native VLAN),不要让VLAN 1承担任何用户业务流量,防止VLAN跳跃类攻击。做实验时不必过度纠结这一点,但养成一个规范的配置习惯会让你以后少踩很多坑。
最后说点个人体会。VLAN这个实验是整个交换技术里最值得反复亲手做的基础实验之一,配置命令少,但涉及的概念密度很高。如果你在实验中遇到问题,建议不要急着翻答案,尝试自己顺着数据帧的走向推一遍——PC发出帧、进入交换机打Tag、Trunk转发、对端剥离Tag、到达目标PC,每走一步分析可能出错的环节。这个过程练出来的排错思维,比记住几条命令值钱得多。