📚 第七章 路由协议
📄 一句话概括

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 秒实验

  1. 想一下:为什么不能给 BGP 用链路状态算法?
  2. 想一下:中型企业为什么同时跑 OSPF 和 BGP,而不统一成一个?
  3. 想一下:标称「支持 OSPF」的低端设备,可能有什么坑?

常见误区

  1. 以为「三种协议是替代关系」。 它们管不同范围,一个网络里同时跑两种是常态。
  2. 以为「RIP 慢是性能问题」。 是「定时全量发」这个机制决定的,换实现改不了。
  3. 以为「重分发是自动的、无损的」。 两边度量体系不同,硬换会失真,必须配过滤。
自测三问(点开对答案) 1. 三种协议的「认识方式」分别是什么? —— **只认识邻居、认识全局、认识路径。** 2. 为什么 AS 之间不能用链路状态? —— **要把内部拓扑告诉全世界**,既是安全问题也是规模问题。 3. 选型问哪三个问题? —— **网多大、要不要跟外部交换、设备撑不撑得住。**

下一节开始逐个展开,先看最小的那个:RIP。

相关笔记