VLAN实验全解析:从帧格式到Trunk配置,彻底搞懂交换机VLAN通信
做网络实验最怕的就是“看着配置没问题结果终端就是不通”。VLAN实验是我自己从头到尾完整做过好几次的实验从最初只会照抄命令到后来能自己推断“这个Tag到底该不该打上去”整个过程踩了不少坑也把VLAN相关的几个关键机制彻底搞明白了。这篇内容就基于我个人的实验记录来写把组网设计、帧格式原理、交换机配置、故障排查一条线讲透尤其适合刚接触交换机配置、或者正准备考网络工程师认证的读者也适合那些工作中要维护办公网络、想搞清楚VLAN到底是怎么回事的运维朋友。写这份实验报告前我给自己定的目标很明确不是能通就行而是要做到每一步都清楚——端口为什么要这么配、数据帧经过Trunk时发生了什么、为什么同一台交换机上的两个VLAN之间无法直接通信。带着这些疑问去做实验收获会比背十条命令大得多。1. 实验目标与组网设计1.1 为什么要把一台交换机“拆”成多台VLAN的核心作用是把一台物理交换机在逻辑上划分成多台互不相通的独立交换机从而隔离广播域。没有VLAN时一台24口交换机上接入的所有PC都处于同一个广播域任何一台机器发出的广播帧会被全网所有端口转发一遍设备越多广播风暴的风险越大。同时财务部、人事部、办公区的流量混在一起在安全上也存在隐患。在这个实验里我最想验证的核心点是三个第一同一个VLAN内的终端能够二层互通第二不同VLAN之间的终端默认不能互通第三通过三层路由配置让不同VLAN之间恢复通信。这三点正好对应了VLAN在实际网络中最常见的三个应用场景把它们在实验环境里完整走一遍比看十篇文档更有用。1.2 实验拓扑规划与设备选型实验环境我用的是华为eNSP模拟器原因很简单eNSP上手快、命令行和真机一致而且我能用模拟器里的PC终端直接做ping测试和抓包。如果你手头有真机华为S5700、S3700这类交换机操作完全一样。拓扑规划如下总共三台交换机呈简单的级联结构设备角色端口规划SW1接入交换机GE0/0/1接PC-AGE0/0/2接PC-BGE0/0/24上联SW2SW2核心三层交换机GE0/0/1下联SW1GE0/0/2下联SW3Vlanif接口做网关SW3接入交换机GE0/0/1接PC-CGE0/0/2接PC-DPC-A / PC-BVLAN 10终端192.168.10.0/24网段PC-C / PC-DVLAN 20终端192.168.20.0/24网段PC的IP地址我计划这样分配PC-A是192.168.10.10/24PC-B是192.168.10.20/24PC-C是192.168.20.10/24PC-D是192.168.20.20/24。网关地址分别对应VLANIF 10和VLANIF 20的接口地址。这个规划照搬了大多数企业办公网络的典型模式接入交换机负责端口划分核心交换机做VLAN间路由。这样一个拓扑的好处是能同时验证两层问题交换机之间的Trunk链路怎么配置、Tag怎么流转以及三层交换机上VLANIF接口怎么把流量从192.168.10.0/24路由到192.168.20.0/24。1.3 实验验证目标与判定标准在动手配置之前我先把实验的“验收标准”写清楚否则做到一半很容易迷失方向。我这边的验证点主要包括PC-A能ping通PC-BPC-C能ping通PC-D属于同VLAN二层互通的验证。PC-A不能ping通PC-C这是不同VLAN隔离性的验证。配置三层SVI后PC-A能ping通PC-C这是VLAN间路由生效的验证。在交换机上抓包能看到数据帧进出Access口时没有Tag进出Trunk口时带有802.1Q Tag。有了这些明确的验证点配置完成后就能一步步核对不会出现“好像通了但不知道哪里通”的情况。2. 802.1Q帧格式与端口转发机制2.1 看懂VLAN帧格式到底改了什么很多入门者看不懂VLAN是因为不知道VLAN在数据帧里到底是怎么体现的。标准的以太网帧包含目的MAC6字节、源MAC6字节、类型/长度2字节、数据46-1500字节和FCS校验。而802.1Q标准在源MAC之后、类型字段之前插入了4字节的VLAN Tag。这4字节Tag的结构是TPIDTag Protocol Identifier2字节固定为0x8100表示这是一个携带802.1Q Tag的帧接下来是TCITag Control Information2字节包含3比特优先级Priority、1比特CFI和12比特VID。VID的范围是0-4095其中0和4095保留实际可用的VLAN ID是1-4094。我习惯用一个类比来理解这个Tag普通以太网帧就像一张没有写房间号的快递单交换机只能凭收件人姓名MAC地址来找人打了VLAN Tag以后相当于快递单上直接写明了“送到3楼305房间”VLAN ID交换机一看就知道该送往哪个逻辑区域不用再靠猜。这个细节在处理“为什么帧出了Access口就没了Tag”这类问题时特别关键因为Tag只是在交换机内部和Trunk链路上用于转发的标记。2.2 Access端口的行为特点Access口最常见的用途是连接终端设备比如PC、打印机、服务器网卡。这类端口只属于一个VLAN转发规则可以用几句话概括入方向收到不带Tag的帧打上该端口PVID对应的VLAN Tag然后在交换机的MAC地址表里按VLAN找端口出方向把Tag去掉再发给终端。关键点是“入方向打Tag、出方向去Tag”。终端设备的网卡通常不识别802.1Q Tag服务器网卡做VLAN绑定除外所以Access口必须在发出帧之前把Tag剥掉。这个动作在不同厂商设备上可能叫法不同华为叫“去标签”思科叫“untag”但含义一模一样。如果Access口收到一个已经带Tag的帧且Tag的VID与端口PVID相同部分设备会照常转发如果VID不同该帧会被丢弃。2.3 Trunk端口的转发规则与PVID陷阱Trunk口的作用是在两台交换机之间传输多个VLAN的流量。与Access口“只属于一个VLAN”不同Trunk口默认放行所有VLAN的流量。这里最容易混淆的是“放行”与“PVID”这两个概念。Trunk口放行VLAN意味着允许哪个VID的数据帧从该口通过而PVIDPort VLAN ID是端口缺省VLAN主要处理“从该端口收到的无Tag帧该归属哪个VLAN”。一个链路是否带Tag取决于“帧的VID是否等于端口PVID”。在华为设备上Trunk口的PVID默认是VLAN 1可以通过port trunk pvid vlan命令修改。有一个我在实验中反复踩到的坑假设两台交换机Trunk口互连A交换机的这个Trunk口PVID是10B交换机这个Trunk口PVID是20那么A发送VID10的帧到B时A口认为10PVID所以不打Tag直接发B口收到后看到这个帧没有Tag会默认把它当成PVID对应的VLAN也就是VLAN 20的帧。两边对“无Tag帧属于哪个VLAN”的理解不一致就会导致同VLAN内终端ping不通。我建议在配置时把互连Trunk两端的PVID保持默认一致并且明确把业务VLAN用allow-pass explicitly放行不要图省事依赖默认配置。2.4 三种端口类型对比为了更直观我把Access、Trunk、Hybrid三种端口整理成了一张表。Hybrid在华为设备上用得很多它能同时处理Tag和Untag帧适合需要灵活控制Tag是否剥除的场景比如连接路由器子接口或某些特殊终端端口类型入方向处理出方向处理典型应用场景Access无Tag帧打上PVID对应Tag剥离Tag后发送连接PC、打印机等终端Trunk无Tag帧打上PVID对应Tag带Tag帧直接查表转发与PVID相同VID的帧去Tag其余帧保留Tag发送交换机之间级联、连接路由器单臂Hybrid无Tag帧打上PVID对应Tag按配置对指定VLAN去Tag或保留Tag灵活组网、部分终端需要特殊Tag处理3. 交换机VLAN配置实操全流程3.1 创建VLAN并完成Access口划分下面是我的实际配置过程。进入系统视图后第一步创建VLAN 10和VLAN 20SW1system-view [SW1]vlan batch 10 20vlan batch可以一次性创建多个VLAN比vlan 10加vlan 20逐条输入要高效。接下来把连接PC的端口划入对应的VLAN[SW1]interface GigabitEthernet0/0/1 [SW1-GigabitEthernet0/0/1]port link-type access [SW1-GigabitEthernet0/0/1]port default vlan 10 [SW1-GigabitEthernet0/0/1]quit [SW1]interface GigabitEthernet0/0/2 [SW1-GigabitEthernet0/0/2]port link-type access [SW1-GigabitEthernet0/0/2]port default vlan 20写这条命令时需要注意一个容易忽略的细节port link-type access必须先于port default vlan执行。因为端口默认是Hybrid类型直接执行port default vlan时不同版本设备对Hybrid口的处理方式不一样有些会不生效有些会报错养成先改链路类型再指定VLAN的习惯最稳妥。SW3上按同样的方式把PC-C划入VLAN 10、PC-D划入VLAN 20。访问PC-C和PC-D的端口划分我在SW3上做了交叉不是为了增加复杂度而是为了验证“同一VLAN跨越了多台交换机后依然能互通”这个点。3.2 Trunk链路配置与放行交换机之间的互联端口必须配置为Trunk否则无法同时承载多个VLAN的流量。以SW1与SW2之间的互联为例我的配置如下[SW1]interface GigabitEthernet0/0/24 [SW1-GigabitEthernet0/0/24]port link-type trunk [SW1-GigabitEthernet0/0/24]port trunk allow-pass vlan 10 20SW2侧做镜像配置在GE0/0/1和GE0/0/2上分别放行VLAN 10和VLAN 20。SW2与SW3之间同理。很多人在port trunk allow-pass vlan这里犯错最常见的是只写了port trunk allow-pass vlan 10漏掉了VLAN 20结果VLAN 20的流量到了Trunk口直接被丢弃。配置完成后建议用display port vlan看一眼端口放行状态[SW1]display port vlan Port Link Type PVID Trunk VLAN List GigabitEthernet0/0/1 access 10 - GigabitEthernet0/0/2 access 20 - GigabitEthernet0/0/24 trunk 1 10,20注意Trunk VLAN List这里如果显示的是“1-4094”代表默认放行所有VLAN如果显示“10,20”代表只放行这两个VLAN。实际运维中我倾向于把放行列表收敛到业务VLAN避免VLAN 1的管理流量和其他VLAN广播帧在Trunk链路上扩散。3.3 配置三层网关实现VLAN间路由不同VLAN之间的通信必须经过三层转发。我在SW2核心交换机上配置两个VLANIF接口做VLAN间路由[SW2]interface Vlanif 10 [SW2-Vlanif10]ip address 192.168.10.1 255.255.255.0 [SW2-Vlanif10]quit [SW2]interface Vlanif 20 [SW2-Vlanif20]ip address 192.168.20.1 255.255.255.0这里先给PC设置网关。PC-A和PC-B的网关指向192.168.10.1PC-C和PC-D的网关指向192.168.20.1。配置完成的关键前提是SW2上创建了VLAN 10和VLAN 20VLANIF接口才能生效。VLANIF接口本质上就是“虚拟的三层口”它依赖对应VLAN的存在而存在。还有一种经典方案是单臂路由路由器用一条物理链路连交换机Trunk口在物理接口上拆出多个子接口每个子接口绑定一个VLAN并配置IP地址。华为路由器上子接口终结VLAN的配置大概是这样的interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 arp broadcast enable使用单臂路由时必须开启arp broadcast enable因为子接口默认不对VLAN内的ARP广播帧做响应不开的话终端会一直ping不通网关。但从性能角度来看单臂路由所有跨VLAN流量都要经过路由器的CPU处理带宽上限受限于物理链路和CPU转发能力在流量大的场景明显不如三层交换机划算。所以实际组网中核心交换机配VLANIF是更主流的选择。3.4 连通性测试与抓包验证配置完成后按前面的验证标准挨个测试。先看同VLAN二层互通PC-Aping 192.168.10.20正常情况下能收到Reply。再看跨VLAN隔离PC-A ping 192.168.20.10在没配置路由时应超时配完VLANIF后能通。这些结果符合预期后我在SW2的GE0/0/1口做了抓包想亲眼看看Tag的变化。抓包结果显示PC-A发出的帧到达SW1的Access口后被打上VID10的Tag经过Trunk链路到SW2时帧里确实带上了802.1Q TagSW2根据目的MAC地址查表发现目的端口属于VLAN 20就完成三层路由后从VLAN 20转发出去。数据帧从SW3的Access口发给PC-C时Tag被剥离。整个过程和理论完全对得上。4. 实验中的坑与排查思路4.1 同VLAN跨交换机ping不通的排查顺序这是我实验中发生频率最高的问题。表现为两台PC接在同一台交换机上能ping通但只要跨交换机就完全不通。我总结出一套固定排查顺序只要你按这个顺序来大部分问题都能定位到。第一步查物理端口状态。display interface看端口是不是UP端口没起来一切白搭。第二步查Access口的VLAN划分是否一致。A口在VLAN 10B口如果被误划到VLAN 20那它们就不可能通。第三步查Trunk口的放行列表。用display port vlan查看两个互连端口放行的VLAN列表是否一致注意是“两端都要放行”很多新手只配了一端。第四步查PVID是否匹配。如果两边Trunk口PVID不一致无Tag帧会被错误识别。有一个真实案例非常典型SW1和SW2的Trunk口都放行了VLAN 10和20但有一台交换机的Trunk口PVID被改成了10结果VLAN 20的终端跨交换机通信时帧到达对端后因为没有Tag被对端按PVID当成VLAN 10的帧处理整个数据链路就乱了。这个坑很隐蔽不看PVID配置真的很难发现。4.2 能ping通网关但ping不通远端主机这种问题的排查思路和前面不一样。既然能ping通网关说明二层链路和三层转发路径基本通了问题往往出在“目的主机那一侧”。我排查时会按这个顺序来第一目的主机网关是否配置正确如果PC-C的网关被填成了192.168.10.1那它收到来自192.168.10.10的数据包后会尝试从错误网关转发自然不通。第二目的主机是否开启了系统防火墙Windows系统默认会拦截ICMP回显请求你在实验环境里如果懒得关防火墙直接用另一台PC测试也能判断个大概。第三核心交换机上是否有路由回程三层交换机如果配置了静态路由或动态路由要注意去往源网段的路由是否存在。第四VLANIF接口是否配置了ACL等过滤策略实验环境通常没配但真实网络里可能有人加过策略。这个排查顺序看起来简单但实际实验里因为PC防火墙导致ping不通的例子我见过特别多。有次甚至排查了半天最后发现是目的PC同时开了两个网卡默认路由走到另一个网卡上去了。4.3 Tag不匹配引发的“幽灵通信”Tag不匹配是VLAN实验里最隐蔽的问题。我遇到的场景是PC-AVLAN 10和PC-CVLAN 20明明在不同VLAN理论上不能二层互通但在其中一个方向就是能ping通。抓包分析后发现SW1的Trunk口PVID被设置成了10它发往对端的VLAN 10帧全部不带Tag而SW3上连接PC-C的口是Hybrid类型且允许VLAN 10以Untag方式通过于是PC-A发来的无Tag帧被SW3当作VLAN 10的帧转发给PC-C。两者就这样“意外打通”了。这个现象验证了一个重要结论VLAN的隔离性依赖于每个端口对Tag的一致处理。只要端口类型、PVID、放行列表、Tag保留策略任何一处不一致就可能出现“幽灵通信”。建议排查时把每台交换机的端口配置都打出来逐项比对不要只凭记忆判断。4.4 故障排查记录速查表我整理了一份我在实验中反复用到的故障排查速查表遇到问题时先对着表格找方向效率会比盲目试命令高很多现象可能原因排查命令 / 动作同VLAN ping不通Access口VLAN划错display port vlan跨交换机同VLAN不通Trunk口未放行对应VLANdisplay port vlan跨交换机同VLAN不通互连端口PVID不一致display interface trunk不同VLAN意外互通端口Hybrid/Trunk允许Tag以Untag发出display port vlan / display interface能Ping通网关Ping不通远端目的主机网关错误/防火墙拦截查看PC路由表与关闭防火墙测试配置后仍不通未保存配置重启丢失save命令保存配置5. 扩展思考VLAN技术在现代网络中的生态位5.1 对传统交换网络的再认识经历了完整的VLAN实验再回头看实际使用中的交换机设备和一体化网关我对很多以前“照抄”过的配置有了新的理解。比如锐捷睿易EG210G这类网关设备界面里有一个“端口VLAN”的快捷设置入口本质上就是帮你在内置交换机芯片上做Access和Trunk的自动映射端口勾选VLAN组成员后设备自动处理Tag和Untag。用熟了命令行再看图形界面就非常清楚它背后在做什么。同时华为、锐捷等不同厂商的交换机虽然命令行有差异但VLAN的核心机制是完全一致的。所有配置都围绕“端口类型、PVID、放行列表、Tag保留策略”这四个要素展开只要思路清晰换设备不过是换个语法而已。我在实验完成后还专门对比了华为和锐捷的命令格式发现底层逻辑完全一致这让我确信学好VLAN原理比背命令有价值得多。5.2 VLAN从物理网络走向云原生环境VLAN并不是“老技术”它在现代网络里的生命力比很多人想象的要强。在服务器虚拟化和容器化环境中VLAN被广泛用于多租户隔离和网络切片。比如Linux下把一个物理网卡拆成多个VLAN子接口执行ip link add link eth0 name eth0.10 type vlan id 10就能让一台服务器同时接入多个VLAN在Kubernetes环境里Multus CNI配合VLAN Tag能为不同的Pod分配不同的VLAN从而实现Pod级别的网络隔离。我后来在实际工作中接触过基于VLAN的IP Source GuardIPSG组网原理是在接入交换机上绑定“端口IPMACVLAN”四元组防止用户私自更改IP地址或接入非法设备。这个功能依赖的底层还是VLAN的隔离能力只不过在二层隔离之上又加了一层安全校验。理解了VLAN实验里的帧流转过程再去看这些进阶应用会顺畅很多。5.3 实验之后的延伸方向这个实验做完之后我建议有兴趣的读者做几个延伸实验把知识体系织得更完整。第一在Trunk链路上抓包看看Native VLANPVID对应的VLAN的帧确实不带Tag对比带Tag的帧在Wireshark里的显示差异。第二用Hybrid口做一次单臂路由实验熟练操作dot1q termination vid理解子接口与Tag的关系。第三开启生成树协议STP观察环路情况下交换机如何阻塞端口这个实验和VLAN结合起来能真正理解“广播域”的边界。第四如果条件允许使用真实交换机和真实PC做一次实验模拟器中很多报错和显示与真机有细微差别真机能帮你积累更多“手感”。写在最后整个VLAN实验下来我个人觉得最有价值的收获不是学会了多少条命令而是把“数据帧如何进入交换机—如何被Tag—如何经过Trunk—如何到达目的端口”这条完整链路彻底想通了。以前遇到网络不通习惯性重启设备或者直接换口现在会下意识先判断Tag在哪一跳出了问题。这种排查思路的转变才是做实验最大的收益。如果你也准备做这个实验我的建议是不要贪快每配完一台交换机就把display vlan、display port vlan、display interface trunk的输出截图或记录下来逐条比对。配置本身很简单难的是理解每一步背后的机制。实验过程中犯错越狼狈收获往往越大。愿这份实验报告能帮你少走一些弯路也希望你在打通的瞬间能真正感受到网络世界从黑盒变成清晰的图景。
