CS 168 · LECTURE 09 · 2026-09-24 · 路由

自治系统与 BGP 策略

BGP 不追求一个全世界统一的最短路径;它让独立自治系统在商业关系和安全边界下选择、出口并传播可接受的路径。

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

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

本章核心问题

当每个网络的目标函数不同,互联网为什么仍能得到足够的全球可达性?

1 · 自治系统与关系

自治系统(AS)是共同管理和路由策略下的网络集合。客户向 provider 付费获得全球可达,peer 常为彼此客户交换流量而不免费转运第三方流量。商业关系形成 export policy 的基础。

一个常见稳定策略是:客户学到的路可向所有邻居通告;peer/provider 学到的路通常只向客户通告。这样 AS 不会无偿成为两个上游之间的 transit。

2 · 路径向量与环路检测

BGP update 携带 AS_PATH。AS 收到包含自身 ASN 的路径可立即拒绝,从控制平面防止 AS 级环路。与 DV 的单一距离不同,完整路径还支持策略判断与归因,但状态更大。

路径属性包括 LOCAL_PREF、AS_PATH、MED、next hop 等,选择过程有明确优先级。最短 AS_PATH 只是其中一步,通常排在本地策略之后。

3 · 导入、选择、导出三阶段

import policy 先决定邻居通告是否可接受并可改写属性;decision process 在本地候选中选 best path;export policy 再决定把选中路线告诉谁。这三步分开能解释“我知道一条路但不使用”与“我使用但不向你宣传”。

排查 BGP 时必须标注观察点:邻居是否发送、入口是否过滤、候选是否败选、出口是否拒绝。只看最终 FIB 无法定位策略在哪一步生效。

4 · 热土豆与策略代价

同等高层策略下,AS 可能选择离本地最近的出口,把流量尽快交给下一个 AS,称 hot-potato routing。这降低自身内部成本,却可能增加端到端路径长度。

BGP 的目标是可扩展、自治且策略可表达,而不是全局最优。由此会产生路径膨胀、收敛慢和配置风险;这些是设计目标的结果,不是简单实现疏忽。

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

闭卷推演

给 customer/provider/peer 三类边画出 import–select–export 表,判断一个从 peer 学到的前缀能否再通告给另一个 peer,并解释经济原因。

检查:AS 收到 AS_PATH 中含自己 ASN 的更新时,通常怎样处理?

机制工作台:before → event → after

Before / local state

收到两条到同一 prefix 的 BGP route 后,先按 policy 过滤,再按属性选择,最后只 export 允许传播的 route。

Event / after / output

收到两条到同一 prefix 的 BGP route 后,先按 policy 过滤,再按属性选择,最后只 export 允许传播的 route。

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

检查:若把这一机制移到完全不同的网络位置,首先应重新确认什么?

Explain It Yourself

构造一条“更短但政策不可接受”的 route。

自检方法

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

Worked Trace:一条前缀如何穿过策略边界

对象是前缀 203.0.113.0/24。AS65030 是源;AS65020 同时从 customer 65030 和 peer 65040 学到路径;AS65010 是 65020 的 provider。固定关系后,逐步追踪候选、选择和导出。

事件输入状态变化输出
65030 originate本地前缀Loc-RIB=[65030]向 provider 65020 通告
65020 收 customer routefrom 65030高 local-pref;选择 [65030]可向 customer、peer、provider 导出
又收 peer route[65040,65030]customer local-pref 仍胜best 不变
65020—65030 失效withdraw customer route重新选择 peer routepeer-learned route 只向 customers 导出

不变量:选择回答“我走哪条路”,导出回答“我愿意替谁搬运流量”;两者不是同一个排序函数。

Counterfactual:把 peer 路由导出给另一个 peer

65020 从 peer 65040 学到目的地,却向 peer 65050 导出,于是成为两者之间未约定的免费 transit。连通性仍“正确”,商业 invariant 已破坏;valley-free 约束把经济关系编码进传播策略。

Misconception Analysis:BGP 总选最短 AS-PATH

为什么会误解
路径向量显式携带 AS-PATH,容易套用最短路模型。
反例
三跳 customer path 可胜过一跳 peer path,因为 local-pref 可先决定。
正确模型
导入策略先形成属性,本地决策选 best,导出策略再为每个邻居决定是否传播。

State / Event / Invariant Map

状态事件变化不变量
Adj-RIB-InUPDATE/withdraw保存或撤销邻居候选候选有来源
Loc-RIB候选集变化重跑决策每前缀当前 best
Adj-RIB-Outbest/policy 变化按邻居生成不同输出不泄漏 transit
AS-PATH路径含自身 ASN拒绝无 AS 环

Policy Checks

检查:从 peer 学到的路通常向谁传播?

检查:UPDATE 的 AS-PATH 已含自己 ASN,首先应?

检查:较长 customer route 胜出,直接原因最可能是?

Explain It Yourself

  1. 画一条 valley-free 和一条违规路径。
  2. 闭卷复述 UPDATE 从 Adj-RIB-In、Loc-RIB 到每邻居 Adj-RIB-Out 的路径。

一手资料

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