CS 168 · LECTURE 09 · 2026-09-24 · 路由
BGP 不追求一个全世界统一的最短路径;它让独立自治系统在商业关系和安全边界下选择、出口并传播可接受的路径。
版本快照:Fall 2026 官方课表与在线教材,核对日期 2026-09-02;官网仍标注 under construction,日期与政策可能变化。
当每个网络的目标函数不同,互联网为什么仍能得到足够的全球可达性?
自治系统(AS)是共同管理和路由策略下的网络集合。客户向 provider 付费获得全球可达,peer 常为彼此客户交换流量而不免费转运第三方流量。商业关系形成 export policy 的基础。
一个常见稳定策略是:客户学到的路可向所有邻居通告;peer/provider 学到的路通常只向客户通告。这样 AS 不会无偿成为两个上游之间的 transit。
BGP update 携带 AS_PATH。AS 收到包含自身 ASN 的路径可立即拒绝,从控制平面防止 AS 级环路。与 DV 的单一距离不同,完整路径还支持策略判断与归因,但状态更大。
路径属性包括 LOCAL_PREF、AS_PATH、MED、next hop 等,选择过程有明确优先级。最短 AS_PATH 只是其中一步,通常排在本地策略之后。
import policy 先决定邻居通告是否可接受并可改写属性;decision process 在本地候选中选 best path;export policy 再决定把选中路线告诉谁。这三步分开能解释“我知道一条路但不使用”与“我使用但不向你宣传”。
排查 BGP 时必须标注观察点:邻居是否发送、入口是否过滤、候选是否败选、出口是否拒绝。只看最终 FIB 无法定位策略在哪一步生效。
同等高层策略下,AS 可能选择离本地最近的出口,把流量尽快交给下一个 AS,称 hot-potato routing。这降低自身内部成本,却可能增加端到端路径长度。
BGP 的目标是可扩展、自治且策略可表达,而不是全局最优。由此会产生路径膨胀、收敛慢和配置风险;这些是设计目标的结果,不是简单实现疏忽。
给 customer/provider/peer 三类边画出 import–select–export 表,判断一个从 peer 学到的前缀能否再通告给另一个 peer,并解释经济原因。
检查:AS 收到 AS_PATH 中含自己 ASN 的更新时,通常怎样处理?
收到两条到同一 prefix 的 BGP route 后,先按 policy 过滤,再按属性选择,最后只 export 允许传播的 route。
收到两条到同一 prefix 的 BGP route 后,先按 policy 过滤,再按属性选择,最后只 export 允许传播的 route。
检查:判断一个实现分支是否必要,最有力的问题是什么?
检查:若把这一机制移到完全不同的网络位置,首先应重新确认什么?
构造一条“更短但政策不可接受”的 route。
答案必须出现 packet/message、local state/table、触发 event、after state 与 output;只给定义不算完成。
对象是前缀 203.0.113.0/24。AS65030 是源;AS65020 同时从 customer 65030 和 peer 65040 学到路径;AS65010 是 65020 的 provider。固定关系后,逐步追踪候选、选择和导出。
| 事件 | 输入状态 | 变化 | 输出 |
|---|---|---|---|
| 65030 originate | 本地前缀 | Loc-RIB=[65030] | 向 provider 65020 通告 |
| 65020 收 customer route | from 65030 | 高 local-pref;选择 [65030] | 可向 customer、peer、provider 导出 |
| 又收 peer route | [65040,65030] | customer local-pref 仍胜 | best 不变 |
| 65020—65030 失效 | withdraw customer route | 重新选择 peer route | peer-learned route 只向 customers 导出 |
不变量:选择回答“我走哪条路”,导出回答“我愿意替谁搬运流量”;两者不是同一个排序函数。
65020 从 peer 65040 学到目的地,却向 peer 65050 导出,于是成为两者之间未约定的免费 transit。连通性仍“正确”,商业 invariant 已破坏;valley-free 约束把经济关系编码进传播策略。
| 状态 | 事件 | 变化 | 不变量 |
|---|---|---|---|
| Adj-RIB-In | UPDATE/withdraw | 保存或撤销邻居候选 | 候选有来源 |
| Loc-RIB | 候选集变化 | 重跑决策 | 每前缀当前 best |
| Adj-RIB-Out | best/policy 变化 | 按邻居生成不同输出 | 不泄漏 transit |
| AS-PATH | 路径含自身 ASN | 拒绝 | 无 AS 环 |
检查:从 peer 学到的路通常向谁传播?
检查:UPDATE 的 AS-PATH 已含自己 ASN,首先应?
检查:较长 customer route 胜出,直接原因最可能是?
正文是 CourseStack 的中文解释与重新绘制的教学例子;官方页面负责课程原始定义,历史仓库只提供你的实现证据。