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

AS 内部用 IGP,AS 之间用 EGP,两者的目标根本不同。 IGP 找「最快」,EGP 找「最合适」——因为中间夹着合同。

📝 本节和前面几节的关系

7.2.2 讲清了 AS 是什么,这一节讲「边界两边为什么必须换协议」。 这一节是 7.4 到 7.6 的总纲:RIP 和 OSPF 是 IGP,BGP 是 EGP。

一、分界线就是 AS 的边界

在 AS 内部跑的叫 IGP(内部网关协议),在 AS 之间跑的叫 EGP(外部网关协议)。 「网关」这个词在这里指的是路由器——所以「内部网关协议」就是「AS 内部路由器之间说的话」。 这个分类不是学术上的洁癖,是被需求逼出来的: AS 内部的目标是「把包最快送到」,AS 之间的目标是「按合同把包送到该走的那条线」。 两个目标不一样,优化函数就不一样,硬要用一个协议兼顾,两边都做不好。 举一个具体的冲突:AS 内部有一条 10 毫秒的链路和一条 3 毫秒的链路,IGP 当然选 3 毫秒的。 但对外的两条上游,一条是「付费转接」、一条是「免费对等」,就算付费那条更快, 也不该把免费那条的流量挪过去——因为那是花钱买速度。 这种判断,跳数和带宽都表达不了。

二、IGP 的三个典型代表

IGP 不是只有 OSPF,主流的有三个,各有各的活法:

协议 算法 度量 典型场景
RIP 距离向量 跳数 小网、教学、老设备
OSPF 链路状态 代价 企业网、园区网主流
IS-IS 链路状态 代价 运营商骨干常用

第二行和第三行经常被拿来对比:它们算法一样、思路一样,差别在「跑在哪一层」。 OSPF 跑在 IP 之上(协议号 89),IS-IS 直接跑在链路层。 这个差别带来的后果是:IS-IS 不怕 IP 层被攻击——所以运营商更喜欢它。 企业网则更喜欢 OSPF,因为它跟 IP 一起配,理解起来更直观。 这张表最该记住的是「RIP 在第三行之外」: 它和另外两个不是一个量级的东西——跳数上限 15 就注定了它进不了大网。 所以看到「RIP 和 OSPF 哪个好」这种问题,正确的回答是「看网多大」, 而不是「OSPF 更新所以更好」。

三、EGP 只有一个:BGP

EGP 这个类别,今天实际上只有 BGP 一个成员。 历史上真有一个协议就叫 EGP,早就废弃了。 现在说 EGP,基本等于说 BGP。 BGP 的设计目标跟 IGP 完全不同:它不追求「算得快」,追求「说得准、控得住」。 全球路由表大约一百万条,十万个 AS 互相通告, 在这个规模下,「每次变化都全量重算」是不可想象的。 所以 BGP 只报变化(增量更新),而且邻居之间先建 TCP 连接(端口 179),靠 TCP 保证可靠, 不用自己造轮子。 「用 TCP」这个选择很聪明: BGP 的通告必须可靠(丢一条就可能让一大片网络不可达),但自己实现重传、排序、流控太费事。 TCP 全都有,而且已经跑了几十年,稳定。 代价是「BGP 会话建立慢一点」——但 AS 之间的邻居关系一旦建立就长期保持,这点代价无所谓。

四、为什么「稳」比「快」重要

AS 内部断了,用户立刻有感觉:网页打不开、视频卡住,投诉电话马上就来。 所以 IGP 必须快,秒级甚至毫秒级收敛。 AS 之间换条路,用户基本无感:延迟从 30 毫秒变成 50 毫秒,多数人察觉不到。 但如果外部路由「抖来抖去」——一会儿走这条、一会儿走那条,几百万条路由一起晃, 全球的路由器都要反复重算,那就不是「慢一点」的问题了。 所以 BGP 宁可慢,也要稳:它有各种抑制机制(route flap damping 之类), 就是「坏消息先压一压再采信」。 这个取舍在工程上很常见:内部系统追求「响应快」,跨组织的系统追求「不乱动」。 理解了这一层,就明白为什么 BGP 的配置那么啰嗦—— 那些啰嗦的条目,全是为了「在变化面前不乱」。

五、动手 Demo:IGP 和 EGP 是两个工种

把两类协议的五个维度摆在一起,看它们的取舍怎么分岔。 重点在「优化什么」这一行。

rows = [
    ('目标',     '找到最短的路',        '找到能走且不绕圈的路'),
    ('优化什么', '跳数、带宽、延迟',    '策略、商业关系、信任'),
    ('规模',     '几十到几千台',        '全球约十万个 AS'),
    ('收敛要求', '快(秒级)',          '稳(慢一点没关系)'),
    ('典型协议', 'RIP、OSPF、IS-IS',    'BGP'),
]
for r in rows:
    print('%-10s %-20s %s' % r)

实跑输出:

--------------------------------------------------------------------
IGP 和 EGP 是两个工种
--------------------------------------------------------------------
**路由协议分两类,分界线是「AS 的边界」。**
**AS 内部用的叫 IGP,AS 之间用的叫 EGP。**
**它们的目标根本不同,所以不能用同一个协议。**

  对比项           IGP(AS 内部)           EGP(AS 之间)
  -----------------------------------------------------------------------
  **目标**         **找到最短的路**         **找到「能走且不绕圈」的路**
  **优化什么**     **跳数、带宽、延迟**     **策略、商业关系、信任**
  **规模**         **几十到几千台**         **全球约十万个 AS**
  **收敛要求**     **快(秒级)**           **稳(慢一点没关系)**
  **典型协议**     **RIP、OSPF、IS-IS**     **BGP**

**第二行是最容易被忽略的**:**AS 之间不选「最快」,选「最合适」。**
**因为运营商之间的互联是有合同的**——**「客户流量」和「对等流量」的结算方式完全不同。**
**所以 BGP 里能写策略:「这个前缀别从我这条线走」。**
**IGP 里没有这种概念,它只认代价。**

**第四行解释了为什么 BGP 收敛慢还能忍**:
**AS 内部断了,用户立刻有感觉,所以要快;**AS 之间换条路,慢几十秒用户基本无感,
**但要是「抖来抖去」,全球路由表就会跟着晃。**
**稳比快重要。**

第二行是最容易被忽略的:AS 之间不选「最快」,选「最合适」。 因为运营商之间的互联是有合同的——「客户流量」和「对等流量」的结算方式完全不同。 所以 BGP 里能写策略:「这个前缀别从我这条线走」。 IGP 里没有这种概念,它只认代价。 第四行解释了为什么 BGP 收敛慢还能忍: AS 内部断了,用户立刻有感觉,所以要快;AS 之间换条路,慢几十秒用户基本无感。 但要是「抖来抖去」,全球路由表就会跟着晃,所以稳比快重要。

30 秒实验

  1. 想一下:为什么「付费转接」的链路更快,也不该优先走它?
  2. 想一下:BGP 为什么用 TCP 而不是自己实现可靠传输?
  3. 想一下:IS-IS 跑在链路层,为什么运营商反而更喜欢?

常见误区

  1. 以为「OSPF 比 RIP 新,所以更好」。 RIP 的问题是 15 跳上限,网小的时候它反而更简单。
  2. 以为「EGP 是一类协议,有很多个」。 今天实际上只有 BGP,历史上的 EGP 早就废弃了。
  3. 以为「收敛越快越好」。 跨组织的系统怕抖,慢一点但不反复,比快但乱晃好。
自测三问(点开对答案) 1. IGP 和 EGP 的分界线是什么? —— **AS 的边界。** AS 内部用 IGP,AS 之间用 EGP。 2. 为什么 AS 之间不按「最快」选路? —— **因为运营商之间有合同**,「客户流量」和「对等流量」的成本不同,要按策略走。 3. BGP 为什么要「稳」不要「快」? —— **外部路由一抖,全球几百万条路由跟着重算**,乱的代价远大于慢的代价。

下一节开始拆算法:先看「只认识邻居」的距离向量。

相关笔记