16. Calculation of AS-external Routes (AS外部路由计算)
本章详细描述如何计算 AS 外部路由,这些路由由 AS-external-LSA (Type 5) 通告。这是 OSPF 路由计算的最后阶段。
章节概述 (Chapter Overview)
AS 外部路由
- 源自其他 AS 的路由
- 由 ASBR 通告
- 使用 Type 5 LSA
- 在整个 AS 内泛洪(除末梢区域)
16.1 AS 外部路由概述 (Overview)
外部路由来源
典型来源
- BGP 路由
- 静态路由
- 其他 IGP(如 RIP、IS-IS)
- 直连网络(重分布)
外部路由类型
Type 1 External (E1)
- Metric 包含内部代价和外部代价
- Metric = 到达 ASBR 的代价 + 外部 Metric
- 可比较的完整路径代价
Type 2 External (E2) - 默认
- Metric 仅为外部代价
- 内部代价仅在外部代价相同时比较
- 更常用
16.2 计算前提条件 (Prerequisites)
必须先完成的计算
顺序要求
- 区域内路由(SPF)
- 区域间路由(Summary-LSA)
- 到 ASBR 的路由(Type 4 LSA)
- 然后才能计算外部路由
到 ASBR 的路由
获取方式
- 区域内路由(ASBR 在同一区域)
- 区域间路由(通过 Type 4 Summary-LSA)
- 如果无法到达 ASBR,跳过该 ASBR 的外部路由
16.3 处理 AS-external-LSA (Processing Type 5 LSAs)
步骤 1:基本验证
检查项
- LSA 校验和正确
- Advertising Router 可达(有路由)
- 目的网络不在 LSA 生成的区域内
步骤 2:确定 ASBR 路由
查找到 ASBR 的路由
asbr_route = lookup_route(advertising_router)
if asbr_route == NULL:
跳过此 LSA(ASBR 不可达)
ASBR 路由类型
- 区域内路由(最优)
- 区域间路由(通过 Type 4)
16.4 计算外部路由代价 (Calculating Cost)
Type 1 External 计算
公式
总代价 = 到达 ASBR 的代价 + LSA 中的外部 Metric
比较
- 直接比较总代价
- 代价小的优先
- 代价相同保留 ECMP
示例
ASBR 在距离 10 的位置
外部 Metric = 20
Type 1 总代价 = 10 + 20 = 30
Type 2 External 计算
主要代价:外部 Metric
次要代价:到达 ASBR 的代价
比较规则
- 首先比较外部 Metric
- 外部 Metric 小的优先
- 外部 Metric 相同时
- 比较到达 ASBR 的代价
- 内部代价小的优先
示例
路径 A: 外部 Metric = 100, 内部代价 = 10
路径 B: 外部 Metric = 100, 内部代价 = 20
路径 C: 外部 Metric = 50, 内部代价 = 50
排序: C > A > B
16.5 转发地址处理 (Forwarding Address)
转发地址概念
Forwarding Address 字段
- Type 5 LSA 中的可选字段
- 指定实际的转发目的地
- 可以是 0.0.0.0 或非零地址
处理规则
情况 1:Forwarding Address = 0.0.0.0
- 流量转发到 ASBR(Advertising Router)
- 使用到 ASBR 的路由
情况 2:Forwarding Address ≠ 0.0.0.0
- 流量转发到 Forwarding Address
- 必须有到 Forwarding Address 的区域内路由
- 如果无区域内路由,跳过此 LSA
转发地址计算示例
Type 5 LSA:
Network: 192.0.2.0/24
Advertising Router: 10.0.0.1 (ASBR)
Forwarding Address: 10.1.1.1
Metric: 20
处理:
1. 查找到 10.1.1.1 的路由(必须是区域内路由)
2. 如果找到,使用该路由的下一跳
3. 如果未找到,忽略此 LSA
16.6 确定下一跳 (Determining Next Hop)
下一跳选择逻辑
流程图
Type 5 LSA
↓
Forwarding Address == 0 ?
↓ No ↓ Yes
查找到 FA 的路由 查找到 ASBR 的路由
↓ ↓
使用 FA 路由的下一跳 使用 ASBR 路由的下一跳
↓ ↓
└────→ 外部路由下一跳 ←────┘
多下一跳(ECMP)
等价路径
- 到 ASBR 或 FA 有多条等价路径
- 保留所有等价下一跳
- 外部路由继承这些下一跳
16.7 路由比较和选择 (Route Comparison)
与现有路由比较
查找现有路由
existing_route = lookup_route(destination)
比较规则
1. 优先级比较
- 区域内路由 > 区域间路由 > Type 1 外部 > Type 2 外部
- 外部路由不能覆盖区域内或区域间路由
2. 相同类型比较
Type 1 vs Type 1
- 比较总代价
- 代价小的优先
- 代价相同保留 ECMP
Type 2 vs Type 2
- 比较外部 Metric
- 外部 Metric 相同比较内部代价
- 完全相同保留 ECMP
Type 1 vs Type 2
- Type 1 总是优于 Type 2
- 无论代价如何
16.8 外部路由标签 (External Route Tag)
路由标签用途
Route Tag 字段
- 32 位整数
- OSPF 协议不使用
- 供外部应用使用
典型用途
- 标识路由来源 AS
- 实现路由策略
- 防止路由环路(重分布场景)
标签传播
透明传播
- OSPF 不修改 Route Tag
- ABR 和 ASBR 透传
- 可用于端到端策略
16.9 外部路由计算示例 (Calculation Example)
拓扑示例
AS 100 (OSPF)
|
R1 (ABR, cost to backbone = 10)
|
R2 (ASBR, cost from R1 = 5)
|
External Network: 203.0.113.0/24
Type 5 LSA 示例
LSA 内容
LS Type: AS-external-LSA (5)
Advertising Router: R2 (ASBR)
Network: 203.0.113.0/24
Metric Type: Type 2 (E=1)
Metric: 100
Forwarding Address: 0.0.0.0
Route Tag: 0
R1 的计算过程
步骤 1:查找到 ASBR 的路由
- ASBR = R2
- Cost to R2 = 5(区域内路由)
步骤 2:计算外部路由代价
- 类型 = Type 2
- 外部 Metric = 100
- 内部代价 = 5
步骤 3:确定下一跳
- Forwarding Address = 0.0.0.0
- 下一跳 = 到 R2 的下一跳
步骤 4:安装路由
Route:
Destination: 203.0.113.0/24
Type: Type 2 External
Cost: 100 (外部) + 5 (内部)
Next-hop: R2
Route Tag: 0
16.10 特殊情况处理 (Special Cases)
默认路由
0.0.0.0/0
- 可以通过 Type 5 LSA 通告
- 作为默认网关
- 优先级最低
主机路由
/32 路由
- 可以通告主机路由
- Network Mask = 255.255.255.255
超网路由
CIDR 聚合
- 支持任意长度掩码
- 支持 CIDR 超网
16.11 末梢区域处理 (Stub Area Handling)
末梢区域限制
Type 5 LSA 不进入末梢区域
- 末梢区域不接受外部路由
- ABR 不将 Type 5 LSA 泛洪到末梢区域
默认路由替代
ABR 通告默认路由
- 使用 Type 3 Summary-LSA
- 通告 0.0.0.0/0
- 末梢区域路由器使用默认路由访问外部网络
16.12 NSSA 外部路由 (NSSA External Routes)
NSSA 特殊处理
Type 7 LSA (NSSA-external)
- 在 NSSA 内部使用
- 类似 Type 5,但仅在 NSSA 内传播
- ABR 将 Type 7 转换为 Type 5
Type 7 到 Type 5 转换
转换规则
- ABR 执行转换
- 选择最优 Type 7(如果有多个 ABR)
- P-bit 控制是否转换
技术要点总结 (Technical Summary)
关键概念
-
两种外部路由类型
- Type 1: 可比较的总代价
- Type 2: 外部代价优先(默认)
-
转发地址
- 灵活的流量转发控制
- 优化路由路径
- 必须有区域内路由
-
路由优先级
- 区域内 > 区域间 > E1 > E2
- 确定性的路由选择
实现要点
计算顺序
- 必须在区域内/区域间路由之后
- 需要到 ASBR 的路由
转发地址处理
- 正确的路由查找
- 仅接受区域内路由
- 下一跳正确计算
路由比较
- 严格的优先级
- 正确的代价比较
- ECMP 支持
外部路由计算流程 (Calculation Flowchart)
开始处理 Type 5 LSA
↓
验证 LSA 有效性
↓
查找到 ASBR 的路由 → 未找到 → 跳过此 LSA
↓ 找到
Forwarding Address == 0 ?
↓ No ↓ Yes
查找到 FA 的区域内路由 使用 ASBR 路由
↓ ↓
未找到 → 跳过 找到路由
↓ ↓
└────→ 计算外部路由代价 ←────┘
↓
Type 1: 总代价 = 内部 + 外部
Type 2: 主代价 = 外部, 次代价 = 内部
↓
与现有路由比较
↓
┌────────────┬────────────┬────────────┐
更优 相同 更差
↓ ↓ ↓
替换路由 添加ECMP 保留现有路由
↓ ↓ ↓
└────────→ 完成 ←────────┘
参考资料 (References)
- 完整原文:RFC 2328 Section 16.4
- NSSA:RFC 3101
- Route Tag 应用:RFC 1403
注意 (Note):外部路由计算是 OSPF 路由计算的最后阶段。正确理解 Type 1 和 Type 2 的区别,以及转发地址的处理,对于正确实现 OSPF 至关重要。