Appearance
题目
某网络由 4 台路由器 R1~R4 互联构成(拓扑及链路 metric 见下图),每台路由器都连接一个 /24 子网,且都运行 OSPF 协议。R1 所维护的 4 台路由器的链路状态信息(LSI)如下表。
关联题目:本题与 ds-2014-42 共用同一网络拓扑——那道是数据结构视角(图抽象 + 邻接表 + Dijkstra),本题是网络层视角(路由表设计 + 路由聚合 + TTL + 默认路由)。两道题串起来看就把"OSPF 链路状态协议"在 DS 和 CN 学科里的考法闭环了。
R1 所维护的 LSI 表:
| R1 的 LSI | R2 的 LSI | R3 的 LSI | R4 的 LSI | 备注 | |
|---|---|---|---|---|---|
| Router ID | 10.1.1.1 | 10.1.1.2 | 10.1.1.5 | 10.1.1.6 | 标识路由器的 IP 地址 |
| Link1 ID | 10.1.1.2 | 10.1.1.1 | 10.1.1.6 | 10.1.1.5 | 所连路由器的 Router ID |
| Link1 IP | 10.1.1.1 | 10.1.1.2 | 10.1.1.5 | 10.1.1.6 | Link1 的本地 IP 地址 |
| Link1 Metric | 3 | 3 | 6 | 6 | Link1 费用 |
| Link2 ID | 10.1.1.5 | 10.1.1.6 | 10.1.1.1 | 10.1.1.2 | 所连路由器的 Router ID |
| Link2 IP | 10.1.1.9 | 10.1.1.13 | 10.1.1.10 | 10.1.1.14 | Link2 的本地 IP 地址 |
| Link2 Metric | 2 | 4 | 2 | 4 | Link2 费用 |
| Net1 Prefix | 192.1.1.0/24 | 192.1.6.0/24 | 192.1.5.0/24 | 192.1.7.0/24 | 直达网络 Net1 的网络前缀 |
| Net1 Metric | 1 | 1 | 1 | 1 | 到达网络 Net1 的费用 |
网络拓扑(边权为链路费用):
R1 接 192.1.1.0/24 的接口名为 E0;R1 接 R2 的接口名为 L0(IP 10.1.1.1);R1 接 R3 的接口名为 L1(IP 10.1.1.9)。
请回答下列问题:
(1) 假设路由表结构如下表所示,请给出 R1 的路由表,要求包括到达图中子网 192.1.x.x 的路由,且路由表中的路由项尽可能少。
| 目的网络 | 下一跳 | 接口 |
|---|
(2) 当主机 192.1.1.130 向主机 192.1.7.211 发送一个 TTL = 64 的 IP 分组时,R1 通过哪个接口转发该 IP 分组?主机 192.1.7.211 收到的 IP 分组 TTL 是多少?
(3) 若 R1 增加一条 Metric 为 10 的链路连接 Internet,则 R1 的 LSI 需要增加哪些信息?
解析
总思路:本题要先用 Dijkstra 算出 R1 到各子网的最短路径(与 ds-2014-42 的 (3) 完全一致),然后做三件 CN 特有的事——路由聚合 / TTL 计算 / 默认路由配置。
(1) R1 的路由表(最少路由项)— 6 分
第一步:先用 Dijkstra 算 R1 到各子网的最短路径(详细推导参见 ds-2014-42 的 (3)):
| 目的子网 | 最短路径 | 总 metric | R1 出接口 | 下一跳 |
|---|---|---|---|---|
| 192.1.1.0/24 | (直连) | 1 | E0 | — |
| 192.1.5.0/24 | R1→R3→192.1.5.0/24 | 3 | L1 | 10.1.1.10(R3) |
| 192.1.6.0/24 | R1→R2→192.1.6.0/24 | 4 | L0 | 10.1.1.2(R2) |
| 192.1.7.0/24 | R1→R2→R4→192.1.7.0/24 | 8 | L0 | 10.1.1.2(R2) |
注意 192.1.7.0/24 走 R2 还是 R3:
- 经 R3:2 + 6 + 1 = 9
- 经 R2:3 + 4 + 1 = 8 ← 更短
第二步:尝试路由聚合
题目要求"路由表中的路由项尽可能少"——这是聚合(route aggregation / supernetting)的强提示。
把 4 个目的子网的前缀写成二进制看哪些位连续:
| 子网 | 第三个字节(关键位) |
|---|---|
| 192.1.1.0/24 | 00000001 |
| 192.1.5.0/24 | 00000101 |
| 192.1.6.0/24 | 00000110 |
| 192.1.7.0/24 | 00000111 |
观察 192.1.6.0/24 和 192.1.7.0/24:
- 第三字节分别是
00000110和00000111 - 前 7 位(
0000011)相同,最后 1 位不同 - 合起来覆盖范围是
00000110~00000111= 6.0/24 ∪ 7.0/24 - → 可用 192.1.6.0/23(掩码 23 位 = 前 23 位匹配)表达
关键约束:聚合后的两个子网必须下一跳相同 + 出接口相同——
- 192.1.6.0/24:下一跳 R2,接口 L0 ✓
- 192.1.7.0/24:下一跳 R2,接口 L0 ✓ → 满足,可聚合
192.1.5.0/24 不能加入聚合:
- 第三字节
00000101,与 6/7 的0000011x前 7 位不同(前 6 位000001才相同 = /22 = 5/6/7 都进,但还有 4.0/24 也会被卷入) - 即使 /22 在位上勉强能合(强行包含 4/5/6/7),192.1.5.0/24 的下一跳是 R3 而 6/7 的下一跳是 R2,方向不同,绝对不能聚合
最终 R1 的路由表(只有 3 项):
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 192.1.1.0/24 | — | E0 |
| 192.1.5.0/24 | 10.1.1.10 | L1 |
| 192.1.6.0/23 | 10.1.1.2 | L0 |
路由项数从 4 条减到 3 条——这是 OSPF/CIDR 协议层面"最长前缀匹配 + 路由聚合"机制的核心收益。如果不聚合写 4 条也算对(按"路由项不完全正确"酌情给分),但失分。
(2) TTL 计算 — 2 分
第一步:R1 查路由表确定出接口
- 目的 IP:192.1.7.211
- R1 路由表 3 条,逐项做最长前缀匹配:
- 192.1.1.0/24 → 不匹配(第三字节 1 ≠ 7)
- 192.1.5.0/24 → 不匹配(第三字节 5 ≠ 7)
- 192.1.6.0/23(覆盖 6.0~7.255)→ 匹配!
- 命中第 3 条 → R1 通过 L0 接口 转发,下一跳 10.1.1.2(即 R2)
第二步:数路径上路由器跳数
H_src (192.1.1.130)
│
▼
[R1] ← 跳 1(TTL:64 → 63)
│
▼
[R2] ← 跳 2(TTL:63 → 62)
│
▼
[R4] ← 跳 3(TTL:62 → 61)
│
▼
H_dst (192.1.7.211) 收到 TTL = 61TTL 减 1 的硬规则:
- IP 分组每经过一个路由器,TTL 减 1
- 主机(无论源还是目的)不减 TTL
- 路由器之间的链路不消耗 TTL——只有"被路由器转发"的动作消耗一次
R1 → R2 → R4 共经过 3 个路由器,所以目的主机收到时 TTL = 64 − 3 = 61。
不少考生会把"经过几跳"误算成"经过几条链路"或"包含主机数"——记住:TTL 减 1 的次数 = 路径中路由器数(不含主机)。
(3) R1 增加 Internet 链路后的 LSI 变化 — 1 分
新增链路是 R1 直连 Internet 的出口,OSPF LSI 中用"直连网络 (Prefix, Metric)"形式表达。但 Internet 不是一个具体子网,要写一条默认路由式的特殊条目:
| 字段 | 值 |
|---|---|
| Prefix | 0.0.0.0/0 |
| Metric | 10 |
为什么用 0.0.0.0/0:
- 0.0.0.0/0 = 掩码全 0 = 匹配任何 IP 地址
- 在最长前缀匹配规则下,它的优先级最低(前缀位数最少)——只有当其它路由项都不匹配时才命中
- 这正是"默认路由"的语义:已知子网走具体路由,未知目的全部走出网链路
这条 LSI 经 OSPF 泛洪到 AS 内其它路由器后,R2/R3/R4 的路由表里都会出现一条经 R1 出网的默认路由——AS 整体获得了访问外网的能力。
编者注(生僻术语):
- LSI = Link State Information(链路状态信息),是教材的简化叫法,对应 OSPF 标准里的 LSA(Link State Advertisement,类型 1 Router-LSA)
- 路由聚合 / 路由聚集 = supernetting / route summarization,CIDR 反向操作(CIDR 是 IP 分配粒度,supernetting 是路由表层面合并多条路由)
- 0.0.0.0/0 在 Cisco / Linux 命令行里写作
default,本质就是"所有未知目的"的兜底路由
关联题型对照(OSPF / 路由表系列):
- 2014-42(DS):图抽象 + 邻接表设计 + Dijkstra 求最短路(数据结构层)
- 本题(CN):基于 Dijkstra 结果做路由聚合 + TTL 计算 + 默认路由配置(网络层应用)
两道题串起来 = 一次"OSPF 协议 → 链路状态算最短路 → 写进路由表 → 聚合优化 → 处理外网"的完整闭环。复试或工作面试问到 OSPF 协议时,这两道真题的解题思路就是答题模板。