🌐 第六章 路由
📄 一句话概括

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):

于是路由器这一根线上的一个物理口,长出了好几张门牌:

子接口 封装 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):

  1. PC-A 判定"目的地址不在我网段"(6.1)→ 交给网关 192.168.10.1;
  2. 交换机把帧从 Trunk 口送出去,帧上带着 VLAN 10 的标签;
  3. 路由器在子接口 G0/0.10 收下、剥掉标签,查出目的地址属于 192.168.20.0/24 → 命中的是另一个子接口的直连路由(6.8,"在链路上");
  4. 从 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 的机制原封不动)。

而转发的"物理过程"完全不同:

对比项 单臂路由 三层交换机 + 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 路由,只不过"下一跳"恰好是同一台设备的另一个虚拟接口、这一跳短得连设备门都没出。

这也解释了两个常见疑问:

📌 顺带收一个 6.13 留的尾巴:VLAN 与子网是两个层次的隔离——"VLAN 是二层广播域(隔墙)、子网是三层 IP 网段(门牌)"。让两者一一对应(一个 VLAN 一个网段),正是为了让上面这套路由动作干净利落;如果硬要让两个 VLAN 共用一个网段(非常规做法),就会撞上"同网段直接交付、根本不找网关"的机制,反而通不了。

五、通了之后:通道要开,但闸门要留

VLAN 被隔离出来是有目的的(6.14:隔离是默认值),所以"跨 VLAN 路由"打开的是通道,不是"随便走"。三个层次各管一段:

层次 手段 决定
隔离 VLAN(二层) 谁和谁默认不通
连通 路由 / SVI(三层) 哪两个网段可以通
授权 ACL / 防火墙策略 通是通了,谁能访问谁、能访问什么

所以工程上的标准做法是:路由只开需要开的方向,再配 ACL 精确放行。比如"技术部可访问服务器 VLAN,访客 VLAN 只能出公网、不能碰任何内网网段"——靠的就是路由 + ACL 的组合,而不是把所有 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 的主机

看到什么说明不对:

C. 没有设备(模拟器)——建议把两种方案都搭一遍

在 eNSP / Packet Tracer / GNS3 里:

  1. 先复现 6.13 的现象:两个 VLAN 同网段也不通;
  2. 单臂路由版:路由器一个口划两个子接口(封装 dot1q),交换机上行口配 Trunk → 跨 VLAN 通;
  3. 三层交换机版:删掉路由器,改用两个 SVI → 跨 VLAN 也通;
  4. 对比 tracert 的输出与抓包中 MAC 头的变化:两种方案下,MAC 头都在三层设备处整段换新、IP 头始终不变。

D. 30 秒实验(回到自己电脑上)

同一台电脑,只想一句话:我的网关地址,是那台"同时住在两个网段里"的设备上的哪张门牌?

ipconfig | findstr /i "默认网关"     # Windows:拿到网关地址
ping <网关地址>                       # 通 → 门牌在网上、门牌后面有设备

如果公司里访问其他网段(不同网段的其他部门)能通,说明你的网关后面那台设备(三层交换机或路由器)已经在做 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 都做进了网页后台,界面上只留"访客网络开关"。

十、下一步学什么

相关笔记