
在前面的网络层文章中,我们已经学习了距离向量与链路状态两种路由选择思想,也讨论过 OSPF 与 BGP 的分工。但如果只记住"OSPF 用于自治系统内部,BGP 用于自治系统之间",仍然缺少一块重要拼图:
自治系统内部为什么还需要专门的路由协议?RIP 与 OSPF 分别怎样交换信息、计算路由,又为什么更大规模的网络通常更倾向于 OSPF?
本篇作为网络层补充,围绕内部网关协议展开。我们会先厘清自治系统、IGP、EGP 与路由算法之间的关系,再沿着原始笔记的顺序,分别理解 RIP 的距离向量机制和 OSPF 的链路状态机制,最后把二者放在同一张表中比较。
一、为什么互联网要采用分层次的路由选择?
互联网由数量庞大的网络、路由器和组织共同组成。如果要求每台路由器掌握整个互联网的全部拓扑,并与所有其他路由器交换完整信息,会产生两个问题。
1. 规模问题
互联网中的网络数量非常大。全局拓扑越复杂,路由器需要保存和计算的信息就越多,路由协议交换信息所占用的链路带宽也越大。
如果任何局部变化都要传播给全网所有路由器,整个系统将很难扩展。
2. 管理与策略问题
不同运营商、企业和机构希望独立管理自己的网络。它们不一定愿意向外界公开内部拓扑,也可能拥有不同的链路度量、设备配置和路由策略。
因此,互联网不会被当成一张完全扁平的网络,而是被划分为许多自治系统(AS)。
二、自治系统、IGP 与 EGP
1. 什么是自治系统?
自治系统的英文是 Autonomous System,简称 AS。可以把它理解为:
- 自治系统是在单一技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量。
一个自治系统内部可以包含许多路由器和多个网络,也可以进一步划分区域。但从其他自治系统的视角看,它应当表现出相对一致的对外路由策略。

例如,一家大型运营商、云服务商或大型机构管理的网络,都可能构成一个或多个自治系统。
2. IGP 与 EGP 是两类协议
按照作用范围,路由选择协议可以分为两类:
| 类别 | 中文名称 | 作用范围 | 常见协议 |
|---|---|---|---|
| IGP | 内部网关协议 | 一个自治系统内部,也称域内路由 | RIP、OSPF、IS-IS |
| EGP | 外部网关协议 | 不同自治系统之间,也称域间路由 | BGP |
这里的"网关"是历史术语,可以近似理解为承担路由功能的设备。需要特别注意:
IGP 和 EGP 是协议类别,不是两个具体协议。
一个自治系统可以在内部运行 OSPF,另一个自治系统可以在内部运行其他 IGP;只要边界路由器能够通过 BGP 交换域间可达信息,不同自治系统无需使用相同的内部路由协议。
3. 作用范围、算法思想和具体协议不要混为一谈
学习路由协议时,经常会看到 IGP、EGP、距离向量、链路状态、RIP、OSPF、BGP 等术语。它们不在同一分类维度中。
| 分类维度 | 回答的问题 | 主要概念 |
|---|---|---|
| 作用范围 | 在哪里使用? | IGP、EGP |
| 算法思想 | 怎样获得和计算路由? | 距离向量、链路状态、路径向量 |
| 协议实现 | 实际运行什么协议? | RIP、OSPF、IS-IS、BGP |
它们之间的典型对应关系是:
text
RIP = IGP + 距离向量思想
OSPF = IGP + 链路状态思想
BGP = EGP + 路径向量思想
BGP 的路径向量思想与距离向量有一定渊源,但 BGP 的目标是执行跨自治系统的策略路由,不能简单把它等同于 RIP 式距离向量协议。
本篇重点讨论 IGP 中的 RIP 与 OSPF。
三、RIP:用跳数衡量距离
RIP 的全称是 Routing Information Protocol,中文通常译为路由信息协议。它是早期得到广泛应用的内部网关协议,最大的特点是机制简单。
RIP 使用距离向量思想。每台路由器不需要掌握整个自治系统的完整拓扑,只需维护自己到各目的网络的距离和下一跳,并与邻居交换这些信息。
1. RIP 如何定义"距离"?
RIP 使用跳数作为路由度量。按照常见教材中的描述:
- 到直连网络的距离记为 1;
- 每多经过一台路由器,距离增加 1;
- 最大有效距离是 15;
- 距离 16 表示目的网络不可达。
例如:
text
R1 ── R2 ── R3 ── 目的网络 N
如果 R3 到直连网络 N 的 RIP 距离为 1,那么 R2 学到的距离为 2,R1 学到的距离为 3。
将 16 定义为无穷大可以限制路由环路造成的计数增长,但也直接限制了 RIP 的网络规模。因此,RIP 更适合跳数较少的小型网络。
2. 跳数少不等于实际传输效果最好
RIP 认为"好路由"就是跳数更少的路由。它不会仅凭 RIP 跳数直接反映链路带宽、时延、拥塞程度或可靠性。
假设有两条路径:
text
路径 A:经过 3 台路由器,每段链路带宽较高
路径 B:经过 2 台路由器,每段链路带宽较低
RIP 会选择路径 B,因为它的跳数更少,即使路径 A 在实际传输中可能拥有更低时延或更高吞吐量。
这说明路由协议中的"最短"必须结合度量理解。RIP 的最短是跳数最少,而不一定是时间最短、带宽最高或综合代价最低。
如果到同一目的网络存在多条等价路径,具体实现还可能使用等价负载均衡,把流量分配到多条相同度量的路径上。
3. RIP 与谁交换、交换什么、何时交换?
理解 RIP 可以抓住三个问题:
| 问题 | RIP 的做法 |
|---|---|
| 与谁交换? | 直接相邻的 RIP 路由器 |
| 交换什么? | 自己知道的路由信息,典型教材模型中可理解为路由表 |
| 何时交换? | 周期性交换,常见默认周期为 30 秒;拓扑变化时也可触发更新 |
当网络拓扑发生变化时(可以等到下一个时间间隔,也可以直接发) ,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
路由器刚开始工作时,只知道自己到直接相连的几个网络的距离为1 。每个路由器仅和相邻路由器周期性地交换并更新路由信息。
经过若干次交换和更新后,所有的路由器最终都会知道到达本自治系统内任何网络的最短距离和下一跳路由器的地址,称为收敛。
RIP 通常通过 UDP 传送路由消息,使用端口 520。由于它运行在 UDP 之上,一些教材会从封装层次把 RIP 称为应用层协议;但从功能上看,它服务于网络层控制平面,负责产生 IP 转发所需的路由信息。
4. RIP 路由表保存什么?
每个路由表项都有三个关键字段:<目的网络 N,目前的最短距离d,下一跳路由器地址X>
含义分别是:
- 目的网络 N:这条路由要到达的网络;
- 距离 d:当前到达 N 的 RIP 跳数;
- 下一跳 X:转发数据时首先交给哪台相邻路由器。
RIP 不要求每台路由器保存完整拓扑图。路由器主要依赖邻居告诉自己的距离,再结合本地信息选择下一跳。
例子:

四、RIP 怎样根据邻居信息更新路由表?
RIP 的更新思想来自分布式 Bellman-Ford 算法。
假设路由器 R 收到相邻路由器 X 的更新,其中写着:X 到目的网络 N 的距离为 d。站在 R 的角度,要先到达 X,再从 X 前往 N,所以候选距离为:
text
R 经 X 到 N 的候选距离 = d + 1
如果结果达到或超过 16,就按不可达处理。
1. 基本更新规则
路由器可以按下面的逻辑处理候选路由:
- 如果本地没有到 N 的路由,就加入"经 X 到 N"的新表项;
- 如果本地到 N 的当前下一跳就是 X,就使用 X 最新通告的距离更新,即使新距离变长;
- 如果当前下一跳不是 X,而经 X 的候选距离更短,就改为选择 X;
- 如果候选距离与已有距离相同,具体实现可以保留原路由,也可能建立等价路径。
第 2 条非常重要。如果当前路由原本就是从 X 学到的,那么 X 对这条路径的新判断也应被接受,否则本地可能长期保留已经失效的旧信息。
2. 例子:具体的更新流程
已知路由器 R3 和 R4 互为相邻路由器,现在R4收到R3发来的RIP更新报文,R4据此更新自己的路由表

R4收到的R3发来的的路由表:

先把R3发来路由表进行修改:距离都+1(理解为R4要经过R3完成到其他目的网络),下一跳都改为R3

把修改后的R3路由表和R4路由表进行比较,对应更新R4 的路由表

3. 超时与不可达
在常见 RIP 实现中,如果较长时间没有收到邻居对某条路由的有效更新,路由器会把该路由视为失效。教材中常见的失效时间是 180 秒,并把距离置为 16。
这些定时器的作用是避免路由器永久保留已经不存在的路径,但具体定时行为还会涉及失效计时、垃圾回收、触发更新等机制。
五、为什么说 RIP"好消息传播得快,坏消息传播得慢"?
如果某台路由器发现了一条更短路径,它会把较小的距离告诉邻居。邻居采用后继续传播,较优路由通常能逐跳扩散。
但当链路失效时,某些路由器可能尚未收到故障消息,仍向邻居通告旧路径。邻居又可能误以为可以通过它到达目的网络,从而形成相互依赖的错误判断。
例如:
text
R1 ── R2 ── 网络 N
假设 R2 原本直达 N,R1 通过 R2 到达 N。N 失效后,如果 R1 还在通告旧信息,R2 可能短暂误以为可以"经 R1"到达 N;随后二者的距离不断增加,直到达到 16。这就是距离向量协议中典型的计数到无穷问题。
实际 RIP 会采用触发更新、水平分割、毒性逆转、抑制定时器等方式缓解路由环路和慢收敛,但不能从根本上改变它只依赖邻居距离信息的工作方式。
RIP 的主要优点
- 原理直观,实现相对简单;
- 路由器不必保存完整网络拓扑;
- 在规模较小、结构简单的网络中容易部署。
RIP 的主要局限
- 最大有效距离只有 15,扩展能力有限;
- 只使用跳数,无法细致反映链路质量;
- 周期性交换路由信息会产生持续开销;
- 网络故障后可能出现环路和慢收敛;
- 网络规模越大,路由信息交换和稳定过程越不理想。
这些问题促使人们采用更适合较大自治系统的链路状态协议,其中最典型的就是 OSPF。
六、OSPF:让路由器获得区域拓扑图
OSPF 的全称是 Open Shortest Path First,中文通常译为开放最短路径优先。
- "开放"表示它是公开标准,而不是某个厂商私有的路由协议;
- "最短路径优先"表示它基于链路状态信息,使用 Dijkstra 最短路径优先算法计算路由。
与 RIP 不同,OSPF 路由器不只是听邻居说"某个网络离我有多远",而是将自己的链路状态通告给区域内其他路由器。各路由器收集这些信息后,构建链路状态数据库,再独立计算最短路径树。
1. OSPF 的链路状态是什么?
链路状态主要描述:
- 本路由器与哪些网络或路由器相连;
- 相应链路的代价是多少;
- 这些链路当前是否可用。
OSPF 的代价可以结合带宽等因素配置。不同厂商和网络可以采用自己的参考带宽与规划策略,因此不能把 OSPF 的"最短路径"简单理解为经过路由器最少。
在一些设备的传统默认配置中,接口代价会根据"参考带宽 ÷ 接口带宽"计算,但参考带宽通常可以调整。网络管理员应保持自治系统内的度量规划一致。
2. OSPF 不使用 TCP 或 UDP
OSPF 报文直接封装在 IP 数据报中,IP 首部的协议号为 89。
text
IP 首部|OSPF 报文
它不像 RIP 那样通过 UDP 端口传送,也不存在 OSPF 的 TCP 或 UDP 端口号。
七、OSPF 的完整工作过程
OSPF 可以用一条清晰的主线理解:
text
发现邻居
↓
交换链路状态信息
↓
形成一致的链路状态数据库
↓
运行 Dijkstra 算法
↓
生成路由表
下面逐步展开。
1. 通过 Hello 分组发现和维护邻居
OSPF 路由器会在接口上发送 Hello 分组,用于发现相邻路由器、协商必要参数并维护邻居关系。
在常见广播网络的默认配置中,Hello 间隔可能是 10 秒,若超过相应的死亡间隔仍未收到邻居 Hello,则认为邻居失效。典型死亡间隔为 40 秒,若40秒未收到 来自邻居路由器的问候(Hello)分组,则认为邻居路由器不可达。
这些数值并非所有网络类型和配置下都固定不变,理解重点是:OSPF 通过周期性 Hello 检测邻居是否仍然可达。
2. 生成链路状态通告 LSA
每台 OSPF 路由器会产生链路状态通告,即 LSA。它描述本路由器相关的链路状态,例如直连网络、邻居关系和链路代价。
LSA 可以理解为一条"拓扑事实",而不是一张由某台邻居计算好的完整路由表。
LSA中包含以下两类链路状态信息:
- 直连网络的链路状态信息。
- 邻居路由器的链路状态信息
其实就是本身的链路状态信息

3. 通过 LSU 可靠洪泛 LSA
LSA 被封装在链路状态更新分组 (Link State Update,LSU)中,采用可靠的洪泛法 发送。可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发 ,但要发送一次确认。
所谓洪泛,是指路由器收到新的链路状态信息后,除来源方向外,继续向其他相关邻居转发,使信息最终传播到区域中的所有路由器。
OSPF 的链路状态洪泛具有确认和序列控制机制:
- 收到 LSU 后会进行确认;
- 重复或过期的 LSA 不应被当成新拓扑反复采用;
- LSA 序列号等信息用于区分新旧版本;
- 拓扑变化时可触发新的链路状态更新。
4. 建立链路状态数据库 LSDB
使用OSPF的每一个路由器都有一个链路状态数据库 (Link State Database,LSDB),用于存储链路状态通告LSA。
通过各路由器洪泛发送封装有各自链路状态通告LSA的链路状态更新分组LSU,各路由器的链路状态数据库LSDB最终将达到一致。它们的观察起点不同,但所依据的拓扑数据库应当同步。

这与 RIP 有明显区别:
- RIP 主要保存邻居告诉自己的"到目的网络有多远";
- OSPF 通过 LSA 形成区域拓扑数据库,知道链路如何连接及其代价。
5. 运行 Dijkstra 算法生成路由表
使用OSPF的各路由器,基于LSDB,采用Dijkstra算法进行最短路径优先计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。

路由器再根据这棵树提取到各目的网络的下一跳和总代价,安装相应路由。
当各路由器拥有一致且稳定的 LSDB 时,分别计算得到的最短路径彼此协调,可以避免距离向量协议中典型的稳定态路由环路。不过在拓扑变化和收敛期间,短暂的不一致仍可能影响转发,不能把任何动态路由协议描述成任何时刻绝无环路。
八、OSPF 的五种分组类型
OSPF 使用五类分组协同完成邻居维护、数据库同步和链路状态更新。
| 分组类型 | 英文名称 | 主要作用 |
|---|---|---|
| Hello | Hello | 发现邻居并维护邻居关系 |
| 数据库描述 | Database Description | 提供本地 LSDB 内容的摘要 |
| 链路状态请求 | Link State Request | 请求缺少或需要更新的 LSA |
| 链路状态更新 | Link State Update | 携带一个或多个 LSA |
| 链路状态确认 | Link State Acknowledgement | 确认收到链路状态更新 |
数据库同步过程可以简化理解为:
- 邻居先通过数据库描述分组比较"双方各自有哪些信息";
- 如果发现自己缺少某些 LSA,就发送链路状态请求;
- 对方使用链路状态更新分组返回详细 LSA;
- 接收方发送链路状态确认。
这样做比每次无差别发送完整拓扑数据库更有针对性。
为了确保链路状态数据库与全网的状态保持一致,OSPF 还规定每隔一段时间(如30分钟)要刷新一次数据库中的链路状态 。因为一个路由器的链路状态只涉及与相邻路由器的连通状态,与整个网络的规模并无直接关系,所以当互联网规模很大时,OSPF 要比RIP 好得多。每次RIP发送,发送的就是整个路由表,而OSPF发送,都是发送的变化部分的信息
九、为什么 OSPF 要划分区域?
链路状态协议要求路由器传播 LSA、维护 LSDB 并运行最短路径算法。如果一个巨大自治系统中的任何链路变化都要在整个 AS 内洪泛,数据库规模和计算开销仍会不断增长。
为提高可扩展性,OSPF 可以把一个自治系统划分成多个区域。划分区域不是把 AS 拆成多个新自治系统,而是在同一个 OSPF 域中限制详细链路状态信息的传播范围。

1. 主干区域 Area 0
OSPF 使用主干区域 Area 0 连接其他常规区域。跨区域流量通常需要通过主干区域转发,区域设计应围绕主干连通性展开。
2. 常见路由器角色
| 角色 | 含义 |
|---|---|
| 区域内路由器 | 所有 OSPF 接口都属于同一区域 |
| 区域边界路由器 ABR | 同时连接主干区域与一个或多个其他区域 |
| 主干路由器 | 至少有一个接口位于 Area 0 |
| 自治系统边界路由器 ASBR | 将其他路由域或外部路由引入 OSPF 域 |
一个路由器可以同时具有多个角色。例如,连接 Area 0 与普通区域的 ABR 也是主干路由器。
3. 划分区域带来的权衡
区域化的主要优势是:
- 把详细 LSA 洪泛限制在较小范围;
- 减少每台路由器需要保存的拓扑信息;
- 降低拓扑变化引发的 SPF 计算影响;
- 通过路由汇总等设计提高大型网络的可扩展性。
代价是协议与网络规划变得更复杂。区域边界、主干连通、地址规划和路由汇总都需要合理设计。
十、RIP 与 OSPF 的核心区别
把二者放在一起,可以更清楚地看出距离向量和链路状态两种思想如何落地。
| 对比项 | RIP | OSPF |
|---|---|---|
| 使用范围 | 自治系统内部 | 自治系统内部 |
| 算法思想 | 距离向量 | 链路状态 |
| 主要度量 | 跳数 | 可配置链路代价 |
| 掌握的信息 | 到各目的网络的距离与下一跳 | 区域链路状态及拓扑数据库 |
| 信息交换对象 | 直接邻居 | 与邻居建立关系,并把 LSA 洪泛到相应区域 |
| 典型更新方式 | 周期性路由更新,并可触发更新 | 拓扑变化触发 LSA 洪泛,并周期性刷新状态 |
| 路径计算 | 分布式 Bellman-Ford 更新 | 基于 LSDB 运行 Dijkstra SPF |
| 最大距离 | 15 跳,16 表示不可达 | 没有 RIP 式 15 跳限制 |
| 收敛特征 | 故障时可能慢收敛和计数到无穷 | 通常收敛较快,但协议机制更复杂 |
| 传输封装 | 使用 UDP,端口 520 | 直接封装在 IP 中,协议号 89 |
| 扩展方式 | 更适合小型简单网络 | 支持区域化,更适合较大网络 |
| 协议开销 | 实现简单,但周期更新会持续占用资源 | 邻接、LSDB 和 SPF 更复杂,变化更新更有针对性 |
需要避免一个过度简化的说法:
RIP 每次一定发送"全世界的完整路由表",OSPF 永远只发送一个很小的变化字段。
更准确的理解是:RIP 的典型工作方式以周期性向邻居通告路由条目为主;OSPF 在邻接建立时要进行数据库同步,稳定后主要通过 LSA 传播拓扑变化,并会周期性刷新链路状态。二者的根本差异是交换"距离结果"还是同步"链路状态事实",而不仅是报文大小不同。
十一、结合一个自治系统理解二者
假设某企业拥有多个园区网络,所有园区由同一网络团队统一管理,构成一个自治系统。
使用 RIP 时
每台路由器主要告诉邻居:"我到各个园区网络分别有多少跳。"邻居把距离加 1 后与本地路由比较,逐步形成路由表。
这种方式容易理解,但如果园区数量很多、链路带宽差异明显,或者故障后要求快速恢复,仅依赖跳数和邻居通告就显得不足。
使用 OSPF 时
路由器先建立邻居关系,再把各自链路状态作为 LSA 在区域内传播。区域中的路由器形成一致 LSDB,并各自计算到其他网络的最低代价路径。
如果企业规模继续扩大,还可以划分多个 OSPF 区域,把详细拓扑变化限制在区域内,通过 Area 0 连接各区域。
访问自治系统外部网络时
RIP 或 OSPF 负责企业 AS 内部的路由。到达边界后,自治系统之间的可达性和策略选择通常由 BGP 处理。
可以把二者的配合概括为:
text
BGP:决定从哪个自治系统边界走出去
IGP:把数据从内部路由器送到选定的边界
因此,IGP 与 BGP 不是互相替代,而是分别解决域内和域间问题。
十二、总结
内部网关协议的核心知识链路:
- 互联网通过自治系统实现分层次管理,避免所有路由器维护完整全球拓扑;
- IGP 用于自治系统内部,EGP 用于自治系统之间,它们都是协议类别;
- RIP 是基于距离向量的 IGP,以跳数为度量,通过邻居间的路由通告逐步收敛;
- RIP 原理简单,但存在 15 跳限制、度量单一、慢收敛和计数到无穷等问题;
- OSPF 是基于链路状态的 IGP,通过 Hello、LSA 洪泛、LSDB 同步和 Dijkstra 算法生成路由;
- OSPF 直接封装在 IP 中,并通过区域化提高大型自治系统的扩展能力;
- RIP 与 OSPF 负责域内路由,BGP 负责域间可达性与策略,三者不能只按算法名称简单归类。
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!