本页课程原文(点开阅读)

网络三层静态路由

课程(6 节,按顺序学)

第 1 课 · 二层到不了的地方

入门 · 约 8 分钟

本课目标:接上「网络二层」留下的死胡同,看清三层解决的到底是什么问题。

先回顾那个死胡同

在网络二层模块的最后一个场景里,两台主机接在同一台交换机上,物理上一跳可达,但 IP 在不同网段 —— 就是不通。

那一页的结论是:
「交换机只看 MAC,它不知道「网段」是什么东西。
跨网段必须靠三层设备,而主机找三层设备的方式就是默认网关。」

★ 这一课就从那句话开始。

★★ 三层和二层的三个根本差别

| | 二层(交换机)| 三层(路由器)|
|---|---|---|
| 地址怎么比 | MAC 精确相等 | IP 前缀包含 |
| 表怎么来的 | 自己学(收帧学源 MAC)| 人配的或协议算的 |
| 有没有 TTL | ❌ 没有 → 环路是灾难 | ✅ 有 → 报文会自己死掉 |

★★ 第一条最重要:「前缀包含」是三层可扩展性的全部来源。
一条 10.1.0.0/16 的路由覆盖了 6 万多个地址;
而 MAC 表里一个表项只能对应一台设备。

★ 第三条留到第 6 课再对比 —— 那里能看到 TTL 救命的样子。

★ IP 是端到端的,MAC 是逐跳的

这是理解转发过程的关键,也是最容易搞混的一点:

PC1 发给 PC2 的包,一路上:
· 目的 IP 始终是 PC2 的 IP,从头到尾不变
· 而二层帧头的目的 MAC 每一跳都在变 ——先是网关的 MAC,再是下一跳路由器的 MAC……

★ 所以每台路由器收到包之后都要重新问一次:
「按这个目的 IP,我该把它交给谁?」—— 这一问就是查路由表。

动手:看包怎么跨过网段

去连通性测试页,ping PC1 → PC2。

★ 看那条逐跳路径:包从 PC1 出发,经过 R1、R2,到 PC2。
★★ 注意每一跳的 TTL 在减 —— 这个字段二层压根没有。

实验重点

  • ★ 二层管不了跨网段:交换机不知道「网段」是什么
  • ★★ 三层用前缀包含匹配地址 —— 这是它可扩展的全部来源
  • ★ IP 是端到端的(不变),MAC 是逐跳的(每跳都换)
  • 三层有 TTL,二层没有

第 2 课 · 路由表:直连路由是白送的

入门 · 约 8 分钟

本课目标:搞清路由表里每一列是什么,以及「我什么都没配为什么有路由」。

路由表只回答一个问题

「目的 IP 是这个,我该往哪个方向发?」

所以表的列就是这几样:

| 列 | 含义 |
|---|---|
| 目的网段/掩码 | 匹配用(★ 前缀包含,不是精确相等)|
| 下一跳 | 交给谁(★ 必须是直连邻居的接口 IP)|
| 出接口 | 从哪个口发(★ 由下一跳递归查出来的,不是人配的)|
| 优先级 | 多条都匹配时谁生效(直连 0 < 静态 60)|

★★ 「我什么都没配,为什么路由表里有东西」

因为直连路由是接口 IP 的副产品 ——
接口配了 IP 并且 up,对应网段的路由就自动出现,不用配。

它的含义是:「这个网段就挂在我某个接口上,我直接就能到。」

★ 优先级是 0,全表最高 ——因为「我自己直连的网段」这件事没有比它更可靠的信息来源。

★★ 反过来推一个很有用的结论:
接口 IP 配错网段,直连路由就是错的,后面所有静态路由都会跟着错 ——
因为静态路由的下一跳要靠直连路由来判断「是否可达」。

动手:看直连路由自己出现

当前场景是 ② 从零开始配 —— 接口 IP 都配好了,但一条静态路由都没有。

去路由表页,看 R1:
★ 它已经有 2 条直连路由了(对应两个接口的网段),而静态路由一条都没有。
★★ 所以 R1 现在只知道自己直连的那两个网段,去 PC2 那个网段它压根不知道往哪走。

实验重点

  • 路由表回答的问题:目的 IP 是这个,往哪个方向发
  • ★★ 直连路由不用配 —— 接口配了 IP 并且 up 就自动有
  • ★ 出接口是由下一跳递归查出来的,不是人配的
  • 优先级:直连 0 < 静态 60,小的赢

第 3 课 · ★★ 最长前缀匹配:唯一的选路规则

入门 · 约 10 分钟

本课目标:把整个路由查找过程压缩成三句话。

三句话说完

① 把所有能匹配这个目的 IP 的路由都找出来
② 掩码最长的那条赢
③ 掩码一样长 → 比优先级(小的赢)

就这样,没有第四条。

★★ 为什么是「最长」

因为掩码越长,这条路由描述的范围越小、信息越具体。

· 10.1.1.0/24 在说「我确切知道这 254 个地址怎么走」
· 10.1.0.0/16 在说「10.1.x.x 大概走这边」
· 0.0.0.0/0 只是在说「剩下的都丢给它吧」

★ 具体的信息当然应该压倒笼统的信息 —— 这就是全部道理。

★★ 由此立刻推出一条:默认路由永远是最后的兜底。
它掩码长度是 0,是最短的前缀,只要有任何别的路由匹配,它就赢不了。

★ 默认路由是性价比最高的一条

ip route-static 0.0.0.0 0.0.0.0 <下一跳> —— 「其他所有地址都往这儿发」。

★ 现网里接入层设备通常只需要:
本地几个网段(直连,白送)+ 一条默认路由指向上行。
它压根不需要知道整个互联网有哪些网段。

★★ 而现网也利用最长前缀匹配做「例外路由」:
大部分流量走默认出口,个别子网用更长的前缀单独引流(比如把某个网段的流量牵到专线上)。

动手:三条重叠路由,看谁赢

当前场景 ④ 最长前缀匹配:R1 上有三条路由指向不同方向 ——
0.0.0.0/0 → R2、10.1.0.0/16 → R3、10.1.1.0/24 → R3。

去连通性测试页 ping PC1 → PC3(10.1.1.10)。

★★ 看 R1 那一跳的「所有候选路由」——界面会把三条都列出来,标明哪条赢、为什么。

实验重点

  • ★★ ① 全部匹配的挑出来 ② 掩码最长的赢 ③ 同长比优先级
  • 为什么最长赢:掩码越长越具体,具体压倒笼统
  • ★ 默认路由(/0)永远是最后的兜底
  • ★ 现网用更长的前缀做「例外路由」给个别子网单独引流

第 4 课 · ★★ 手工配一条静态路由

入门 · 约 10 分钟

本课目标:学会配,以及避开那个最常见的写法错误。

命令长什么样
华为:ip route-static 10.0.2.0 255.255.255.0 10.0.12.2
华为:ip route-static 10.0.2.0 24 10.0.12.2        ← 掩码也能写长度
思科:ip route 10.0.2.0 255.255.255.0 10.0.12.2

三个参数:目的网段、掩码、下一跳。

★ 注意出接口不用写 —— 设备会拿下一跳去查直连路由,自动算出该从哪个口发。这一步叫「路由递归」。

★★ 最常见的写法错误:下一跳不是直连地址

下一跳必须是「直连邻居的接口 IP」。 三种常见错法:

· ❌ 把目的主机的 IP 当下一跳(... 10.0.2.0 24 10.0.2.10)
· ❌ 把隔了一跳的远端路由器 IP 当下一跳(隔一跳就不是直连了)
· ❌ 接口 IP 配错网段,导致以为直连其实不直连

★ 后果是这条路由配了但无效 —— 它在配置里看得见,却装不进转发表。
这个「配了却不起作用」的状态是排障时最迷惑的情形之一。

★★ 判断方法:先 display ip interface brief 看自己的接口网段,确认下一跳落在其中。

★ 另一个高频笔误:目的网段写成了主机地址

ip route-static 10.0.2.10 24 ... —— 这是错的。

目的地要写网络号(主机位全 0):按 /24 算,10.0.2.10 所在的网段是 10.0.2.0。

★ 本实验会直接拒绝这种写法,并告诉你「你想写的是不是 10.0.2.0」。

动手:从零把它配通

当前场景 ② 从零开始配 —— 一条静态路由都没有。

去配静态路由页,自己动手:
① 先在 R1 上配去 PC2 网段(10.0.2.0/24)的路由
② 去连通性测试页 ping 一次 —— ★ 你会发现还是不通
③ 想一想为什么,然后看第 5 课

★ 也可以故意写个错的下一跳,看报错怎么解释。

实验重点

  • ip route-static 目的网段 掩码 下一跳 —— 三个参数
  • ★ 出接口不用写,设备靠下一跳递归查出来
  • ★★ 下一跳必须是直连邻居的接口 IP
  • ★ 目的地要写网络号,不是网段里某台主机的地址

第 5 课 · ★★★ 只配了去程:最经典的那个错误

排障 · 约 12 分钟

本课目标:理解「路由是单向的」,以及为什么这个错误特别难自查。

现象:去程通了,但 ping 不通

上一课最后那一步,你在 R1 上配好了去 PC2 的路由,然后 ping —— 还是不通。

★★★ 而最迷惑的地方是:去程真的通了。
包确实从 PC1 出发、经过 R1、R2,到达了 PC2。一路顺利。

问题在回程:PC2 要回一个 ICMP 应答,而 R2 不知道怎么回到 PC1 那个网段 ——
它的路由表里只有两条直连,没有去 10.0.1.0/24 的路。

★★★ 根因:路由是单向的

这是一件极其容易忽略、但一旦想通就再也不会忘的事:

一条静态路由只描述了「去某个网段该往哪走」。
它不会自动产生反方向的那条。

而 ping、TCP、HTTP、任何有来有回的通信,都需要两个方向都通。

★★ 所以配静态路由的正确习惯是:成对配。
配完一条立刻问自己一句「回来的路有吗」。

★★ 为什么这个错误特别难自查

因为你盯着自己这台设备的配置怎么看都是对的 —— 它真的是对的。

· R1 的路由表:✅ 有去 10.0.2.0/24 的路由,下一跳也对
· R1 的接口:✅ 都 up、IP 都对
· 从 R1 ping R2:✅ 通

病灶在另一台设备上,而那台设备的管理员可能都不是你。

★★★ 现网最实用的一条排查命令 —— 去对端执行:

display ip routing-table | include 10.0.1.0

(把 10.0.1.0 换成源主机所在的网段)
没有输出,病因就在那儿。

动手:亲眼看到不对称

当前场景就是 ③ 只配了去程。去连通性测试页 ping PC1 → PC2。

★ 界面会把去程和回程分开列出来:
· 去程:✅ 通,经过 2 台路由器
· 回程:❌ 在 R2 断掉 —— 没有匹配的路由

★★ 然后去配静态路由页,在 R2 上补一条回程路由,再 ping 一次。

实验重点

  • ★★★ 路由是单向的 —— 配一条只解决一个方向
  • ping / TCP / 任何通信都需要两个方向都通
  • ★★ 现象迷惑在于:去程真的通了,你自己的配置也真的是对的
  • ★ 排查:去对端执行 display ip routing-table | include 源网段
  • ★ 习惯:静态路由成对配

第 6 课 · 静态路由的天花板,以及 TTL 救了你

进阶 · 约 12 分钟

本课目标:看清静态路由的两个根本局限,以及三层为什么不需要 STP。

★ 局限一:不会自动恢复(黑洞)

静态路由是死的 —— 它不知道网络发生了什么。

链路断了,这条路由(如果只写了下一跳 IP)在很多设备上依然留在路由表里,
于是报文源源不断被送进一条死路 —— 这叫黑洞。

★ 小网络的缓解办法:浮动静态路由 ——
同一个目的配两条,优先级不同(比如主路 60、备路 100),主路的出接口 down 了备路自动顶上。

⚠️ 但这只是缓解:它只能应对直连链路 down,对更远处的故障依然无感。

★★ 局限二:不扩展(条数是平方级涨的)

去 ⑥ 三台串联 场景数一数:3 台路由器、4 个网段,要配 6 条静态路由。

★ 而且中间那台 R2 必须同时知道两头 ——
每加一个网段,所有其他路由器都可能要加一条。

N 个网段两两互通,最坏情况要配 N×(N−1) 条。
10 个网段就是 90 条;改一处拓扑要动多台设备,漏一条就有一个方向不通。

★★ 这就是动态路由协议存在的全部理由:
让设备自己交换信息、自己算路由、拓扑变了自己重算。

★★★ 而这里有个惊喜:TTL 救了你

去 ⑤ 路由环路 场景,ping PC1 → PC2。

R2 的路由配错了,指回了 R1 → 包在两台之间来回打转。

★★ 但看后果:TTL 每跳减 1,从 255 开始,255 跳之后报文自己被丢弃。
业务不通(配置确实错了),但网络还活着 ——带宽没被打满、设备还能登上去改配置。

★★★ 现在回想「网络二层」和「STP」那两个模块:
以太网帧头没有 TTL,二层环路里的帧永远转下去、副本指数级翻倍 →
广播风暴 → 整网瘫掉、连设备都登不上去救。

就这一个字段的差别,决定了二层必须有 STP、而三层不需要。

★ 接下来去哪

静态路由的位置很清楚:小网络、拓扑稳定、出口单一的场景它最省事 ——
不占 CPU、不发协议报文、完全可控。

规模一上来就该换动态路由协议:
· OSPF —— 链路状态,跑 Dijkstra 算最短路(本项目有这个模块)
· IS-IS —— 同类,运营商网络更常见(也有模块)
· RIP —— 距离矢量的原型,主要用来理解「为什么会有计数到无穷」

★★ 而它们和静态路由的关键差别只有一句话:
静态路由等人来改,动态路由自己重算。

实验重点

  • ★ 局限一:不会自动恢复 → 黑洞(缓解:浮动静态路由)
  • ★★ 局限二:不扩展 —— N 个网段最坏要配 N×(N−1) 条
  • ★★★ TTL 让三层环路只是「不通」,而二层环路是「整网瘫掉」
  • ★ 静态路由适合小网络、稳定拓扑;规模上来换 OSPF / IS-IS
冀ICP备2026021556号-2|冀公网安备13068302000206号