VLAN 把一张网切成了几个互不相通的广播域(6.13),而把切开的两半重新连起来,只能靠三层——因为 VLAN 之间是二层绝缘的,二层设备根本不做跨广播域的转发。所谓"VLAN 间的路由",做法只有一种:给每个 VLAN 配一个网关(单臂路由的子接口,或三层交换机的 SVI),让这台三层设备同时住在两个网段里;跨 VLAN 的包此后就和普通的 IP 路由没有区别——判断题 → 交给网关 → 查路由表 → 换头转发(6.1 → 6.3 → 6.4)。一句话:VLAN 制造隔离,路由打开通路,ACL 决定谁可以走。
VLAN 这条线(6.13 怎么切 → 6.14 赚什么 → 6.15 怎么在半路认亲 → 6.16 换来了什么本事)到这里补上最后一块:切完之后的连通问题。6.13 说清了"跨 VLAN 二层不转发",本节回答"那要怎么才能通";6.12 已经埋下伏笔(三层交换机 + SVI、一次路由多次交换),本节把它和经典的单臂路由摆在一起讲清两种接法。同时它是第六章主线的一次回环——跨 VLAN 的包,走的就是 6.1~6.6 那套"判定 → 交网关 → 查表 → 换头 → 最后一跳"的全流程,只不过这一跳短得连设备都没出。
一、为什么非得过三层:二层绝缘是 VLAN 的设计目的,不是缺陷
回顾 6.13 的关键实验:同一台交换机上,端口 1 在 VLAN 10、端口 2 在 VLAN 20,两口相邻、插着同网段的地址,也 ping 不通。
这不是配错了,这是 VLAN 的定义本身——VLAN 之间在二层是完全绝缘的:
| 层次 | VLAN 之间发生了什么 |
|---|---|
| 二层(交换机看 MAC) | 不转发。一个 VLAN 就是一个独立广播域,泛洪(5.11)不出界,ARP 广播也过不去 |
| 三层(路由器/三层交换机看 IP) | 可以转发。只要设备同时"住在"两个网段,它就能像普通路由器那样把包搬过去 |
所以结论很干脆:想让两个 VLAN 通,必须有一台设备同时拥有两个 VLAN 的"门牌"——这在 6.2 就已经是常识(路由器每个接口各属一个网段,LAN 口与 WAN 口分家),现在只是把这个规律搬到 VLAN 上:
每个 VLAN 需要一个自己的网关;而不同 VLAN 的网关,必须落在同一台三层设备上。
这台设备怎么"同时住在两个网段里"?两种做法:单臂路由和三层交换机 + SVI。
二、方案一:单臂路由——路由器一个口划成好几个(第一张配图上半)
单臂路由(Router on a Stick,也叫"单臂路由"/"子接口方式")是最经典的做法,思路非常直接:
拓扑:二层交换机 ──(Trunk 口)── 路由器的一个物理接口
关键动作:把路由器那一个物理接口(比如 G0/0)划分成多个子接口(subinterface,逻辑接口,如 G0/0.10、G0/0.20):
- 每个子接口封装 802.1Q,各对应一个 VLAN ID;
- 每个子接口配一个 IP,就是这个 VLAN 网段的网关地址;
- 交换机侧那个上行口配成 Trunk,放行需要互通的 VLAN(6.15)。
于是路由器这一根线上的一个物理口,长出了好几张门牌:
| 子接口 | 封装 | IP(网关) | 服务的 VLAN |
|---|---|---|---|
| G0/0.10 | dot1q 10 | 192.168.10.1 | VLAN 10(技术部) |
| G0/0.20 | dot1q 20 | 192.168.20.1 | VLAN 20(销售部) |
| G0/0.30 | dot1q 30 | 192.168.30.1 | VLAN 30(访客) |
一个包这样走(PC-A 在 VLAN 10,要访问 PC-B 在 VLAN 20):
- PC-A 判定"目的地址不在我网段"(6.1)→ 交给网关 192.168.10.1;
- 交换机把帧从 Trunk 口送出去,帧上带着 VLAN 10 的标签;
- 路由器在子接口 G0/0.10 收下、剥掉标签,查出目的地址属于 192.168.20.0/24 → 命中的是另一个子接口的直连路由(6.8,"在链路上");
- 从 G0/0.20 出去时,重新封装、打上 VLAN 20 的标签,交给交换机送到 PC-B。
它的问题也在这里:所有 VLAN 之间的流量只能走这一根物理线,而且每次都要进出路由器、走 CPU 软件转发(6.12)。VLAN 一多、流量一大,这个口就是瓶颈,路由器 CPU 也被拖累。
📌 记住它的样子:一台设备、一根线、多个门牌。它的优点同样突出——便宜、通用、任何带子接口的路由器都能做,小网络和家用场景到处都是它的影子(第八节会说到)。
三、方案二:三层交换机 + SVI——把两张表焊进一台设备(第一张配图下半)
6.12 已经讲过它的原理,这里补上"怎么用来连通 VLAN":
做法:在三层交换机上,为每个 VLAN 建一个 SVI(交换机虚拟接口,如 interface Vlanif 10),配上网关 IP:
| SVI | IP(网关) | 对应 VLAN |
|---|---|---|
| Vlanif 10 | 192.168.10.1 | VLAN 10 |
| Vlanif 20 | 192.168.20.1 | VLAN 20 |
SVI 就是"虚拟接口上的门牌"——6.2 说"路由器每个接口各属一个网段",给 SVI 配上 IP 的那一刻,一台三层交换机就同时住在所有 VLAN 里了;也正是在这一刻,每个 VLAN 各自自动长出一条直连路由(6.8 的机制原封不动)。
而转发的"物理过程"完全不同:
- 包不出设备。交换机收到带 VLAN 10 标签的帧,查路由表命中 VLAN 20 的直连,直接在设备内部换帧头、重新打上 VLAN 20 的标签,从对应端口送出去;
- 只有第一条流的第一个包要交给 CPU 软件查表、建立硬件转发表("一次路由"),之后的包全部由 ASIC 芯片线速转发("多次交换"),表项还会老化(6.12)。
| 对比项 | 单臂路由 | 三层交换机 + SVI |
|---|---|---|
| 设备 | 二层交换机 + 路由器 | 一台三层交换机 |
| 接口形态 | 物理口划子接口 | 每个 VLAN 一个 SVI |
| 转发 | 进出设备、CPU 软件转发 | 设备内部、硬件线速转发 |
| 带宽瓶颈 | 明显(挤一个物理口) | 基本没有(内部交换矩阵) |
| 适用 | 小网络、预算有限、教学、家用 | 企业汇聚/核心、VLAN 多、流量大 |
两者不是新旧替代,而是分工:三层交换机守内网(VLAN 多、跨网段快),路由器守出口(WAN 口、NAT、拨号,那是 3.14 的活,三层交换机接不了)。内网要上互联网,还是三层交换机的默认路由 0.0.0.0/0(6.11)把包扔给出口路由器。
四、本质:VLAN 间路由 = 最普通的一次 IP 路由(第二张配图)
把两种方案的"外衣"(子接口 / SVI)脱掉,里面装的是同一个东西——第六章一直在讲的那套路由动作:
| 步骤 | 跨 VLAN 场景里发生了什么 | 对应章节 |
|---|---|---|
| ① 判定 | PC-A 拿目的 IP AND 掩码,发现不同网段 → 交给默认网关 | 6.1 |
| ② 问网关 | ARP 广播问的是网关的 MAC,不是对方主机的 MAC | 6.5 |
| ③ 查表 | 三层设备收到帧后拆壳、判目的 IP、查路由表 → 命中另一个 VLAN 的直连路由 | 6.3、6.8 |
| ④ 换头 | 换上新帧头(目的 MAC=PC-B 真身,最后一跳 ARP 问出来),IP 头原封不动 | 6.4、6.6 |
所以最该记住的一句是:VLAN 间的路由,本质上就是普通的 IP 路由,只不过"下一跳"恰好是同一台设备的另一个虚拟接口、这一跳短得连设备门都没出。
这也解释了两个常见疑问:
- 为什么主机侧必须填对网关? 因为跨 VLAN 的包是"先交给网关"的,网关填错=包送不到那台"住在两个网段里的设备"——症状和 6.1 一模一样:本 VLAN 内通、出不去。
- 为什么跨 VLAN ping 第一跳就是网关地址? 因为那一段确实经过了它(
tracert的第一跳)。
📌 顺带收一个 6.13 留的尾巴:VLAN 与子网是两个层次的隔离——"VLAN 是二层广播域(隔墙)、子网是三层 IP 网段(门牌)"。让两者一一对应(一个 VLAN 一个网段),正是为了让上面这套路由动作干净利落;如果硬要让两个 VLAN 共用一个网段(非常规做法),就会撞上"同网段直接交付、根本不找网关"的机制,反而通不了。
五、通了之后:通道要开,但闸门要留
VLAN 被隔离出来是有目的的(6.14:隔离是默认值),所以"跨 VLAN 路由"打开的是通道,不是"随便走"。三个层次各管一段:
| 层次 | 手段 | 决定 |
|---|---|---|
| 隔离 | VLAN(二层) | 谁和谁默认不通 |
| 连通 | 路由 / SVI(三层) | 哪两个网段可以通 |
| 授权 | ACL / 防火墙策略 | 通是通了,谁能访问谁、能访问什么 |
所以工程上的标准做法是:路由只开需要开的方向,再配 ACL 精确放行。比如"技术部可访问服务器 VLAN,访客 VLAN 只能出公网、不能碰任何内网网段"——靠的就是路由 + ACL 的组合,而不是把所有 VLAN 一股脑全通。
六、顺手收编:家用路由器其实就是"单臂路由的民用版"
回头看看家里的那台无线路由器,它的内部结构恰好是本节内容:
- LAN 口 + 无线 SSID 各属不同的 VLAN/网段——所以"访客网络"能把客人的设备关在另一个网段里(6.16 讲过的 SSID↔VLAN 映射);
- 主网段与访客网段之间的互通/隔离,就是路由器(三层)在干"VLAN 间路由 + ACL"的活;
- 有的路由器还有 IPTV 专用口(6.13、6.14、6.16 都出现过),本质是把那个口划到另一个 VLAN,不给你原网段的地址。
区别只在于:家用路由器把子接口和 ACL 藏进了网页后台,你看不到 dot1q,但机制是同一套。
七、动手 Demo(Demo87)
目标:亲眼看到"每个 VLAN 一个网关 + 一条直连路由",并用一条命令证明"跨 VLAN 的包经过的是三层设备"。
A. 有设备账号(三层交换机 / 路由器)
display ip interface brief # 看 SVI(Vlanif 10/20…)或子接口是否 up、IP 是多少
display ip routing-table # 看每个 VLAN 是否各有一条直连路由,下一跳列="在链路上"
display vlan # 对账:SVI 号 ↔ VLAN 号 ↔ 成员口
# 单臂路由的做法(路由器侧):
interface GigabitEthernet0/0.10
dot1q termination vid 10 # 封装 802.1Q、绑定 VLAN 10
ip address 192.168.10.1 255.255.255.0
# 三层交换机侧换成:
interface Vlanif 10
ip address 192.168.10.1 255.255.255.0
看到什么算成功:display ip routing-table 里,每个 VLAN 各有一条直连路由(下一跳显示"在链路上");display ip interface brief 里每个 SVI/子接口都有地址、状态 up。
B. 用户侧对账(最直观的两条命令)
ipconfig /all # 看默认网关是不是本 VLAN 的 SVI/子接口地址
tracert 192.168.20.20 # 跨 VLAN 访问另一台主机:第一跳就是网关
arp -a # 表里只有本 VLAN 的邻居与网关——不会有另一个 VLAN 的主机
看到什么说明不对:
- 跨 VLAN ping 不通,但同 VLAN 通 → 三层没配好(网关地址、SVI 状态、路由表里缺那条直连);
- 网关填成了另一个 VLAN 的地址 → 症状是"本网段都不通"(包被送往错误的网段)——这就是 6.1 的经典教训;
- 三层交换机上通、出了设备到出口路由器反而不通 → 缺默认路由(6.11)。
C. 没有设备(模拟器)——建议把两种方案都搭一遍
在 eNSP / Packet Tracer / GNS3 里:
- 先复现 6.13 的现象:两个 VLAN 同网段也不通;
- 单臂路由版:路由器一个口划两个子接口(封装 dot1q),交换机上行口配 Trunk → 跨 VLAN 通;
- 三层交换机版:删掉路由器,改用两个 SVI → 跨 VLAN 也通;
- 对比
tracert的输出与抓包中 MAC 头的变化:两种方案下,MAC 头都在三层设备处整段换新、IP 头始终不变。
D. 30 秒实验(回到自己电脑上)
同一台电脑,只想一句话:我的网关地址,是那台"同时住在两个网段里"的设备上的哪张门牌?
ipconfig | findstr /i "默认网关" # Windows:拿到网关地址
ping <网关地址> # 通 → 门牌在网上、门牌后面有设备
如果公司里访问其他网段(不同网段的其他部门)能通,说明你的网关后面那台设备(三层交换机或路由器)已经在做 VLAN 间路由了——即使你从未见过它的控制台。
八、常见误区
- "配了 Trunk 就该通了。" —— Trunk 解决的是"同一 VLAN 跨设备延伸"(6.15),不是"不同 VLAN 之间互通"。两件事一层里一层外,别混。
- "跨 VLAN 的包里带着对方的 MAC 地址。" —— 不会。主机 ARP 问的是网关的 MAC;中间包的目的 MAC 在三层设备处被整段换掉,最后一段才是 PC-B 的真身(6.5)。
- "VLAN 间路由是一种特殊的路由。" —— 不特殊。它就是最普通的路由,只是"下一跳"是同一台设备的另一个虚拟接口。
- "有了三层交换机,就不用路由器了。" —— 出口的 NAT、拨号、公网还得路由器(6.12)。三层交换机通过默认路由把"去外网的包"交给它。
- "开了路由,两个 VLAN 就完全互通、随便访问了。" —— 通道是开了,但要不要全放开是策略问题(ACL)。隔离是默认值,互通要主动开、要精确开。
- "单臂路由是老古董、可以跳过不学。" —— 它是理解"VLAN 间路由"最干净的模型,且小网络与家用场景仍在用它,值得先学。
九、动手自测
点开自测(先自己答,再展开)
1. 为什么跨 VLAN 通信**必须**经过三层?二层设备"不做"和"不能做"是同一件事吗? 2. "让一台设备同时住在两个网段里"这句话,在单臂路由和三层交换机上分别对应什么配置? 3. 单臂路由里,子接口相比物理接口多了哪两件事?(提示:一个和标签有关、一个和门牌有关) 4. 单臂路由的性能瓶颈具体卡在哪两处? 5. SVI 是什么?给它配上 IP 的那一刻,路由表里会多出什么? 6. 跨 VLAN 的包,主机 ARP 请求问的是谁的 MAC?到了三层设备之后,目的 MAC 又变成谁? 7. 为什么跨 VLAN `tracert` 的第一跳是网关地址?这和同网段直接通信的第一跳有什么不同? 8. 网关填错会导致什么现象?为什么症状和"上不了外网"很像? 9. 隔离、连通、授权这三件事分别由谁负责?为什么说"路由只解决中间那件"? 10. 家里的"访客网络"与本节讲的哪种技术对应?为什么说家用路由器把子接口与 ACL 藏起来了?答案:① 因为 VLAN 之间在二层完全绝缘(广播域边界、不转发),跨 VLAN 的包必须由一台同时拥有两个网段门牌的三层设备来搬。同一件事的两个说法——二层设备按设计不做也不能做跨广播域的转发。② 单臂路由=路由器的一个物理接口划成多个子接口,每个子接口封装 802.1Q 绑定一个 VLAN 并配网关 IP;三层交换机=为每个 VLAN 建一个 SVI(Vlanif)并配网关 IP。③ 多了"绑定 VLAN 标签"(封装 dot1q / vid,决定这个子接口属于哪个 VLAN)和"一张门牌"(配网关 IP,成为该网段的网关)。④ 一是所有 VLAN 间的流量都挤在同一个物理接口与同一根线上;二是每个包都要进出路由器、走 CPU 软件转发。⑤ SVI 是交换机上的虚拟接口,对应一个 VLAN;配上 IP 的那一刻,路由表里自动多出一条该网段的直连路由(下一跳="在链路上")。⑥ 问的是网关的 MAC;到了三层设备之后目的 MAC 换成目标主机 PC-B 的真身(最后一跳 ARP 问出来)。⑦ 因为跨 VLAN 的包第一段确实是"主机 → 网关",网关就是那台三层设备,所以第一跳显示它的地址;同网段直接通信时,包直接送到对方主机,tracert 不会把对方列成"一跳"。⑧ 包会被送往错误的网段/错误的设备,结果通常连本网段之外都出不去;和"上不了外网"相似是因为两者都表现为"网关那一关过不去"(6.1 的默认网关填错)。⑨ 隔离=VLAN(二层);连通=路由/SVI(三层);授权=ACL/防火墙策略。路由只负责"两段之间能不能走",至于"谁能走、走什么",它不管。⑩ 对应"每个 SSID 一个 VLAN,再由路由器(三层)控制它们之间通不通";家用路由器把子接口与 ACL 都做进了网页后台,界面上只留"访客网络开关"。
十、下一步学什么
- ☑ 6.18(按教材顺序) —— 已学:PC 自己的路由表与默认网关(默认网关=表里的 0.0.0.0/0 行)。
相关笔记
- PC中也存在路由表(默认网关) —— 本节的三层设备在管别人的包,下一节回到主机自己:它也在查表
- 无须添加设备或更改线路即可修改网络(VLAN与标记VLAN) —— 上一节讲"改 VLAN 之后三层账还在",本节把那笔三层的账正式结清
- 使用二层交换机切分网络(VLAN) —— "跨 VLAN 二层不转发"是本节的前提,本节给出解法
- 同时具备路由器和二层交换机功能的传输设备(三层交换机) —— SVI 与"一次路由多次交换"在这里第一次出场,本节讲它怎么用来连通 VLAN
- 高度压缩路由信息的终极方法(默认路由) —— 内网互通解决了,去互联网仍要靠默认路由把包交给出口路由器
- 路由表中最基本的信息(直接连接) —— SVI 配上 IP 就自动长出一条直连路由,本节跨 VLAN 查表命中的就是它
- 确定最终的发送地址(下一个路由器执行的地址) —— 跨网段只 ARP 问网关、最后一段才写真身,本节是这个规律在设备内部的重演
- 二层交换机的操作(Unknown单播数据帧、泛洪) —— 泛洪与广播被 VLAN 关在各自的域里,才需要三层来跨越
- 互联网中使用的地址与私有网络中使用的地址(全局地址、私有地址) —— 每个 VLAN 一个私有网段的做法,建立在私有地址空间之上