Appearance
题目
下图所示网络中,假设 R1、R2、R3 采用 RIP 协议交换路由信息,且均已收敛。若 R3 检测到网络 201.1.2.0/25 不可达,并向 R2 通告一次新的距离向量,则 R2 更新后,其到达该网络的距离是( )。
图中说明:R3 直连 Net2;收敛后 R3 距离 0、R2 距离 1(经 R3)、R1 距离 2(经 R2)。RIP 距离指"到达该网络要再经过多少跳路由器"。
错因
A
可能算成"R2 经 R1 距离 = R1 距离 + 0 = 2"——漏算了 R2 → R1 这一跳。R2 经过 R1 到达 Net2 需要先跳到 R1(+1),再走 R1 自己到 Net2 的路径(已知距离 2),共 1+2 = 3。错的根源:忘记 R2 自己经 R1 时要 +1 跳。
C
只看 R3 通告的不可达消息(距离 16),就判定 R2 也不可达——没考虑 R2 还有 R1 这条备选邻居。R1 此时还持有旧的可达信息("我到 Net2 距离 2"),会通告给 R2,R2 据此算出"经 R1 = 3"是可达路径。错的根源:忽略了 RIP 多邻居路径选择的机制。
D
按 "R2 经 R3 = R3 通告 16 + 1 = 17" 算,没做截断也没考虑备路。实际 R2 经 R3 算出 17 后,由于 RIP 上限规则会取 16 作为不可达;但即便截断成 16,R2 仍会比较所有邻居路径,选最小的——经 R1 距离 3 比 16 更小,R2 应该选经 R1 而不是不可达。错的根源:把"经 R3"误当成 R2 的唯一选择,没看 R2 还能选其他邻居。
总解析
第一步:明确收敛初始状态
题面说"R1、R2、R3 已收敛"——按 RIP 距离的命题方约定(直连网络距离 = 0、每经一跳路由器 +1):
| 路由器 | 到 Net2 的距离 | 选定下一跳 |
|---|---|---|
| R3 | 0 | 直连 |
| R2 | 1 | 经 R3 |
| R1 | 2 | 经 R2 |
第二步:R3 检测到 Net2 不可达
R3 把自己路由表中"到 Net2"那一项的距离更新为 16(不可达),并向邻居 R2 通告这次更新(触发更新 triggered update)。
第三步:R2 处理 R3 的通告
R2 收到"R3 到 Net2 = 16"——按"距离 = 邻居距离 + 1"算:
但 R2 不止 R3 一个邻居——它还能经 R1 到 Net2。
第四步:关键观察 —— "坏消息传得慢"
RIP 的著名缺陷:路由器只在自己的周期性更新(默认 30 秒一次)才向邻居通告——R3 的"不可达"消息此时只通知了 R2,没通知 R1。
R1 此刻仍持有旧的可达信息:"R1 到 Net2 距离 = 2,下一跳 R2"。R1 会按周期向 R2 通告它的距离向量,包括"我到 Net2 距离 2"。
R2 收到 R1 的通告,算:"经 R1 到 Net2 距离" = R1 通告距离 + 1 = 2 + 1 = 3。
第五步:R2 选择新的最佳路径
R2 比较两条候选路径:
| 经由 | 距离 |
|---|---|
| 经 R3 | 16(不可达) |
| 经 R1 | 3(可达) |
RIP 选择距离最小的可达路径,所以 R2 更新后到 Net2 距离 = 3,下一跳改为 R1。
最终答案是 B(3)。
编者注(生僻术语):"计数到无穷"(count-to-infinity)问题——本题展示的就是这个经典 RIP 缺陷的开端:
- R3 直连不可达,正确距离应是 16
- 但 R1 持有过期信息(距离 2),通过 R2 让 R2 误判"经 R1 距离 3"
- R2 把这个错误信息再通告 R1("R2 距离 3"),R1 更新自己 = 4
- R1 再通告 R2 → R2 = 5;R2 通告 R1 → R1 = 6 …… 一直循环加 1,每个 RIP 周期增 2
- 直到 R1、R2 双方都到达 16(≈ 8 个 RIP 周期后),才被判定不可达
真实路由收敛会经历 N 分钟的"鬼魂路径"。"水平分割(split horizon)"和"毒性逆转(poison reverse)"是缓解该问题的两个机制——本题假设两者都未启用,所以发生计数到无穷的开局。