RIP、OSPF、BGP 不是三个竞争方案,它们管的是不同范围。 选错范围才是问题——RIP 进大网、BGP 进机房,都是灾难。
7.3.1 和 7.3.2 讲了两种算法,这一节把它们和市场里的协议对上号。 这张对比表是全章的索引,后面 7.4 到 7.7 逐条展开。
一、三行表格说清全章
把三种协议摆在一起,只要三行:
| 协议 | 算法 | 度量 | 范围 |
|---|---|---|---|
| RIP | 距离向量 | 跳数(≤15) | 小网、AS 内 |
| OSPF | 链路状态 | 代价(按带宽) | AS 内 |
| BGP | 路径向量 | AS 路径加策略 | AS 之间 |
第二列是「它怎么认识这张网」:距离向量只认识邻居,链路状态认识全局,路径向量认识「路径」。 认识方式不同,能防的错也不同。 第三列决定了它们的上限: RIP 的度量是跳数,超过 15 就到不了—— 所以它压根不适合大网,不是「性能差」,是「设计上就不支持」。 OSPF 的度量是带宽,能表达「这条路快」,所以能选优。 BGP 的度量是「经过哪些 AS」,本质是「政治地图」而不是「地图」。
二、路径向量是第三种答法
BGP 既不是距离向量也不是链路状态,它传的是「完整路径」——一串 AS 号。 所以它既能算长短(路径里有几个 AS),又能防环(路径里出现了自己就丢掉)。 「为什么不能给 BGP 用链路状态」: 那意味着每个 AS 都要把内部拓扑告诉全世界—— 这既是安全问题(暴露内网结构),也是规模问题(全球图太大)。 所以 AS 之间只交换「我这儿有哪些网段」,不交换「我内部长什么样」。 「封装」这个词在这里用得最到位。
三、一个真实的组网长什么样
中型企业的典型配置:机房内部跑 OSPF,出口跟两家运营商跑 BGP。 OSPF 负责「内部哪条路快」,BGP 负责「出去之后走谁家」。 为什么不统一:OSPF 不懂「AS 路径」,也没法表达「优先走 A 运营商」这种策略; BGP 收敛太慢,内部几十台路由器用它,抖一下就全网等。 两个协议各管一段,是这个尺度的最优解。 还有一个细节叫「路由重分发」:BGP 学来的路由要注入 OSPF,OSPF 的网段要通告给 BGP。 这一步是最容易出错的地方—— 因为两边对「度量」的理解完全不同,一种是跳数,一种是 AS 路径,硬换会失真。 所以重分发通常要配过滤,只放该放的进去。
四、选型的三个判断
别背表,问三个问题就够了:
一、网有多大? 十来台以内 RIP 够用,几十台以上 OSPF。 二、要不要跟外部交换? 要,就得上 BGP。 三、设备撑不撑得住? 几十 KB 内存的老设备只能 RIP。
第三个问题常被忽略:OSPF 要存拓扑图,一条链路状态几十字节,一千条就是几十 KB, 再加上邻接表、SPF 树,实际占用是好几倍。 有些低端设备标称「支持 OSPF」,但一开就内存告警——因为它是「能跑」,不是「够用」。 这一点在选设备时要问清楚「满配路由表多大」。
五、动手 Demo:三种路由协议各自管哪一段
把三种协议的算法、度量、范围和收敛特点并排放。 重点看「用在哪」这一列的分界。
rows = [
('RIP', '距离向量', '跳数(最多 15)', '小网、教学', '30 秒一次,慢'),
('OSPF', '链路状态', '代价(按带宽)', '一个 AS 内部', '事件触发,快'),
('BGP', '路径向量', 'AS 路径加策略', 'AS 之间', '只报变化,极省'),
]
for r in rows:
print('%-5s %-9s %-14s %-13s %s' % r)
实跑输出:
--------------------------------------------------------------------
三种路由协议各自管哪一段
--------------------------------------------------------------------
**RIP、OSPF、BGP 不是「三个竞争方案」**,**它们管的是不同范围**——**选错范围才会出问题。**
协议 算法 度量 用在哪 收敛
----------------------------------------------------------------------------------------------
**RIP** **距离向量** **跳数(最多 15)** **小网、教学** **30 秒一次,慢**
**OSPF** **链路状态** **代价(按带宽)** **一个 AS 内部** **事件触发,快**
**BGP** **路径向量** **AS 路径加策略** **AS 之间** **只报变化,极省**
**第二列是「它怎么认识这张网」**:**距离向量只认识邻居,链路状态认识全局,路径向量认识「路径」。**
**认识方式不同,能防的错也不同。**
**第三列决定了它们的上限**:
**RIP 的度量是跳数,跳数超过 15 就到不了**——
**所以它压根不适合大网,不是「性能差」,是「设计上就不支持」。**
**OSPF 的度量是带宽,能表达「这条路快」,所以能选优。**
**BGP 的度量是「经过哪些 AS」,本质是「政治地图」而不是「地图」。**
**一个常见的组合**:**机房内部跑 OSPF,出口跟运营商跑 BGP。**
**OSPF 负责「内部哪条路快」,BGP 负责「出去之后走谁家」。**
**两件事,两个协议,互不替代。**
第二列是「它怎么认识这张网」:距离向量只认识邻居,链路状态认识全局,路径向量认识「路径」。 认识方式不同,能防的错也不同。 最后一列容易被误读成「性能对比」,其实不是: RIP 的「慢」不是实现问题,是「定时全量发」这个机制决定的; BGP 的「极省」也不是优化,是「只报变化」这个机制决定的。 所以「RIP 慢」不是换个实现就能改的——要快,就得换机制,也就是换协议。
30 秒实验
- 想一下:为什么不能给 BGP 用链路状态算法?
- 想一下:中型企业为什么同时跑 OSPF 和 BGP,而不统一成一个?
- 想一下:标称「支持 OSPF」的低端设备,可能有什么坑?
常见误区
- 以为「三种协议是替代关系」。 它们管不同范围,一个网络里同时跑两种是常态。
- 以为「RIP 慢是性能问题」。 是「定时全量发」这个机制决定的,换实现改不了。
- 以为「重分发是自动的、无损的」。 两边度量体系不同,硬换会失真,必须配过滤。
自测三问(点开对答案)
1. 三种协议的「认识方式」分别是什么? —— **只认识邻居、认识全局、认识路径。** 2. 为什么 AS 之间不能用链路状态? —— **要把内部拓扑告诉全世界**,既是安全问题也是规模问题。 3. 选型问哪三个问题? —— **网多大、要不要跟外部交换、设备撑不撑得住。**下一节开始逐个展开,先看最小的那个:RIP。
- ☐ (本节完,下一节 7.4.1 广播路由控制信息)