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 秒实验
- 想一下:为什么「付费转接」的链路更快,也不该优先走它?
- 想一下:BGP 为什么用 TCP 而不是自己实现可靠传输?
- 想一下:IS-IS 跑在链路层,为什么运营商反而更喜欢?
常见误区
- 以为「OSPF 比 RIP 新,所以更好」。 RIP 的问题是 15 跳上限,网小的时候它反而更简单。
- 以为「EGP 是一类协议,有很多个」。 今天实际上只有 BGP,历史上的 EGP 早就废弃了。
- 以为「收敛越快越好」。 跨组织的系统怕抖,慢一点但不反复,比快但乱晃好。
自测三问(点开对答案)
1. IGP 和 EGP 的分界线是什么? —— **AS 的边界。** AS 内部用 IGP,AS 之间用 EGP。 2. 为什么 AS 之间不按「最快」选路? —— **因为运营商之间有合同**,「客户流量」和「对等流量」的成本不同,要按策略走。 3. BGP 为什么要「稳」不要「快」? —— **外部路由一抖,全球几百万条路由跟着重算**,乱的代价远大于慢的代价。下一节开始拆算法:先看「只认识邻居」的距离向量。
- ☐ (本节完,下一节 7.3.1 距离向量算法)