跳到内容

第 4 卷 / 第 9 章 / 第 4 课

9.4 路由控制面:RIP、OSPF 与 BGP ​

转发面逐包查询 FIB,控制面则学习、计算和选择路由。RIP、OSPF 与 BGP 传播的是可达性和路径信息;路由协议会话正常,并不保证某个业务包已经能送达。本课比较三类协议,并沿故障发现、选路和表项下发检查收敛过程。

1. 候选路由选优与逐包查表是两步 ​

路由器可能同时从直连、静态配置、OSPF 和 BGP 获得同一前缀。操作系统或厂商实现按路由来源优先级、协议度量和策略选择活动路由;路由信息库(RIB)保存选路所需信息,转发信息库(FIB)用于快速查找。

包查表通常按目的地址做最长前缀匹配。/24 比 /16 更具体,即使它们来自不同协议、使用不同度量。因此不能说“度量最小的路由总会胜出”,不同协议的度量也不能直接比较。

等价多路径(ECMP)可以安装多个符合条件的下一跳,再按流散列。逐包轮流转发可能引入乱序;常见实现选择按流分配,但散列字段、成员变化后的重分配和一致性保证需要查具体实现。

2. 距离向量:从邻居的距离推导自己的距离 ​

距离向量路由器从邻居收到目的地与距离,再加上到邻居的代价。Bellman–Ford 关系式概括了这一过程,其中 v 遍历 x 的邻居:

text
D_x(y) = min_v { cost(x, v) + D_v(y) }

假设 A 原本直接到达目标,B 经 A 到达目标。A 的直连失效后,如果把 B 尚未更新的通告当成替代路线,就可能选择 B,而 B 仍选择 A。双方继续根据对方的旧消息提高距离,形成“计数到无穷”。水平分割、毒性逆转和触发更新可减少这类问题,但不保证任意拓扑都立即收敛。

RIPv2 使用跳数,15 是最大可达度量,16 表示不可达。它通常每 30 秒周期更新,并使用 224.0.0.9 多播向邻居发送 RIPv2 更新,兼容模式等配置可能改变发送方式。这些是协议规定与部署选项,不能统称为随意的实现细节。RFC 2453

3. 链路状态:建立区域拓扑,再独立计算 ​

OSPF 路由器建立邻接,使用链路状态通告(LSA)描述状态,并维护链路状态数据库(LSDB),独立计算最短路径优先(SPF)树。

区域限制完整拓扑的传播范围,但不同 LSA 的泛洪范围不同。OSPFv2 的 Router-LSA 和 Network-LSA 在区域内传播;Type 5 AS-external-LSA 通常跨区域泛洪,Stub 区域等有例外。不能把“区域内拓扑数据库”理解为“所有 LSA 都只能在本区域”。RFC 2328 §12

区域边界路由器(ABR)向其他区域通告汇总或可达性信息,骨干区域 0 连接区域间路由。普通区域内的路由器无需知道其他区域的全部链路。区域划分因此影响规模、故障影响范围与排查方式。

OSPF cost 由配置或实现的计算规则决定,不是实时测出的链路延迟。参考带宽若未统一配置,不同高速链路可能得到相同 cost。认证、被动接口、区域类型、汇总和默认路由都需要与拓扑一起设计。

4. 收敛要经过多道处理 ​

链路失效后的过程包括:

  1. 通过物理信号、Hello/Dead 计时器或 BFD 发现故障;
  2. 更新邻接和链路状态;
  3. 生成并传播 LSA 或其他路由更新;
  4. 重新计算 SPF 或应用选路策略;
  5. 完成 RIB 选优和 FIB 下发;
  6. 处理邻居更新不同步时可能出现的短暂环路或黑洞。

Dijkstra 算法运行很快,不代表整次中断也同样短。快速重路由可以预先准备备用下一跳,在控制面完全收敛前恢复部分转发,但必须检查备用路径是否无环、是否有足够容量。

5. BGP 传播自治系统间的可达性与策略 ​

BGP 对等体通过 TCP 交换网络层可达信息(NLRI)和路径属性。eBGP 连接不同自治系统(AS),iBGP 在同一 AS 内分发 BGP 路由,路由反射器可以减少全互联会话数量。

常见属性包括:

  • LOCAL_PREF:表达本 AS 选择出站路径的偏好,通常值越高越优先;
  • AS_PATH:记录通告经过的 AS 路径,用于环路检查和策略,并不是路径真实性的密码学证明;
  • ORIGIN:描述路由信息最初如何进入 BGP,不是源 AS 的身份凭证;
  • MED:向相邻 AS 表达多个入口的偏好,通常值较低者优先,但比较范围受策略限制;
  • NEXT_HOP:数据转发下一跳,需要能通过底层路由递归解析;
  • Community 与 Large Community:附加策略标签。

BGP 有明确的状态机、报文处理、环路检查和选路流程。本地策略可以优先于 AS_PATH 长度;厂商默认的平局处理也不完全相同。因此一张厂商选路顺序表,不能当作整个互联网唯一的规则。

6. 路由泄漏、劫持与 RPKI 源验证 ​

路由劫持可能是未获授权的 AS 宣告他人前缀;路由泄漏常是把本不应继续传播的路由传给另一方。两者都可能吸引错误流量、形成绕路或黑洞。

RPKI 的路由源授权(ROA)声明获准宣告的源 AS、前缀及最大长度。验证器先检查这些签名对象,再向路由器提供已验证的前缀与源 AS 信息(VRP)。路由源验证(ROV)据此将通告分为 Valid、Invalid 或 NotFound;处理策略仍由运营者配置。

假设本地只有一条 VRP:192.0.2.0/24,最大长度 25,源 AS 64496。下面使用文档地址和文档 AS 号演算,不发布真实路由:

通告前缀源 AS验证结果原因
192.0.2.0/2564496Valid覆盖范围、长度和源 AS 都匹配
192.0.2.0/2664496Invalid超过允许的最大长度
192.0.2.0/2464497Invalid有覆盖记录,但源 AS 不匹配
198.51.100.0/2464496NotFound没有覆盖该前缀的 VRP

若有多个覆盖记录,只要至少一条完全匹配即可为 Valid;不能只取最长的一条记录。NotFound 表示缺少覆盖记录,不等于已经验证可信,也不等于已判定劫持。RFC 6811 §2

ROV 不验证整条 AS_PATH,也不能阻止所有路由泄漏。前缀过滤、最大前缀数限制、IRR/RPKI 数据、对等策略、监控和事故协作仍需结合使用。

7. 从 RIB 一直查到实际转发 ​

  1. 协议数据库或 Adj-RIB-In 是否收到目标前缀?
  2. 入站策略是否拒绝或改写了它?
  3. 候选为什么没有成为活动路由?
  4. 下一跳是否可解析?
  5. 活动路由是否成功写入 FIB 或硬件?
  6. 邻居解析或邻接是否完成?
  7. 数据面计数器与抓包是否符合控制面的结果?

BGP 会话显示 Established,不证明目标前缀已接收、选中并下发;路由表存在一项,也不证明硬件和邻居表能实际转发。排查需要走完这条链。

8. 验收问题 ​

  1. 控制面、RIB、FIB 与转发面分别承担什么?
  2. 距离向量为什么会计数到无穷?
  3. OSPF 区域限制了哪些信息,哪些 LSA 可以跨区域?
  4. 为什么最短 AS_PATH 不一定胜出?
  5. ROV 表中的 Invalid 与 NotFound 有何区别,它们为什么不能验证整条路径?

参考 ​

Built with VitePress | Software Systems Atlas