CS 168 · LECTURE 07 · 2026-09-17 · 路由

链路状态、Dijkstra 与层次化地址

链路状态让每台路由器获得同一张拓扑图,再独立运行 Dijkstra;地址聚合则让这张图最终能映射到规模可控的前缀表。

版本快照:Fall 2026 官方课表与在线教材,核对日期 2026-09-02;官网仍标注 under construction,日期与政策可能变化。

  1. 互联网地基
  2. 路由
  3. 传输
  4. 应用与端到端
  5. 数据中心
  6. 群体通信
  7. 无线与移动

本章核心问题

如果每台路由器都知道全图,怎样保证它们知道的是同一个、足够新的图?

1 · LSA 与可靠泛洪

每台路由器产生 link-state advertisement,列出邻居与代价,并用序列号/年龄区分新旧。收到更新的 LSA 后写入链路状态数据库,再转发到除来路之外的邻居。重复与旧副本被丢弃。

泛洪的目标不是“消息只走一次”,而是让连通域内所有活路由器最终拥有同一组最新 LSA。ACK、重传、序列号和老化共同对抗丢失、重复与重启。

2 · Dijkstra 的永久标号

源点距离设 0,其余为无穷。每轮取尚未确定且 tentative distance 最小的节点,把它永久加入树,并松弛出边。非负边权保证之后绕经未确定节点不可能得到更短路径。

输出不是“整条路径字符串”,而是对每个目的回溯最短路树得到第一跳。相同代价时的 tie-break 必须稳定,否则不同重算可能造成无谓转发表抖动。

3 · 地址为何必须层次化

IPv4 地址同时承担定位与标识的历史角色。CIDR 前缀 192.0.2.0/24 表示高 24 bit 固定,剩余 8 bit 在该块内变化。提供商可向外通告聚合前缀,使全球表项数与网络块而非主机数接近。

更具体前缀允许多宿主、流量工程与例外路径,却削弱聚合。地址分配与路由可扩展性因此紧密相连。

4 · DV 与 LS 的边界

DV 只交换目的距离,消息小但容易因间接信息形成环;LS 泛洪局部链路事实,状态和计算更多,却能快速在一致拓扑上重算。两者都不是“集中式”:LS 的图由分布式泛洪获得,每台路由器本地运行算法。

自治系统内部可选择 OSPF/IS-IS 等链路状态协议,而跨域 BGP 关注策略与可扩展性,不能简单用全球 Dijkstra 取代。

纠错:最容易带走的错误模型

闭卷推演

给五节点图手跑 Dijkstra,并把最终 predecessor tree 转成每个目的的 next hop;再加入一个 /24 与两个 /25 前缀解释聚合与例外。

检查:链路状态协议为什么需要序列号或年龄?

机制工作台:before → event → after

Before / local state

每个 router 接收 LSA、更新 topology database、运行 Dijkstra,再把 next hop 投影到 FIB

Event / after / output

每个 router 接收 LSA、更新 topology database、运行 Dijkstra,再把 next hop 投影到 FIB;地址聚合减少表项。

检查:判断一个实现分支是否必要,最有力的问题是什么?

Explain It Yourself

改变一条链路代价,手推 SPF tree 哪些节点的 predecessor 改变。

自检方法

答案必须出现 packet/message、local state/table、触发 event、after state 与 output;只给定义不算完成。

一手资料

正文是 CourseStack 的中文解释与重新绘制的教学例子;官方页面负责课程原始定义,历史仓库只提供你的实现证据。