动态路由协议
为什么需要动态路由
静态路由像手写通讯录:适合联系人少、变化慢的场景。但互联网有数十亿设备、数百万条前缀,手工配置不现实。更麻烦的是:链路断了、新网段加了、度量变了,静态路由不会自动调整。
动态路由协议让路由器之间自动交换路由信息,自适应网络变化。
自治系统(AS)与协议分类
互联网被划分为数万个自治系统(Autonomous System),每个 AS 是一个独立管理的网络(如一个 ISP、一所大学、一家企业)。
| 类型 | 协议 | 范围 | 核心算法 |
|---|---|---|---|
| IGP(内部网关协议) | RIP、OSPF、IS-IS | AS 内部 | 距离向量 / 链路状态 |
| EGP(外部网关协议) | BGP | AS 之间 | 路径向量 |
类比:IGP 是城市内部交通规划(由市政府管),BGP 是城市之间高速公路规划(由省政府/国家管)。
RIP:最简单的距离向量协议
原理
每个路由器维护一张表:到每个目的网络的距离(跳数,Hop Count)。
- 初始:知道自己直连网络,距离 0
- 周期性(30 秒)向邻居广播整张表
- 收到邻居的表后,更新:如果邻居到某目的距离 +1 < 自己当前距离,就更新
RIP 的致命缺陷
- 最大 15 跳:16 表示不可达,网络直径受限
- 慢收敛:链路断了,坏消息传得慢(计数到无穷问题)
- 度量粗糙:只看跳数,不看带宽。1 跳卫星链路和 1 跳 100G 光纤等价
生活例子:RIP 像"问路"——你问路人 A 到机场多远,A 说"我问了 B,B 说 3 站",但没人知道每站是地铁还是步行。
RIPv2 改进
- 支持 CIDR/VLSM(RIPv1 不支持子网掩码)
- 支持组播更新(224.0.0.9)
- 支持认证
现状:RIP 已淘汰,仅用于教学或极小型网络。
OSPF:链路状态协议的王者
原理
每个路由器:
- 发现邻居(Hello 包,10 秒一次)
- 测量到邻居的代价(Cost = 参考带宽 / 接口带宽)
- 构造 LSA(Link State Advertisement),描述自己的连接状态
- 泛洪 LSA 到整个区域(Area),所有路由器收到后构建统一的 LSDB(Link State Database)
- 每台路由器独立运行 Dijkstra 最短路径算法,计算到所有节点的最优路径
分层设计:区域(Area)
大型网络中,LSA 泛洪会消耗大量资源。OSPF 把 AS 划分为区域:
- Area 0(骨干区域):所有区域必须直接连接到骨干
- 普通区域:只知道自己区域内的详细路由,区域间路由通过 ABR(Area Border Router)汇总
- 特殊区域:Stub Area(不接收外部 AS 路由)、NSSA(Not-So-Stubby Area)
生活例子:OSPF 像"每个城市画自己的地图,然后交给省会汇总"。北京不需要知道广州每条街道,只需要知道"去广州走京广高速"。
OSPF 的区域设计是互联网可扩展性的经典范例。所有区域必须直接连接到 Area 0(骨干),ABR 负责在区域间汇总路由。普通区域只知道本区域内部路由 + 经过 ABR 汇总的区域间路由,LSA 泛洪被严格限制在区域内,大幅降低了大型网络的协议开销。
OSPF 代价计算
Cost = 参考带宽 / 接口带宽
默认参考带宽 100 Mbps,这意味着:
- 100M 接口 Cost=1
- 1G 接口 Cost=1(因为 100/1000=0.1,取整为 1)
- 10G 接口 Cost=1
问题:现代网络全是 10G/100G,默认参考带宽导致所有链路 Cost=1,无法区分。需要手动调整参考带宽或接口 Cost。
OSPF 安全
- 明文认证:密码明文传输,不安全
- MD5 认证:RFC 2328,用预共享密钥生成 MD5 摘要
- HMAC-SHA:RFC 5709,更安全的哈希算法
攻击风险:伪造 LSA 注入,导致路由器计算错误路径,流量被劫持或黑洞。
IS-IS:OSPF 的"孪生兄弟"
IS-IS(Intermediate System to Intermediate System)最初为 OSI 网络设计,后被 IP 网络采用。
| 特性 | OSPF | IS-IS |
|---|---|---|
| 设计初衷 | IP 专用 | OSI 通用,后适配 IP |
| 封装 | IP 协议 89 | 直接封装在数据链路层 |
| 区域边界 | 路由器(ABR) | 链路(不同区域在链路上划分) |
| 扩展性 | 支持数千路由器 | 支持更大规模(ISP 偏好) |
| 配置复杂度 | 较复杂 | 相对简单 |
大型 ISP(如中国电信、AT&T)偏好 IS-IS,因为扩展性更好。
BGP:互联网的"外交协议"
BGP(Border Gateway Protocol,RFC 4271)是 AS 之间的路由协议,互联网的事实标准。
为什么 IGP 不能用于 AS 之间?
- 信任问题:AS 之间是竞争/合作关系,不会把内部拓扑暴露给对方
- 策略问题:ISP A 可能不想帮 ISP B 转发某些流量(政治、商业、成本原因)
- 规模问题:全球路由表已超 90 万条 IPv4 前缀,IGP 无法承载
BGP 的核心:路径向量
BGP 不传播"距离",而是传播路径(经过哪些 AS):
前缀 8.8.8.0/24 的路径:AS 15169
前缀 1.1.1.0/24 的路径:AS 13335
前缀 202.100.1.0/24 的路径:AS 4134 → AS 4809 → AS 100
路由器收到多条到同一前缀的路径后,按策略选择最优(不是最短)。
BGP 选路的第一原则是 Local Preference(本地优先级),这是 AS 内部网络管理员可以控制的策略属性。即使路径 B 经过的 AS 数更多(路径更长),只要 LocalPref 最高,就会被优先选择。这体现了 BGP 的设计哲学:策略优先于最短路径,因为 AS 之间的路由涉及商业关系、成本、政治等复杂因素,绝非"最短即最优"。
BGP 选路原则(简化)
- 最高 Local Preference(本地优先级,内部策略)
- 最短 AS Path(经过的 AS 数最少)
- 最低 Origin Type(IGP < EGP < Incomplete)
- 最低 MED(Multi-Exit Discriminator,类似度量)
- eBGP 优于 iBGP(外部邻居优于内部邻居)
- 最低 IGP Cost 到下一跳
- 最早建立的路由
- 最低 Router ID
BGP 安全:路由劫持
攻击者伪造 BGP 宣告,声称"我拥有 1.1.1.0/24",导致全球流量被引到恶意 AS。
防御:
- RPKI(Resource Public Key Infrastructure):用密码学验证 AS 是否有权宣告某个前缀
- ROV(Route Origin Validation):路由器检查 RPKI 证书,拒绝无效宣告
- BGP MD5:RFC 2385,邻居间 TCP 连接认证
- GTSM(Generalized TTL Security Mechanism):RFC 5082,eBGP 邻居通常直连,TTL=255,如果收到 TTL<254 的包,丢弃(防止远程伪造)
本篇小结
- IGP 用于 AS 内部:RIP(已淘汰)、OSPF(企业主流)、IS-IS(ISP 主流)
- OSPF 是链路状态协议,Dijkstra 算法,分层区域设计
- BGP 用于 AS 之间,路径向量,策略优先于最短路径
- 路由协议安全:OSPF MD5/SHA 认证、BGP RPKI/ROV/MD5/GTSM
- 现代互联网:企业内部 OSPF/IS-IS,运营商之间 BGP
动手实践
查看 Linux 路由表,观察动态路由协议注入的路由(如果有):
ip route | grep -E "proto ospf|proto bgp|proto rip"在 Packet Tracer 中搭建 3 路由器 OSPF 网络,观察:
- Hello 包(10 秒间隔)
- LSA 泛洪
- Dijkstra 计算后的路由表
思考:为什么 BGP 不采用"最短路径优先",而是复杂的策略选路?如果全球都用 OSPF 互联,会出现什么问题?
查询真实 BGP 路由表大小:
# 如果有 BGP 路由器权限 show ip bgp summary # 全球 IPv4 前缀约 90 万条(2024 年数据)