一张拓扑,三个问题:路由从哪里来,故障怎样传播,数据如何到达。
- 路由建立
初始时每台路由器只知道本机,直连路由器和终端也尚未发现。点击轮次按钮可直接查看第 0、1、2、3 轮及收敛状态;第 0 轮仅知道本机,第 1 轮发现直连,后续轮次逐步建立远端路由。也可使用「下一轮」或「自动演示」。绿色小点代表控制报文;下方并排显示 R1–R5 的路由表,观察各表高亮的新记录。「自动演示」在收敛后暂停。
- 故障与重收敛
进入本环节时已是收敛后的第 0 轮。关闭 R2 或点击「R1–R2 延迟增大」,第 1 轮检测变化并清除失效路径;随后按 Dijkstra 顺序逐步确认替代路径,再传播给更远的设备,逐步重新稳定。获知 R2 离线后,到 R2 的代价持续为 ∞,不能绕行连接到已离线设备。可随时回到“故障前”比较,点击「重新演示」恢复健康网络;收敛后 H1–H6 都仍然可以访问。按钮可再次点击恢复。延迟变化通过代价 1 → 8 表示,旅程中直接累加图中数字作为模拟耗时。点击任意链路可断开、恢复或调整代价;点击每张路由表表头的电源按钮可模拟对应设备故障或恢复。
- 数据包转发
建议选择 H1 → H6。取消「自动转发」后逐跳观察;途中可以制造故障。数据包始终按照当前设备的路由表转发,无路由、链路中断或 TTL 耗尽都会丢包。旅程旁的总耗时直接相加当前路径上的链路数字,终端接入不另计。再次发送可以比较故障前后的路径和耗时。
Dijkstra 怎样建立路由表?
每台路由器先产生带序号的本地链路通告(LSA),通过邻居逐轮传播。收到的通告组成该设备自己的网络地图,再以自己为起点运行 Dijkstra:反复选出尚未确定的节点中距离最小的一个,更新它相邻节点的候选距离。计算过程单独展开为可回看的步骤,按距离从小到大确认需要更新的路径并写入路由表;同一网关下的终端随网关路径一起更新。“待计算”和“…”表示这条路径尚待确认,不等于故障不可达。
链路代价为正数,符合 Dijkstra 的非负权要求。发生故障时先更新本地通告,再传播给其他设备;每台设备根据自己收到的信息重新计算,不会在故障发生瞬间就知道全网变化。
教学模型的边界
这是链路状态与 Dijkstra 的教学模型,不是完整 OSPF 实现。轮次包含拓扑传播轮次和单独展开的 Dijkstra 计算步骤,两者分别标注,不对应真实协议定时器。02 的第 1 轮检测变化,后续逐步确认需要更新的路径,并向远端传播;不可达使用无穷大表示。第一轮的直连探测是教学抽象,不对应完整 ARP 或 Hello 握手。LSA 采用完整数据库逐轮交换,省略完整邻居握手、区域、可靠泛洪确认、LSA 老化以及协议报文编码。
五台路由器的表同时并排显示在拓扑下方,目的地仅显示 H、R 编号,不显示 IP。为便于教学,路由表只按终端 H 和路由器 R 分组显示,R 行表示到对应路由器的距离,H 行表示经终端网关到达该终端的路径。终端到网关的局域网开销不计入图中链路代价;本机代价记为 0。同一局域网内的终端直接交付,TTL 不变;图中省略了交换机,网关故障不等于 LAN 故障。图中连线与代价是为演示冗余路径补全的示例,并非对附件拓扑的精确复原。
快捷键:→ 下一轮,← 回退,空格 播放 / 暂停;数据包在单独的发送控件中逐跳操作。工具栏重建按钮保留当前拓扑并清空学到的路由;「重置实验」恢复全部默认设置。
协议参考:RFC 2328 · OSPF Version 2。