路由信息协议 RIP
路由信息协议(Routing Information Protocol,RIP)是内部网关协议 IGP 中最先得到广泛应用的协议。RIP 是一种分布式的基于距离向量的路由选择协议(算法原理见 4.4.1)。
真题考过跳数 16 的含义(2010)、RIP 报文用什么协议封装(2017)、“坏消息传播得慢”(2016)、收敛过程和优缺点(2024)。RIP 的计算题只有一种:给出本路由器的路由表和邻居发来的路由表,求更新后的路由表。 三条规则里最容易漏的是”下一跳相同就无条件替换”。
机制
RIP 的规定
- 网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录,即距离向量。
- RIP 使用跳数(Hop Count,或称距离)来衡量到达目的网络的距离。规定从一路由器到直接连接的网络的距离定义为 1;而每经过一个路由器,距离就加 1。
- RIP 认为好的路由就是它通过的路由器数量少,即距离短或跳数少。
- RIP 允许一条路径最多只能包含 15 个路由器。因此距离等于 16 时表示网络不可达。可见 RIP 只适用于小型互联网。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是防止分组不断在环路上循环,减少网络拥塞的可能性(RIP 中跳数为 16 的含义 2010 年考过)。
- 每个路由表项都有三个关键字段:<目的网络
,距离 ,下一跳路由器地址 >。
RIP 的特点
RIP 的每个路由器都要不断与其他路由器交换信息,下面三个特点非常重要:
| 问题 | RIP 的回答 |
|---|---|
| 和谁交换信息 | 仅和直接相邻的路由器交换信息 |
| 交换什么信息 | 本路由器所知道的全部信息,即自己的路由表 |
| 何时交换信息 | 按固定的时间间隔(通常为 30 秒)交换路由信息;当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息 |
路由器刚开始工作时,只知道自己到直接相连的几个网络的距离为 1。每个路由器仅和相邻路由器周期性地交换并更新路由信息。经过若干次交换和更新后,所有的路由器最终都会知道到达本自治系统内任何网络的最短距离和下一跳路由器的地址,称为收敛。
RIP 是应用层协议,它使用 UDP 传送数据(端口 520)(封装 RIP 报文所采用的协议 2017 年考过)。RIP 选择的路径不一定是时间最短的,但一定是具有最少的路由跳数,因为它是根据最少跳数进行路径选择的。
RIP 的距离向量算法
对每个相邻路由器发送来的 RIP 报文,执行如下步骤:
- 对地址为
的相邻路由器发来的 RIP 报文,先修改该报文中的所有项目:把”下一跳”字段中的地址都改为 ,并把所有”距离”字段的值加 1。 - 对修改后的 RIP 报文中的每个项目,执行如下步骤:
- 若原来的路由表中没有目的网络
,则把该项目添加到路由表中(表明这是新的目的网络)。 - 否则,若原来的路由表中有目的网络
,且下一跳路由器的地址是 ,则用收到的项目替换原路由表中的项目(因为要以最新的消息为准)。 - 否则,若原来的路由表中有目的网络
,且下一跳路由器的地址不是 ,则若收到的项目中的距离 小于路由表中的距离,进行更新。 - 否则,什么也不做。
- 若原来的路由表中没有目的网络
- 若 180 秒(RIP 默认超时时间)还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离设置为 16(表示不可达)。
- 返回。
flowchart TD S["邻居 X 发来的每一项:<br/>下一跳改为 X,距离加 1"] --> Q1{"表中有目的网络 N?"} Q1 -- 没有 --> Add["添加"] Q1 -- 有 --> Q2{"原表项的下一跳是 X?"} Q2 -- 是 --> Rep["替换(以最新消息为准,距离变大也替换)"] Q2 -- 否 --> Q3{"新距离 < 原距离?"} Q3 -- 是 --> Upd["更新"] Q3 -- 否 --> No["不变"]
例(RIP 的收敛过程 2024 年考过):路由器 R6 和 R4 互为相邻路由器,R6 收到 R4 发来的路由更新信息。
| R6 原路由表 | R4 发来的路由表 | ||||
|---|---|---|---|---|---|
| 目的网络 | 距离 | 下一跳 | 目的网络 | 距离 | 下一跳 |
| Net2 | 3 | R4 | Net1 | 3 | R1 |
| Net3 | 4 | R5 | Net2 | 4 | R2 |
| … | … | … | Net3 | 1 | 直接交付 |
先把 R4 发来的路由表中各项的距离都加 1,并把下一跳路由器都改为 R4,得到 (Net1, 4, R4)、(Net2, 5, R4)、(Net3, 2, R4),逐行与 R6 的路由表比较:
- Net1 在 R6 的表中没有,添加:(Net1, 4, R4)。
- Net2 在表中有,且下一跳也是 R4,替换:(Net2, 5, R4)——距离从 3 增大到 5,仍然要更新。
- Net3 在表中有,但下一跳不同,比较距离:新距离 2 小于原来的 4,更新:(Net3, 2, R4)。
好消息传播得快,坏消息传播得慢
设路由器 R1 与 R2 相邻(链路距离 1),都采用 RIP,初始时 R1 到网络
好消息:某时刻 R1 的某个端口检测到”到
坏消息(RIP”坏消息传播得慢”的分析 2016 年考过):某时刻 R1 的某个端口检测到”
| 轮次 | R1 到 | R2 到 |
|---|---|---|
| 故障前 | 4 | 5 |
| 1 | 6 | 7 |
| 2 | 8 | 9 |
| … | … | … |
| 最终 | 16 | 16 |
RIP 的优缺点
RIP 的优点(2024):
- 实现简单、开销小、收敛过程较快。
- 若一个路由器发现了更短的路由,则这种更新信息就传播得很快,在较短时间内便可被传至所有路由器,俗称”好消息传播得快”。
RIP 的缺点:
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。
- 当网络出现故障时,路由器之间需反复多次交换信息才能完成收敛,要经过较长时间才能将故障消息传送到所有路由器(慢收敛现象),俗称”坏消息传播得慢”。
计算模板
RIP 路由表更新
- 改写邻居的表:邻居
发来的每一项,距离加 1,下一跳改为 。 - 逐项比较:没有 → 添加;下一跳是
→ 无条件替换;下一跳不是 → 更短才更新。 - 若邻居发来的某项距离已是 16,加 1 后仍记为 16(不可达),按上面的规则同样处理:原表中该项下一跳正是
时,要改为 16。
边界
直接连接的网络距离为 1,不是 0。 这是王道(谢希仁)的规定,计算时从 1 开始数。
跳数 16 表示不可达,最多只能包含 15 个路由器。 问”RIP 允许的最大距离”答 15。
下一跳相同就替换,哪怕距离变大。 邻居是这条路由的唯一信息来源,它说变坏了就是变坏了。例子中 Net2 从 3 变成 5 就是这种情况。
RIP 是应用层协议,用 UDP;OSPF 是网络层协议,直接用 IP;BGP 是应用层协议,用 TCP。 三者一起考(2017)。
水平分割等方法可以缓解”坏消息传播得慢”。 路由器不把从某个邻居学到的路由再告诉这个邻居,上例中 R2 就不会把”经 R1 到
口径差异:RIP 的版本与邻居的范围
教材口径:RIP 仅和直接相邻的路由器交换全部路由表,每 30 秒一次,距离 16 为不可达。
标准口径:RIP 有两个版本。RIPv1 的路由表项不带子网掩码,只支持分类地址,更新用广播发送;RIPv2 在表项中携带子网掩码,因而支持变长子网掩码和 CIDR,更新改用多播地址 224.0.0.9 发送,并增加了鉴别。IPv6 下对应的是 RIPng。考题中出现带掩码的 RIP 路由表,默认就是 RIPv2 的行为。
考试按教材的规定作答。
对照速查
| 说法 | 对错 |
|---|---|
| RIP 是基于距离向量的路由选择协议 | ✅ |
| RIP 中直接连接的网络距离为 0 | ❌(为 1) |
| RIP 中距离为 16 表示网络不可达 | ✅(2010) |
| RIP 路由器和自治系统内所有路由器交换信息 | ❌(仅和相邻路由器) |
| RIP 路由器交换的是整个路由表 | ✅ |
| RIP 只在网络拓扑变化时交换信息 | ❌(每 30 秒定期交换,拓扑变化时也及时通告) |
| RIP 使用 TCP 传送 | ❌(UDP,端口 520,2017) |
| RIP 选择的路径一定是时间最短的 | ❌(跳数最少) |
| 收到下一跳相同的更新,距离变大就不更新 | ❌(无条件替换) |
| RIP 好消息传播得快,坏消息传播得慢 | ✅(2016、2024) |
考点
- 跳数度量;直连为 1;16 不可达,最多 15 个路由器(2010)
- 仅和邻居、交换整表、每 30 秒
- 应用层、UDP 520(2017)
- 距离向量更新三规则(2024)
- 好消息快、坏消息慢(2016);优缺点(2024)
链接
- 🏠 返回总览:计算机网络第 4 章:网络层总览
- ⬅️ 上一节:4.4.2 分层次的路由选择协议
- ➡️ 下一节:4.4.4 开放最短路径优先协议 OSPF
- 🔗 4.4.1 距离-向量路由算法
- 🔗 5.2 UDP:UDP
- 📖 名词库:第 4 章名词库