网络这行干久了你会发现,能把单台交换机玩明白不算本事,真正拉开差距的是——你把交换机插上电之后,那些看不见的“逻辑圈地”是怎么画的。VLAN就是其中最早、最基础、也最要命的一层。写这篇学习日志之前,我自认为对VLAN已经不陌生,可真当我去梳理“VLAN到底切开了什么、标签在哪插进去的、为什么二层隔离之后还得靠三层开口子”这几个问题时,才发现漏洞比想象中多。这篇第十三篇学习日志,我会尽量把VLAN的基础原理拆开,从广播域讲到802.1Q,从Access口讲到Trunk口,再讲到跨VLAN通信和常见坑位,适合刚入门网络、正在备考认证、或者工作中被VLAN折腾过但一直没时间系统捋一遍的朋友。
1. 从一台“哑交换机”说起:VLAN到底在解决什么
1.1 没有VLAN的二层网络,广播域成了“大杂院”
要理解VLAN,先得理解一个概念:广播域。以太网本身是共享介质演变过来的,哪怕现在交换机已经可以点对点转发,但只要一个帧的目的MAC是广播地址(FF:FF:FF:FF:FF:FF),交换机就必须把它从所有端口转发出去。这个“所有端口”,就是广播域的边界。
你可以把一台没有任何VLAN配置的交换机,想象成一栋没有隔断的大厅。大厅里每个人说话,所有人都能听见。ARP请求、DHCP Discover、NetBIOS名字广播,这些都是“说话”。人少的时候无所谓,可一旦设备多了,比如接了200台PC、几十个摄像头、一批打印机,广播帧就会像菜市场里同时有几十个人扯着嗓子喊话,谁也别想听清谁。
这带来三个实际问题:
- 广播风暴风险:一台设备的网卡异常,疯狂发广播帧,整个二层网络全部遭殃,所有终端掉线。
- 安全隐患:所有设备处在同一个二层平面,抓包就能看到全网的广播和未知单播,PC之间甚至可以直接访问,谈不上什么隔离。
- 管理困难:想给市场部、研发部、财务部分配不同的网络策略,在同一个广播域里只能靠IP网段硬分,但二层还是共通的,策略形同虚设。
在没有VLAN的旧时代,大家靠什么解决?靠物理隔离——多买几台交换机,分成几组,花钱多、线缆乱、运维烦。VLAN的出现,就是要在不改变物理连接的前提下,把一台交换机逻辑上拆成几台“虚拟交换机”。
1.2 VLAN的本质:把交换机从物理上切成逻辑多台
VLAN,全称Virtual Local Area Network,中文叫虚拟局域网。它的核心动作就一句话:把一个物理二层网络,按VLAN ID划分成多个相互隔离的逻辑广播域。
这样说可能有点抽象,我换个说法。同一台交换机上,端口1到10划到VLAN 10,端口11到20划到VLAN 20。此时交换机内部的行为,就相当于有两台完全独立的虚拟交换机:VLAN 10里的设备互相通信没问题,VLAN 20里的设备也互相通信没问题,但VLAN 10的设备向VLAN 20的设备发广播帧?直接丢弃。单播帧如果目的MAC不在自己VLAN里,同样无处转发。
关键点在于:VLAN隔离的是广播域,不是物理链路。它没有改变端口插网线这个物理事实,只是在交换芯片内部加了一道逻辑门禁。数据帧进入交换机的瞬间,会被打上或者识别出VLAN标签,转发决策只在本VLAN内进行,出本VLAN的帧直接不进转发队列。
这也是为什么后期学STP(生成树协议)、堆叠、链路聚合时,你会发现很多机制的判断条件都跟VLAN绑定。VLAN不是网络设计的一个选项,而是二层网络地基上的“隔墙”,所有其他二层特性都在隔墙之上运行。
1.3 划分VLAN的三种姿势,重点先说静态
VLAN划分方式主要有三种,这里放一起对比:
| 划分方式 | 依据 | 特点 | 实际使用频率 |
|---|---|---|---|
| 静态端口划分 | 交换机端口绑定VLAN | 配置直观、管理简单、终端移动需要改端口 | 最高,绝大多数生产环境 |
| 基于MAC地址划分 | 终端MAC绑定VLAN | 终端插哪都能进对应VLAN,但维护量大 | 较低,仅特殊场景 |
| 基于IP子网/协议划分 | 报文的IP网段或协议类型 | 灵活但三层特征接入二层划分,麻烦且少见 | 极少,基本被静态替代 |
我工作中99%见到的都是静态端口划分。理由很简单:交换机端口位置固定,人动设备不动,方案最可靠。基于MAC的VLAN听起来很美,但你要维护一张庞大的MAC-VLAN映射表,哪个终端换了网卡还要重新登记,排查问题的时候就是灾难。
静态划分还有一个额外好处:端口的安全策略、QoS策略、风暴控制都可以跟着VLAN走,配置模板化管理,出一台新设备直接套模板就行。后面我写的配置示例,也全部用静态端口划分。
2. 802.1Q标签与端口模型:VLAN是靠什么跑起来的
2.1 以太网帧里那4个字节:Tag的组成
前面只说了VLAN的概念,但有个最实际的问题:交换机怎么知道一个数据帧属于哪个VLAN?
答案就是802.1Q标签。这是IEEE 802.1Q标准定义的一种扩展以太网帧格式,在传统以太网帧的源MAC地址和类型字段之间,插入4个字节的Tag字段,共32位。
这4个字节拆开看:
- TPID(Tag Protocol Identifier),2字节,固定为0x8100,用来标识这个帧带的是802.1Q标签。
- TCI(Tag Control Information),2字节,里面又分三块:
- PCP(Priority Code Point),3位,共8个优先级,用于QoS标记。
- DEI(Drop Eligible Indicator),1位,用于拥塞时丢弃指示。
- VID(VLAN Identifier),12位,这就是VLAN ID的存放位置,取值范围0到4095,其中0和4095保留,实际可用1到4094。
12位二进制,刚好是2的12次方等于4096个。所以你会看到“一个VLAN域里最多4094个可用VLAN”这种说法,这是硬性上限。
这里我建议用一个快递标签来理解:发货时不带标签,包裹到了中转仓,仓库管理员往包裹上贴一张“目的地编码”贴纸,其他中转站看到贴纸就知道往哪个方向转,到了最终分拣点,再把贴纸撕掉,改成裸包装送到收件人手里。802.1Q标签本质上就是交换机之间的“目的地编码贴纸”,只在需要识别VLAN的链路上存在,到终端设备之前通常要撕掉。
因为加了这4字节,以太网帧的最大长度从1518字节变成了1522字节。绝大多数现代设备都支持,但一些老设备、特殊网络设备如果MTU没跟上,就会收到“oversized”帧然后丢掉。这也是为什么有些低端打印机、老旧IP电话接在Trunk口后面会莫名其妙不通——不是VLAN问题,是MTU问题。
2.2 Access口和Trunk口的行为差异,一张表说清
交换机端口针对VLAN有两种基本角色:Access口(接入口)和Trunk口(干道口)。这个知识点必须烂熟于心,否则后面排查问题一头雾水。
Access口通常连接终端设备,比如PC、打印机、IP电话。它只属于一个VLAN,这个VLAN叫PVID(Port VLAN ID),也就是端口的缺省VLAN。Access口的收发规则很简单:
- 收帧:收到无标签帧,打上PVID对应的标签,进入该VLAN的广播域;收到有标签帧,如果标签VLAN不是PVID,直接丢弃。
- 发帧:不管帧原本属于哪个VLAN,发出去之前一律剥掉标签,终端收到的永远是裸帧。
Trunk口通常连接交换机与交换机、交换机与路由器。它的职责是允许一个或多个VLAN跨设备传递。Trunk口的收发规则:
- 收帧:收到无标签帧,打上PVID对应的标签;收到有标签帧,检查该VLAN是否在允许列表中,在就收,不在就丢。
- 发帧:VLAN等于PVID的帧,通常剥掉标签转发(这叫“本征VLAN不带标签”);其他VLAN的帧,带着原始标签转发。
用一张表直观看差异:
| 对比项 | Access口 | Trunk口 |
|---|---|---|
| 面向设备 | 终端(PC、打印机等) | 交换机、路由器等网络设备 |
| 属于VLAN数 | 1个(PVID) | 可同时转多个VLAN |
| 发帧标签 | 无标签 | PVID的帧无标签,其余带标签 |
| 收无标签帧 | 打上PVID | 打上PVID |
| 收有标签帧 | 非PVID丢弃 | 在允许列表中则接受 |
有一种情况要特别记:有些厂商的Access口在收到带非PVID标签的帧时,也可以配置成接受并转发,但默认行为大概率是丢弃。生产环境不建议依靠这种非标行为,老老实实按“Access收终端、Trunk连交换机”来设计就对了。
2.3 最小但完整的配置:一台交换机划3个VLAN
原理说再多,不如动手配一遍。我这边用一个最小化拓扑做演示:一台企业级交换机,五个PC端口,规划成三个VLAN——VLAN 10接研发部、VLAN 20接市场部、VLAN 30接服务器区。另外选一个上行口做Trunk,预留两台交换机互联用。
不同厂商的命令行有差异,但思想完全一致。下面以常见的企业级交换机命令行风格为例,把关键步骤写一遍:
# 进入系统视图,创建三个VLAN system-view sysname SW1 vlan batch 10 20 30 # 配置端口1为Access口,划入VLAN 10 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit # 配置端口2为Access口,划入VLAN 20 interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quit # 配置端口3为Access口,划入VLAN 30 interface GigabitEthernet0/0/3 port link-type access port default vlan 30 quit # 配置上行口为Trunk口,允许VLAN 10、20、30通过 interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 30 quit # 保存配置 save配置完一定要验证。我会习惯性敲三条命令:
display vlan display port vlan display interface GigabitEthernet0/0/24第一条看VLAN存在哪些端口,第二条看端口当前PVID和允许列表,第三条看Trunk口有没有误配成Access口。很多时候配置看着没问题,一display就发现端口类型根本不是自己以为的那样——百分之八十的“VLAN不通”其实是这种低级的配置错位。
这里有个细节:port trunk allow-pass vlan命令写的是“允许哪些VLAN通过”,不代表“只允许这些VLAN通过”。部分厂商默认还带有一个本征VLAN(通常是VLAN 1)。如果你不希望VLAN 1跨设备传,还要把默认VLAN的允许状态去掉,否则两台交换机之间会意外传递VLAN 1的管理流量。
3. 跨VLAN通信:单臂路由与三层交换
3.1 VLAN天然不相通,三层是唯一开口
VLAN之间从二层角度天然是隔绝的,但这个“隔绝”不是终局。实际业务里研发部要给服务器区备份数据,市场部要访问财务系统,跨VLAN通信不可避免。
怎么破局?核心逻辑很简单:二层不通,那就上三层。跨VLAN通信必须经过一个三层设备,也就是路由器或者三层交换机。这个三层设备以每个VLAN的网关身份出现,VLAN内终端把跨网段流量发给网关,网关查路由表,再决定从哪个接口转发出去。
打个比方,VLAN就像高档小区里的独立别墅,别墅之间没有门直接相通。你要从A栋去B栋,必须先走出家门,到小区大门(网关),再由物业安保人员判断你该去B栋哪户,然后放行。这个“走大门”的动作,就是三层转发。
很多人会误以为“只要两台PC配了同网段IP,放在不同VLAN里就能通信”。错。VLAN隔离的是广播域,而两台同网段PC通信的第一步是ARP广播,广播出不了VLAN,连对端MAC都学不到,二层帧根本发不出去。所以跨VLAN通信的第一步,是先打破“同网段直接通”的惯性认知。
3.2 单臂路由:子接口一拆多
跨VLAN通信最经典的教学方案是单臂路由,也叫router-on-a-stick。原理是:路由器只有一个物理接口连交换机,但在这个物理接口上创建多个逻辑子接口,每个子接口对应一个VLAN,并配置成该VLAN的网关。
关键点是物理接口和交换机之间必须走Trunk,交换机要允许多个VLAN上行到同一个物理口;而每个子接口必须配置“VLAN封装”,让路由器能从收到的帧里识别出它属于哪个VLAN,再调用对应子接口的IP地址来做网关。
典型配置如下:
# 进入连接交换机的物理接口 interface GigabitEthernet0/0/1 quit # 创建子接口,封装VLAN 10,并配置网关IP interface GigabitEthernet0/0/1.10 encapsulation dot1q vlan 10 ip address 192.168.10.254 255.255.255.0 quit # 创建子接口,封装VLAN 20,并配置网关IP interface GigabitEthernet0/0/1.20 encapsulation dot1q vlan 20 ip address 192.168.20.254 255.255.255.0 quit单臂路由配置不难,但有几个暗坑:
- 子接口不能离开物理接口独立工作,物理接口down,子接口全部down。
- 子接口和交换机的Trunk允许列表必须一一对应,漏了VLAN就漏网段。
- 本征VLAN那条链路要小心,如果交换机Trunk口的PVID是VLAN 1,但路由器子接口没有封装VLAN 1,那VLAN 1的流量上去后路由器可能不认。
单臂路由最大的问题是性能。所有跨VLAN流量都挤在一个物理接口上,路由器转发又依赖CPU,流量一大必然扛不住。教学环境、实验环境、小规模园区网凑合能用,生产环境基本不用它,只把它作为理解三层交换的前置铺垫。
3.3 三层交换机的VLANIF:生产环境的正解
生产环境跨VLAN通信的正解是三层交换机。三层交换机可以理解为一台“内置了路由引擎的交换机”,它既有二层的线速转发能力,又能处理三层路由。
核心概念是VLANIF接口,也叫SVI(Switch Virtual Interface)。它是个逻辑三层接口,绑定一个VLAN,并直接配置IP地址作为该VLAN的网关。配置思路比单臂路由简洁太多:
# VLAN和端口划分照旧 vlan batch 10 20 30 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quit # 创建VLANIF接口并配置IP interface Vlanif10 ip address 192.168.10.254 255.255.255.0 quit interface Vlanif20 ip address 192.168.20.254 255.255.255.0 quit只要交换机开启了IP路由功能(不同厂商默认行为不同,但大多需要显式开启路由功能),VLAN 10的PC把网关指向192.168.10.254,VLAN 20的PC把网关指向192.168.20.254,两边的流量就会在交换机内部完成三层转发,不再需要外接路由器。
性能上的差别才是关键。单臂路由的转发要经过CPU软件处理,三层交换机的路由转发多数由专用硬件芯片完成,特别是“一次路由,多次交换”这种典型场景,同一条数据流的后续报文直接走硬件交换通道,转发表项命中即转发,延迟和吞吐都远好于路由器。
3.4 一次跨VLAN Ping的完整旅程
为了验证单臂路由和三层交换的工作原理,我最喜欢做的一个实验是:两台PC分别在VLAN 10和VLAN 20,从PC-A去Ping PC-B,然后抓包看数据走的轨迹。
场景假设:PC-A的IP是192.168.10.10,网关192.168.10.254;PC-B的IP是192.168.20.10,网关192.168.20.254;三层交换机上VLANIF 10和VLANIF 20已经配好。
第一步,PC-A判断目的IP跟自己不在同一网段,于是不直接发ARP找PC-B,而是发ARP请求找192.168.10.254的MAC。这个ARP广播在VLAN 10内部传播,交换机转发给网关接口。
第二步,网关(三层交换机)收到ARP请求后,从VLANIF 10接口回ARP应答,交出接口MAC。
第三步,PC-A把ICMP Ping报文封装成帧:目的MAC是网关接口MAC,目的IP是PC-B的IP,发给交换机。
第四步,交换机收到帧,发现目的MAC是自己,于是剥离二层头,上送三层查路由。路由表里192.168.20.0/24出接口是VLANIF 20,下一跳是直连。
第五步,交换机把报文重新加上二层头,源MAC改成VLANIF 20的接口MAC,目的MAC改成它从ARP表里查到的PC-B的MAC,从VLAN 20的端口转发出去。
PC-B收到Ping请求后回包,过程完全镜像。搞清楚这五个步骤,你对三层交换的理解就直接超越了背命令的层面。以后遇到“能Ping通网关但Ping不通跨VLAN对端”这种问题,也能立刻想到去查ARP表和路由表,而不是瞎换网线。
4. VLAN排查清单:80%的问题都出在这几个地方
4.1 从配置层面排查:端口、Trunk、PVID
VLAN的坑,绝大多数不是原理多深奥,而是配置细节没对齐。按我的习惯,遇到VLAN相关故障,先查配置,再查转发,最后查ARP和路由。
第一步,确认端口划到了哪个VLAN。先display current-configuration看端口配置,再display vlan看VLAN成员。尤其要留意端口类型,Access口还好说,Trunk口的PVID和允许列表必须逐项核对。
第二步,检查两端Trunk放行列表。两台交换机互联,A交换机允许VLAN 10、20通过,B交换机只允许VLAN 10通过,那VLAN 20的跨交换机通信必然失败。这个问题尤其常见于后续新增VLAN时,只在一端加号,对端忘了同步。
第三步,盯紧PVID。很多Trunk口默认PVID是VLAN 1。两台交换机Trunk口互联,一端的PVID是VLAN 10,另一端是VLAN 1,无标签帧进端口时会被识别成不同VLAN,查MAC完全查不到,表现为“交换机之间Ping不通但单独测每个VLAN都正常”。
4.2 从转发层面排查:ARP、MAC、路由表
如果配置看起来完全正常,那就把焦点放到转发路径上。一台PC处在VLAN 10,另一台PC处在VLAN 20,PC-A能Ping通网关,但Ping不通PC-B,这时我会依次敲:
display arp display mac-address display ip routing-table先看ARP表:PC-B的MAC有没有出现在网关上?如果网关ARP表里根本没有PC-B,说明PC-B还没跟网关完成ARP交互。再看看VLANIF 20接口是不是down、IP有没有配错。
再看MAC表:交换机有没有在VLAN 20对应端口上学到PC-B的MAC?没有就说明帧根本没进到交换机,问题出在PC-B的网线或IP配置;学到了但Ping不通,那就是三层转发的问题。
最后看路由表:VLANIF 10到VLANIF 20之间的直连路由必须在。路由表里如果没有192.168.20.0/24直连路由,那VLANIF 20接口肯定有问题,查接口状态和IP配置。
这套排查顺序我用了很多年,思路就是从“二层是否有帧”到“三层是否有路由”,一步一步收缩范围。网络排障最忌讳东打一竿西打一竿,顺序对了,问题通常十分钟内定位。
4.3 几个容易踩的“隐藏坑”
配置和转发都查过了,还是不通?那大概率是下面这些隐藏坑中的一个。
第一,交换机没有开启路由功能。有些三层交换机默认不转发三层流量,长得很像二层交换机。你VLANIF都配好了,去Ping还是不通,先查全局IP路由开关。
第二,网关地址和VLANIF地址冲突。PC的网关写成192.168.10.254,结果VLANIF 10的IP被某人改成192.168.10.253,或者另一台设备抢占了254这个IP,都会导致PC能发出包但收不到回包。
第三,单臂路由场景下子接口封装和Trunk允许列表不匹配。子接口封装dot1q vlan 20,交换机Trunk口允许列表却没有20,帧上了路由器就被丢弃,现象是Ping网关不通。
第四,本征VLAN捣乱。默认PVID是VLAN 1,如果你在Trunk上封了VLAN 1,但两端设备没有配套管理VLAN配置,可能产生环路或MAC漂移告警,严重时影响整个三层转发。
第五,安全端口或MAC漂移限制。有些交换机默认开了端口安全或MAC学习限制,新终端插上去学不到MAC,VLAN配置再对也白搭。这类问题在项目现场很常见,尤其是老设备默认配置和厂商安全基线不一致的时候。
5. 把学习日志落成能复用的经验
VLAN这套知识,你说它难,其实核心就三步:划分广播域、打标签、靠三层转发打通。你说它简单,但每一条细节背后都挂着故障现场的血泪。我自己的习惯是每次新搭建网络环境,都强制自己先画一张VLAN规划表,标明VLAN号、用途、网关网段、端口范围、Trunk放行清单,然后再动手配置。没有这张表,配置一时爽,排查火葬场。
实验设备方面,完全没有必要一开始就上真机。现在的虚拟仿真平台已经很成熟,用一台虚拟交换机加几台虚拟PC,就能完整模拟VLAN划分、单臂路由、三层交换的所有关键场景。我建议初学者把重点放在抓包观察上:先抓一个VLAN内通信的包,看看有没有802.1Q标签;再抓一个跨VLAN通信的包,看看TCP/IP报文的MAC和IP是怎么变化的。标签在哪加、在哪剥,亲眼看到一次,比背十遍理论都管用。
另外分享一个小技巧,VLAN学习阶段不要急着把所有功能叠加在一起。先把单台交换机、单VLAN调通,再扩大范围。先单台交换机多VLAN,再两台交换机Trunk互联,再加路由器单臂路由,最后换成三层交换机VLANIF。每增加一个环节,都停下来验证一次,把每层的现象和预期做对比。我做学习笔记的时候,每张配置后面都留了三行空位,专门记录“配置后display的输出结果”和“Ping测试的预期与实际”。这个习惯看似笨,但坚持下来以后,排查复杂网络问题时脑子里的那张“预期图”会越来越清晰。
VLAN只是二层网络的地基之一,后面还有链路聚合、STP、DHCP Snooping、动态VLAN等一大堆内容压在它上面。地基打不牢,上层全是花架子。你把这篇文章里的实验亲手做一遍,把每个坑都亲手踩一遍,再遇到线上的VLAN故障,大概率能比我更快定位到问题点。