局域网互联、骨干网络、VLAN 这三个词摆在一起,很多人第一反应是教材目录,觉得离日常运维很远。可只要你在机房里蹲过一次"两个部门共用一台交换机、广播把整栋楼打瘫"的现场,就会明白这三件事其实是同一个问题的三个切面:手里已经有一堆各自能跑的小网络,现在要把它们接成一张大网,同时不能把广播风暴、环路、地址漂移这些麻烦一并接进来。工程上的所有取舍,几乎都是在这对矛盾之间找平衡点。
这篇东西写给谁看?写过简单静态路由、能配通 VLAN 但对"为什么这么配"说不清楚的人;正在准备把几栋楼的接入交换机往核心上收的人;以及被"Trunk 两端都配了却不通"折磨过的人。我会把 LAN 互联的设备职责、二层转发的真实过程、骨干网的容量测算、802.1Q 标签的逐字节含义、VLAN 间路由的两种做法,以及几个真实踩过的坑,按一条从"能通"到"扛得住"再到"分得清"的线串起来。命令以通用 CLI 风格示意,各家设备的参数名有差异,逻辑是一致的。
1. 三张网叠在一栋楼里:LAN 互联、骨干与 VLAN 到底谁管谁
先把三个概念的位置摆清楚,后面所有配置才有落脚点。局域网互联解决的是"多个 LAN 之间怎么接"的问题,它是手段;骨干网络解决的是"这些被接起来的 LAN 之间的流量走哪条高速通道",它是骨架;VLAN解决的是"物理上接在同一台设备上,逻辑上要不要让它们看见彼此",它是隔离手段。三者不是并列关系,而是一层套一层。
一个常见的误解是把它们当成三种不同的"网络类型",于是设计时试图三选一。实际上一个中等规模园区的典型形态是:接入层几十台交换机通过 VLAN 把不同部门切开,这些交换机的上联口做 Trunk 汇聚到几台核心设备,核心之间用链路聚合和路由组成骨干。三层结构同时存在,缺一不可。搞混这个层级关系,就会出现"在接入层做路由"或者"在核心层做端口隔离"这类错位设计。
1.1 先把冲突域和广播域这两个边界钉死
理解互联设备分工的最快方式,是看它切开了哪个域。冲突域是共享同一段介质、同一时刻只能有一个发送者的范围,它的根源是早期的共享式总线;广播域是广播帧能到达的范围,也就是 ARP 请求、DHCP 发现报文能扩散到哪里。这两个边界决定了你该买什么设备,而不是反过来。
集线器(本质是多端口中继器)工作在物理层,它把所有端口接成一根逻辑总线,因此所有端口属于同一个冲突域、同一个广播域。用它扩端口,等于把冲突概率乘以端口数。网桥和二层交换机工作在数据链路层,每个端口是一个独立的冲突域,交换机能做缓存转发,冲突域被彻底切碎;但广播帧依然会被泛洪到所有端口,所以广播域没有变小。要切开广播域,只有两条路:路由器,或者交换机上的 VLAN。
这个区别在排障时非常实用。网络里出现大量 ARP 请求把链路塞满,说明广播域太大,加交换机没用,只能上 VLAN 或者划子网;出现大量冲突计数增长、CRC 错误,说明问题在物理层,查线、查光模块、查双工模式,跟 VLAN 一点关系都没有。我见过有人拿着"交换机端口 CRC 错包增长"的图去怀疑 VLAN 配置,方向从一开始就偏了。
提示:判断一台设备能不能隔离广播域,只需问一句——它的转发决策里有没有用到网络层地址。用到,就能隔离;只用到 MAC,就隔离不了。
1.2 中继器、网桥、交换机、路由器不是一条升级路线,是四种职责
教材常把这四者排成一列讲,容易让人以为后一个是前一个的替代品。真正的关系是职责叠加:中继器管信号再生,网桥管冲突域切分,交换机是多端口高性能网桥,路由器管广播域切分和路径选择。它们各自解决不同层面的问题,现代设备往往把这几种能力集成在同一台盒子里。
以一台常见的三层交换机为例,它同时具备二层交换(按 MAC 转发)、VLAN 隔离(切广播域)、三层路由(VLAN 间转发)三种能力。你在它上面配 SVI 做网关,用的就是路由能力;你把两个口划到不同 VLAN,用的就是网桥能力;你配链路聚合提升上联带宽,用的还是二层转发能力,只是把多条物理链路当成一条逻辑链路。所谓"三层交换机很快",本质上是因为它的路由转发由专用芯片完成,不需要把包送到通用 CPU 上处理。
选型时有个经验判断:同一个广播域内的流量占比超过七成,二层设备足够;跨广播域流量占比高,就该往三层靠。这个比例不是拍脑袋,它直接影响广播帧的扩散范围和故障域大小。一个两千台终端的大二层网络,一次 ARP 泛洪就能让核心 CPU 冲到百分之百,这种事故在圈内不算新闻。把广播域控制在每个 VLAN 两百到五百个终端,是我个人比较习惯的尺度。
2. 二层交换机的内部账本:MAC 表、泛洪与生成树
配通 VLAN 只是第一步,真正决定网络稳不稳的是二层转发这一层。交换机的核心是一张 MAC 地址表,也叫转发表,记录"某个 MAC 从哪个端口来、属于哪个 VLAN、还有多久老化"。这张表不是配出来的,是学出来的,理解它的学习规则,等于掌握了二层排障的大半。
默认老化时间通常是 300 秒,这个值有讲究。太短,表项频繁失效导致大量泛洪;太长,终端换端口后旧表项残留造成黑洞。终端在不同接入交换机之间漫游(比如无线控制器下挂的 AP、虚拟化环境里的虚拟机迁移),最容易撞上这个问题。有些场景下把老化时间调到 60 秒以内,能明显减少"迁移后短暂不通"的投诉。
2.1 一次 ping 背后,转发表是怎么被"学"出来的
假设 A 主机第一次 ping B 主机,中间隔着一台刚上电的交换机。过程是这样的:A 发出 ARP 请求,这是一个广播帧,源 MAC 是 A、目的 MAC 是全 F。交换机收到后做两件事——把"A 的 MAC 对应收到帧的端口"写进表里(这是源 MAC 学习),然后因为目的地址是广播,向同 VLAN 内除入端口外的所有端口泛洪。B 收到后回 ARP 应答,这是单播,交换机查表发现 B 的 MAC 未知,再次泛洪;同时学到 B 的位置。此后再通信,表里两个条目都在,直接按端口转发,不再泛洪。
这里有个容易被忽略的点:泛洪永远发生在同一个 VLAN 内。VLAN 划分之后,交换机的转发表实际上是按 VLAN 分开的,同一个 MAC 在不同 VLAN 里可以独立存在。这也解释了为什么"两个口划到不同 VLAN 就 ping 不通"——不是配置错了,是设计如此。
未知单播泛洪是二层网络里最隐蔽的带宽杀手。当网络里存在大量随机 MAC 或者扫描行为时,表项学不过来,每个包都泛洪,整网带宽被吃光。防护手段是端口安全(限制每个端口可学习的 MAC 数量)和风暴抑制(对广播、组播、未知单播分别限速)。这两项在接入层交换机上基本属于必配项,很多默认配置里是关闭的。
2.2 环路不一定会立刻炸,但一定会炸
为了冗余,人们会本能地在两台交换机之间多连一根线。可二层没有 TTL 字段,以太网帧不会因为绕圈次数过多而被丢弃,一旦成环,广播帧就会无限复制,几秒钟内把链路和 CPU 全部打满。这就是广播风暴,也是二层网络必须跑生成树协议的根本原因。
生成树的思路很朴素:选一个根桥,然后每台交换机算出到根桥的最短路径,把多余的端口逻辑上阻塞掉。根桥选举比的是桥 ID,桥 ID 等于优先级加 MAC,优先级小者胜,默认 32768(可配范围是 4096 的整数倍)。所以默认配置下,MAC 最小的那台交换机会成为根桥,这往往是一台最老、性能最差、位置最偏的设备。我接手过的网络里,十有八九根桥是随机产生的,从没有人手动指定过。
| 对比项 | 传统 STP(802.1D) | 快速 STP(802.1w) | 多实例 STP |
|---|---|---|---|
| 端口状态数 | 5 种 | 3 种(丢弃、学习、转发) | 同 RSTP |
| 收敛时间 | 30 到 50 秒 | 秒级,通常 1 秒内 | 秒级 |
| 负载分担 | 不支持 | 不支持 | 支持,不同 VLAN 走不同路径 |
| 适用场景 | 老设备兼容 | 主流选择 | 多 VLAN 且需要链路利用 |
实操上,我的习惯是三件事一起做:手动把核心交换机优先级调到最低(例如 4096),确保根桥位置可控;开启边缘端口(PortFast),让接终端的口跳过监听学习阶段直接转发,避免终端开机后要等几十秒才能上网;在边缘端口上开启 BPDU 防护,一旦收到 BPDU 就自动关端口,防止有人把家用小交换机接到墙插上引起环路。第三点尤其重要,我处理过的环路事故里,超过一半是"某工位私接了一台小交换机,两个口都插了网线"。
2.3 MAC 地址漂移:环路之外还有三类常见元凶
交换机日志里出现"MAC 地址从端口 A 跳到端口 B"的告警,第一反应都是查环路,但环路只占其中一部分。剩下三类同样高频:一是主机双网卡同时启用且都接到同一 VLAN,系统会不定期从两张网卡发包,交换机看到同一个 MAC 从两个口来;二是虚拟化环境的虚拟机迁移,迁移瞬间新旧宿主机会短暂都持有同一个 MAC;三是MAC 地址冲突,有人手动改了地址或者克隆了别人的配置。
排查顺序我一般这样走:先看两个端口是不是都属于同一个 VLAN、是不是接的同一台服务器的两块网卡;再看两台接入交换机之间有没有冗余链路且生成树状态异常;最后才怀疑环路。用心的做法是把交换机的 MAC 表连同端口、VLAN、学习时间一起导出来做比对,如果同一个 MAC 在两个端口间来回跳、时间间隔不规律,基本可以确认是双网卡或迁移导致的,而不是环路(环路造成的跳动节奏非常快且稳定,通常是秒级甚至亚秒级)。
3. 骨干网络:把"能通"变成"扛得住"
前面说的都是"怎么能通",骨干网要回答的是"通得够不够快、断了能不能顶住"。骨干网络的定义很朴素:连接多个局域网、承载它们之间流量的那部分网络。它的形态有三种经典结构,选哪种主要看规模和预算,不是越新越好。
总线型骨干就是一根主干链路(或者一个共享介质),所有交换机挂上去。成本最低,布线简单,缺点是主干一断全网分裂,而且主干带宽被所有接入共享。星型骨干是一台中心交换机连接所有汇聚交换机,中心设备故障就是单点,靠双机冗余解决。交换机式骨干(也叫折叠骨干)则是核心层用多台高性能交换机通过冗余链路互联,接入分散挂接,是当前主流。教材里还有一类"VLAN 骨干",本质是把骨干链路做成 Trunk,用 VLAN 复用同一条物理链路承载多个逻辑网络,属于软件层面的复用法。
3.1 三种骨干结构的成本曲线
总线型的诱惑在于便宜,一栋老楼不方便重新布线时,一根主干串起各个楼层是很现实的选择。但它的隐含成本在故障时才会暴露:主干任何一处断开,后面的所有楼层全部失联,而且定位困难——你需要逐个节点断电才能判断断点在哪。星型把单点故障集中到中心设备上,反而好办,因为单点是可以冗余的,而分散的断点是无法冗余的。这就是为什么现实中几乎看不到新的总线型骨干。
交换机式骨干的成本主要在核心设备上,两台高性能三层交换机做虚拟化堆叠或者跑路由冗余,接入交换机双上联分别接两台核心,这样任何一台核心故障、任何一条上联断开,业务都能自动切换。代价是接入交换机的两个上联口必须跑生成树或者链路聚合,前者有一个口会被阻塞(浪费一半带宽,但提供了冗余),后者两个口同时转发(带宽利用率和冗余兼得,但要求两端设备支持同一套聚合协议)。
这里有个选型判断我要强调:如果接入层用双上联跑生成树,请务必把两台核心的生成树优先级配成一样、且低于所有接入交换机,这样两台核心会分别成为不同实例的根桥,流量能形成相对合理的分担。如果优先级没配,所有流量都会走同一台核心,另一台常年闲着,冗余还在但利用率极低。
3.2 收敛比与包转发率:两个必须算的数字
骨干带宽不能凭感觉配。先算收敛比:所有接入端口带宽之和除以所有上联端口带宽之和。举个例子,一台 48 口千兆接入交换机,如果每口都跑满,接入侧是 48G;它的上联是两个万兆口做聚合,共 20G;收敛比就是 2.4 比 1。这个值的含义是"理论上允许所有终端同时以约 42% 的线速往外发"。办公场景通常可以接受 4 比 1 到 8 比 1,因为终端几乎不会同时跑满;但如果是渲染农场、监控存储、备份服务器这类场景,收敛比必须做到 1 比 1 甚至超配。
再看包转发率。交换机的能力不只看带宽,还要看每秒能转发多少个包(PPS)。千兆线速下的理论包转发率按最小帧 64 字节计算,加上 8 字节前导码和 12 字节帧间隙,共 84 字节,结果是每秒约 1.488 百万包;万兆是它的十倍,约 14.88 百万包。有些低端交换机标称有若干万兆口,但整机包转发率远低于所有端口线速之和,小包场景下会明显掉速。采购时把"整机包转发率"和"端口带宽总和除以最小帧"对一下,能筛掉一批参数虚标的设备。
| 参数 | 计算方式 | 常见踩坑 |
|---|---|---|
| 收敛比 | 接入带宽总和 ÷ 上联带宽总和 | 只算端口数不算带宽,忽略双工 |
| 理论包转发率 | 带宽(bps) ÷ (84 × 8) | 只看标称带宽,不看整机 PPS |
| 背板带宽 | 通常要求 ≥ 端口带宽总和 × 2(全双工) | 标称值含内部环路,实际可用打对折 |
| 广播域规模 | 单 VLAN 终端数 | 超过五百台后 ARP 泛洪明显 |
3.3 链路聚合与堆叠:冗余不能靠"多插一根线"
两台设备之间插两根线,如果不开聚合,生成树会阻塞其中一根;开了聚合,两根线被当成一条逻辑链路,带宽叠加且互为备份。聚合的配置要点有三条几乎每次都要检查:两端成员口的速率、双工、VLAN 配置必须完全一致;成员口不能是动态学习的口(不能接终端,只能接设备);聚合模式两端必须匹配,一端用标准协商协议另一端用静态绑定是通不了的。
标准协商协议(LACP)用报文确认对端状态,比静态绑定更可靠,代价是收敛稍慢。静态绑定配置简单,但一端配置错误时不会报错,只会出现流量单边不通的诡异现象。我个人倾向于生产环境一律用 LACP,宁可多等两秒,也不要那种"看起来起来了实际上只通一半"的状态。
至于堆叠,是把几台物理交换机通过专用堆叠线缆或业务口连成一台逻辑设备,统一管理、统一配置、统一生成树。它的价值在于把"两台核心之间的冗余链路"变成"一台逻辑设备内部的面板转发",不再需要生成树阻塞端口,带宽利用率能到百分之百。缺点是故障域合并了——堆叠控制面出问题,可能整个逻辑设备一起挂。所以堆叠更适合放在同一机柜、同一供电环境内的设备之间,跨楼栋还是老老实实用链路聚合加路由。
4. VLAN:在同一台交换机里造出互不相见的几个世界
到了这一层,问题从"怎么接"变成"怎么隔"。VLAN 的本质是给以太网帧贴一个标签,让交换机在转发时不仅看目的 MAC,还要看这个帧属于哪个逻辑网络。同一个 VLAN 内的帧正常转发,跨 VLAN 的帧在二层直接丢弃,必须经过三层设备。这一条规则是 VLAN 提供隔离性的全部来源。
为什么需要它?三个理由都很实际。广播域收敛是第一位,把两百台终端切成四个 VLAN,每次 ARP 泛洪的影响面就只有五十台。安全隔离是第二位,财务和访客接在同一台交换机上,不划 VLAN 就是同一个广播域,用 ARP 欺骗之类的简单手段就能互相窥探。管理灵活是第三位,人搬到另一个工位不用重新布线,改一下端口所属 VLAN 就行。三个理由里,第一和第三是日常收益,第二是出事时才体现价值。
4.1 802.1Q 那 4 个字节干了什么
标准标签插在以太网帧的源 MAC 之后、类型字段之前,共 4 个字节。前两字节是标签协议标识,固定值 0x8100,交换机看到它就明白"这帧带着 VLAN 信息";后两字节是标签控制信息,其中 3 位是优先级(PCP)、1 位是丢弃资格指示(DEI)、12 位是 VLAN ID。12 位决定了 VLAN 的范围是 0 到 4095,可用的是 1 到 4094,0 和 4095 保留。
12 位这个上限在实际运维中会撞墙。一个大型园区动辄上千个 VLAN,如果再加上每个租户、每个业务系统单独划,很快就逼近四千。解决思路是VLAN 聚合(把多个 VLAN 映射到外层标签里传)或者干脆用 VXLAN 这类 overlay 方案,但那已经超出二层范畴了。中小规模网络基本不用担心这个数。
加了 4 字节标签,帧长从 1518 变成 1522,这带来一个隐蔽的坑:某些老设备或者特殊链路对最大帧长卡得死,超长帧直接丢弃,表现为"大包不通、小包能通"。典型症状是 ping 大包失败但 SSH 能连上。遇到这种情况先查链路上有没有设备不支持 1522 字节帧,别急着怀疑 MTU 配置。
4.2 Access 口和 Trunk 口的处理逻辑,画成一张判定表
端口角色决定了帧进出时标签怎么处理。Access 口接终端,终端不认识标签,所以进方向收到无标签帧就打上本口 PVID,出方向把标签剥掉再发。Trunk 口接交换机,需要同时传多个 VLAN 的帧,所以除原生 VLAN 外一律带标签转发。
| 方向 | Access 口 | Trunk 口 |
|---|---|---|
| 收到无标签帧 | 打上 PVID,进入该 VLAN | 打上原生 VLAN 的 PVID(若允许列表包含) |
| 收到带标签帧 | 一般丢弃 | 检查 VID 是否在允许列表,在则转发,不在则丢弃 |
| 发出帧(VID = PVID) | 剥标签后发出 | 原生 VLAN 剥标签,其他 VLAN 带标签 |
| 发出帧(VID ≠ PVID) | 不会发生 | 带标签发出 |
这张表能解释一大半"配了不通"的问题。比如两端 Trunk 的允许列表不一致,一端允许 VLAN 10 和 20,另一端只允许 10,那么 VLAN 20 的帧在第二个口就被丢了,现象是"VLAN 10 通、VLAN 20 不通"。再比如一端 Access 一端 Trunk,Access 口发出的帧没有标签,Trunk 口收到后按原生 VLAN 处理,如果原生 VLAN 恰好不是预期的那个,流量就跑到别的 VLAN 里去了,这种错配非常隐蔽。
注意:Trunk 两端允许的 VLAN 列表必须严格对齐。排障时先确认"这条路径上每一个 Trunk 口都允许目标 VLAN 通过",再去看三层配置,顺序反了会浪费大量时间。
4.3 划分方式的选择:端口、MAC、子网各自的适用面
VLAN 的划分方式不止一种,选错了会给后期维护带来持续麻烦。基于端口是最常用的,配置直观、性能最好,缺点是终端换端口就得改配置。基于 MAC 地址能做到"人走到哪 VLAN 跟到哪",但维护一张 MAC 到 VLAN 的映射表在几百台终端的规模下非常痛苦,而且换网卡就失效。基于子网或协议需要交换机看三层信息,配置复杂且对性能有影响,实际用得很少。
我的建议很直接:接入层一律用基于端口划分,配合 DHCP 和准入控制解决终端移动问题。真有漫游需求(比如会议室、开放工位),用基于 MAC 的认证配合动态 VLAN 下发,比静态 MAC 表可靠得多。至于基于子网的划分,除非是迁移过渡期,否则不建议引入,它会让"这个包属于哪个 VLAN"这个问题变得难以推理,排障成本陡增。
另外一个实践细节是管理 VLAN 单独划出来。交换机的管理地址放在一个独立的 VLAN 里,与业务 VLAN 隔离,好处是即便某个业务 VLAN 出广播风暴,管理面还能连上去救火。同时不要用 VLAN 1 承载业务,VLAN 1 是默认 VLAN,多数设备的控制协议报文都在里面跑,混着业务跑既不安全也不好排查。这一点在教材里往往一句话带过,但在真实运维里能救命。
5. VLAN 间互访:单臂路由与三层 SVI 的真实取舍
VLAN 划完,下一个问题必然出现:不同 VLAN 之间要不要通?要通,就得有设备在三层做转发。两种做法,一种是把路由器的一个物理口接到交换机的 Trunk 上,在路由器上划子接口,称为单臂路由;另一种是直接用三层交换机的 VLAN 接口(SVI)做网关。两者都能实现,但适用规模差别很大。
先说结论,再说理由:超过五个 VLAN 或者跨 VLAN 流量大的场景,一律用三层交换机。单臂路由的定位是"临时过渡"和"小规模",它最大的问题是所有跨 VLAN 流量都要挤过路由器和交换机之间那一条物理链路,形成单点瓶颈。
5.1 单臂路由的瓶颈在哪里
单臂路由的原理很巧妙:交换机上把接路由器的那个口配成 Trunk,允许所有需要互通的 VLAN 通过;路由器上把这个物理口划成多个子接口,每个子接口对应一个 VLAN,封装对应的标签,配上网关地址。这样路由器用一个物理口就"站"在了所有 VLAN 里,收到的带标签帧按标签分给对应子接口处理,处理完再打上目标 VLAN 的标签发回去。
瓶颈在物理口的带宽。假设上行是千兆,那么无论多少个 VLAN,跨 VLAN 的总流量上限就是千兆,而且是双向共享。更要命的是,路由器做三层转发通常依赖软件路径(低端设备),包转发率远低于交换机芯片,几十台终端同时跨 VLAN 访问服务器就能把 CPU 拉高,延迟抖动明显。
配置上还有几个容易踩的点:子接口的封装必须指定 VLAN ID,漏了就不通;物理口本身不能配 IP,必须保持无地址状态;交换机侧的口必须配成 Trunk 且允许所有目标 VLAN 通过。我见过最典型的一次故障是交换机侧配成了 Access 口,路由器子接口收到了不带标签的帧,全部落到了原生 VLAN 对应的子接口上,表现是"所有 VLAN 都能通到同一个网段",看起来通了但完全是错的。
5.2 三层交换机的 SVI 与"路由口"两种玩法
三层交换机提供两种做网关的方式。**SVI(VLAN 接口)**是给每个 VLAN 建一个逻辑接口并配 IP,这个 IP 就是该 VLAN 内终端的网关;交换机内部直接完成 VLAN 间转发,不需要外部链路。路由口是把某个物理口用命令切换成三层模式,直接配 IP,通常用于设备之间的互联(比如核心和出口路由器之间),不参与 VLAN。
SVI 的配置要点:先创建 VLAN,再进入 VLAN 接口配地址,顺序反了在某些设备上会失败;必须开启三层路由功能(有些设备默认是关闭的,只做二层);SVI 的状态取决于该 VLAN 内是否有处于转发状态的端口,如果一个 VLAN 里没有任何活跃端口,SVI 会处于 down 状态,网关地址不可达。最后这条是排查时的常见困惑——"网关配了、地址也通,但就是 ping 不通网关",八成是这个 VLAN 里没有活着的端口,或者所有端口都被生成树阻塞了。
性能上,三层交换机的 VLAN 间转发由 ASIC 完成,能做到线速,这是它相对单臂路由的核心优势。代价是广播域虽然被切开了,但故障域并没有完全隔离——一台三层交换机挂了,挂在它下面的所有 VLAN 一起失联。所以核心层的三层交换机必须做冗余,方式是双机加路由协议(或者虚拟路由冗余协议),让每个 VLAN 的网关地址浮动在两台设备之间。
5.3 一张表把两种方案摊开对比
| 维度 | 单臂路由 | 三层交换机 SVI |
|---|---|---|
| 转发性能 | 受物理口带宽和 CPU 限制 | 芯片转发,接近线速 |
| 适用规模 | 五个 VLAN 以内、流量小 | 任意规模 |
| 单点风险 | 路由器故障即全网跨 VLAN 中断 | 可双机冗余 |
| 配置复杂度 | 子接口逐个配,VLAN 多时繁琐 | 每个 VLAN 一个接口,清晰 |
| 典型用途 | 家庭实验室、临时过渡、教学演示 | 生产环境标准做法 |
| 广播域隔离 | 完全隔离 | 逻辑隔离,物理仍共享设备 |
我个人的经验是,单臂路由值得学、值得搭一次,因为它能让人彻底理解"标签在链路上怎么流动"这件事,这个理解对排查 Trunk 问题极有帮助。但真到了要给一个部门上线的时候,别犹豫,直接上 SVI。
6. 排障实录:三个典型"明明配了却不通"的现场
配置正确但不通,是网络这行最常见的状态。下面三个场景我都在真实环境里遇到过多次,排查路径记下来,比背命令有用。
6.1 Trunk 两端允许列表不对齐
现象:新加了一个 VLAN 30,两端的交换机都建了 VLAN、都配了 SVI、终端地址也没错,就是不通。查接口状态全是 up,查 MAC 表看不到对面的地址。
排查链路是这样的:先在源终端上确认网关 MAC 能否解析(能,说明本端 SVI 正常);再在中间每一跳的交换机上查该 VLAN 是否存在(存在);然后逐个检查路径上所有 Trunk 口的允许 VLAN 列表——问题往往就在这里,某一台中间设备的 Trunk 只允许了 10 和 20,新加的 30 没放行。帧到了这个口直接被丢弃,两端都看不到任何异常。
这类问题的根因是配置的分散性:一个 VLAN 要在路径上每一台设备、每一个 Trunk 口都放行,漏一个就断。规避办法是尽量用"允许全部 VLAN"配合手动修剪,或者用集中的配置管理工具做一致性校验。人工逐台敲命令的时代,这种遗漏几乎无法避免。
6.2 Native VLAN 不匹配引发的诡异现象
现象:两个 Trunk 口对接,大部分 VLAN 通信正常,但有一个 VLAN 偶尔丢包、偶尔串到别的网段。抓包能看到带标签和不带标签的帧混在一起。
原因是 Trunk 的原生 VLAN(不打标签传输的那个 VLAN)两端配置不一致。一端认为原生是 VLAN 1,另一端认为是 VLAN 99。当 VLAN 99 的帧从第一端发出时是带标签的,第二端收到带标签的帧正常处理;但当第二端发出 VLAN 99 的帧时,因为它认为 99 是原生,会剥掉标签发出,第一端收到无标签帧就按自己的原生 VLAN 1 处理,帧跑到了错误的广播域里。
这个问题的危害不只是不通,而是串网——本来应该隔离的两个网络产生了连通性。修复很简单,两端原生 VLAN 配成一致,并且不要用业务 VLAN 当原生 VLAN,专门留一个不承载业务的 VLAN 做原生,把它从所有 Trunk 的允许列表里排除掉。这是行业里标准的安全加固动作,很多默认配置并不这么做。
6.3 管理 VLAN 被自己关在门外
这个坑我踩过一次,记忆很深。为了安全,把交换机的管理地址从 VLAN 1 迁到 VLAN 99,配完之后发现远程连不上了,只能去机房接console线。
原因有两层。第一层,管理口所在的端口本身还在 VLAN 1 里,没划到 99;第二层,上联 Trunk 口没有允许 VLAN 99 通过。两个错误叠加,管理地址彻底不可达。更麻烦的是,某些设备在修改管理 VLAN 时会立即生效,而修改的瞬间你正通过这个地址连着,连接直接断掉,连回滚的机会都没有。
从那以后我形成一个固定习惯:改管理 VLAN 之前,先确认有一条带外或者本地可达的路径(串口、独立管理口、同机柜的另一台设备),改完立刻验证,验证通过再做下一步。同时分两步改:先把上联 Trunk 放行新 VLAN,确认路径通了;再改管理口的 VLAN 归属;最后才改管理地址。一步到位看着快,出问题时却没有任何退路。
最后分享一个日常巡检的小清单,五条命令能覆盖八成的隐患:查生成树的根桥是不是预期的设备、查每个 Trunk 两端的允许列表是否一致、查各 VLAN 的终端数量有没有超限、查聚合组的成员口状态是否都正常、查端口错误计数有没有异常增长。这五项每周过一遍,比出事之后通宵定位划算太多。