参考书籍:《路由与交换技术》
目录
1.RIP是什么
路由信息协议(Routing Information Protocol, RIP),一种简单的动态路由协议,它是基于 D-V 算法的路由协议,属于距离矢量路由协议。
D-V 算法:
通过 UDP 交换路由信息,每隔 30s 向外发送一次更新报文。如果路由器经过 180s 没有收到来自对端的路由更新报文,就将所有来自此路由信息标注为不可达,若在其后 120s 内仍然未收到,就将该条路由从路由表中删除。
距离矢量路由协议:只关心与目标的距离和报文的出端口。
RIP 使用跳数(Hop Count)来衡量到达目的网络的距离。
在 RIP 中,路由器与它直接相连的路由器的距离为 0,每经过一个路由器,距离加 1,依次类推。为了限制收敛时间,RIP 中规定 metric 取值为 0 ~ 15 之间的整数,大于等于 16 的跳数被定义为无穷大,即目的主机不可达。
RIP 位于 UDP 的上层
RIP 在 520 端口上接受来自远程路由的路由修改信息,并对本地路由进行修改,同时通知其他路由器。
2.RIP初始化过程

过程如下:
(1)启动时,RTA 路由表中只包含本路由器的直连路由接口。
(2)启动后,RTA 向各接口广播一个请求(Request)报文。
(3)邻居路由 RTB 的 RIP 接受到 Request 后,根据自己的路由表形成响应(Response)报文,并向RTA发送。
(4)RTA 接受到 Response,形成自己的路由表。
在 D-V 算法中:
将协议参加者,分为 主动机(主动向外广播路由刷新报文) 和 被动机(被动接受刷新报文) 两种。
一般,PC 端作为被动机,路由器 既是被动又是主动。
3.RIP更新过程

过程如下:
(1)RIP 以 30s 为周期用 Response 报文广播自己的路由表。
(2)收到邻居路由发来的 Response 后,比较其中的路由项的度量值,并更新自己的路由表。
度量值计算:
metric = MIN(metric+cost, 16)
metric 为报文中携带的度量值信息。
cost 为接受报文的网络的度量值(默认为1),也可以叫 开销。
16 代表不可达。
更新路由表的原则:
(1)对于本路由中已有的路由项,当路由的下一跳是该邻居路由时,不论度量值增大还是减小,都更新(度量值相同时清除老化定时器)。当下一条不是该邻居路由时,只在度量值减少时更新。
(2)对于本路由中不存在的路由项,度量值小于 16,增加该条路由。
路由表中的每一条都对应者一个老化定时器,当某一项在 180s 内没有任何更新,认定超时,该项路由条目的度量值变为不可达(16)。当某项变为不可达后,该度量值在 Response 报文中发布 4 次(120s)(垃圾收集定时器),之后清除。
4.RIP报文格式
RIP 报文占 4 个字节,而每个路由条目占 20 个字节,因此,RIP报文的大小最大:4+25*20 = 504 字节,再加上 8 个字节的UDP头部,RIP报文最大为:512字节。

Command | 只能取 1 或 2, 1 表示该消息是 请求,2 表示该消息是 响应 |
Version | 对于 RIPv1,该字段为1 |
Address Family Identifier (AFI) | 对于 IP,该项为2 |
IP Address | 路由的目的地址。这一项可以时网络地址,也可以是主机地址 |
Metric | 1 ~ 16 之间的跳数 |
相对于RIPv1,RIPv2 增加了几个字段:
Route Tag | 16位,用于标记外部路由 |
Subnet Mask | 32位,确认 IP 地址的网络和子网部分的 32 位的掩码 |
Next Hop | 32位,下一跳,为 32 位的 IP 地址 |
区分 RIPv1 与 RIPv2:
RIPv1 不支持可变长子网掩码(VLSM),RIPv2支持。
RIPv1 使用广播发送报文,RIPv2采用 广播 和 多播 两种方式(默认采用多播发送,RIPv2的多播地址位 224.0.0.9,多播可以使在同一网络中没有运行RIP的网段避免接收RIP广播,同时也可以避免RIPv1网段错误的接受和处理RIPv2中的子网掩码路由)。
5.RIP防环路机制
环路产生过程:
+------+ 2 +------+ 3 +------+
| A | <------ | B | <------ | C |
+------+ +------+ +------+
^ ^
| |
| 4 |
| |
+------------------+
|
|
X
网络X
初始状态:
假设路由器 A 的路由表:网络 X,下一跳 B,跳数 2;
路由器 B 的路由表:网络 X,下一跳 C,跳数 3;
路由器 C 的路由表:网络 X,下一跳 A,跳数 4;
链路故障:
+------+ 2 +------+ 3 +------+
| A | <------ | B | <------ | C |
+------+ +------+ +------+
^ ^
| |
| 16 |
| |
+------------------+
|
|
X
网络X
(C到网络X链路故障,C将到网络X路由更新为16,但未发送给A和B)
假设路由器 C 到网络 X 的链路故障,C 会将到网络 X 的路由更新为 16(不可达),但在它将更新发送给 A 和 B 之前,A 发送自己的路由表给 B,B 收到后更新其路由表:网络 X,下一跳 A,跳数 3。 B 再将更新后的路由表发送给 C,C 收到后更新为:网络 X,下一跳 B,跳数 4。
环路形成:
此时 A 到网络 X 认为通过 B 可到达,B 到网络 X 认为通过 C 可到达,C 到网络 X 认为通过 A 可到达,形成路由环路。 并且随着路由更新,跳数不断增加,可能会导致网络不稳定,直到达到最大跳数 16 才会停止更新,但此时网络资源已经被大量消耗
5.1. 水平分割(Split Horizon)
水平分割是一种防止路由环路的机制,它规定路由器不会将从某个接口学到的路由信息再从该接口发送出去。这是基于一个简单的逻辑,即如果路由器从某个邻居学到了一条路由,那么该邻居已经知道这条路由,不需要将这条路由信息再反馈给它,避免了路由信息在两个路由器之间来回传递形成环路。
A / \ / \ B C
- 假设路由器 A 有两条链路分别连接到路由器 B 和 C。
- A 通过接口
I1
从 B 学到了到达网络X
的路由信息。- 根据水平分割原则,A 不会将从
I1
学到的关于网络X
的路由信息再从I1
发送给 B。
5.2. 路由抑制(Route Poisoning)
当路由器发现一条路由失效时,它不是简单地将该路由从路由表中删除,而是将该路由的度量值设置为一个无限大的值(在 RIP 中通常是 16,表示不可达),并将这个信息传播给邻居路由器。这样邻居路由器会知道这条路由不可用,避免将数据转发到这条路由上,从而防止环路形成。
A / \ / \ B C
- 假设路由器 A 原本通过接口
I1
到达网络X
,现在该链路失效。- A 将到达网络
X
的路由的跳数设置为 16,并向 B 和 C 发送更新。- B 和 C 收到更新后,会更新自己的路由表,将通过 A 到达网络
X
的路由标记为不可达。
5.3. 抑制时间(Holddown Time)
当路由器收到一条路由失效的消息后,它会进入抑制时间。在抑制时间内,即使收到一条更好的路由信息(例如跳数更小),也不会更新该路由表项,直到抑制时间结束。这是为了防止由于网络波动导致的路由表频繁更新,确保网络的稳定性。
A / \ / \ B C
- 假设路由器 A 向 B 发送消息说到达网络
X
的路由失效。- B 收到消息后,会进入抑制时间,假设为 180 秒。
- 即使在这期间 C 向 B 发送了一条到达网络
X
的新路由信息,B 也不会更新其路由表,直到 180 秒结束。
5.4. 触发更新(Triggered Updates)
触发更新允许路由器在路由信息发生变化时立即发送更新消息,而不是等待常规的更新周期(RIP 的常规更新周期是 30 秒)。这可以加速网络的收敛速度,减少路由环路形成的机会。
A / \ / \ B C
- 假设路由器 A 发现到达网络
X
的链路发生了变化(例如,链路失效或有更好的路径)。- A 会立即向 B 和 C 发送更新消息,而不是等待 30 秒的更新周期。
A ------ B ------ C /|\ | | / | \ | | D E F G H
- 假设 A 到 B 的链路失效:
- A 使用路由抑制将到达 B 的路由标记为不可达,并使用触发更新通知 D、E、F。
- B 会使用水平分割,不会将从 A 学到的路由信息再发送给 A。
- 同时,D、E、F 收到 A 的触发更新后,进入抑制时间,避免在短时间内更新错误的路由信息。
6.案例分析
描述(讲解使用eNSP):
A 和 B 通过 Serial 口连接,A 和 吧、B 上分别配置了 两个Loopback 接口,IP如图,配置完成后,发现无法正常互相学习到路由信息。
接收故障处理思路:
(1)检查网段是否再 RIP 中宣告
(2)检查接口是否工作正常
(3)检查 A 和 B 的版本号是否一致
(4)检查入接口是否配置 undo rip input 命令
(5)检查 RIP 中是否配置了策略来过滤掉收到的 RIP路由
(6)检查入接口是否配置了 rip metricin 命令,使得接收到的路由度量值大于15
(7)检查接收到的路由的度量值是否大于15
(8)检查路由表中是否有其他形同学习条目
发送故障处理思路:
(1)检查出接口网段是否再 RIP 中宣告
(2)检查出接口工作是否正常
(3)检查出接口是否配置 silent-interface 命令
(4)检查出接口是否配置 undo rip output 命令
(5)检查出接口是否配置 水平分割
7.总结
RIPv1 | RIPv2 | |
---|---|---|
路由协议类型 | 有类路由协议 | 无类路由协议 |
子网掩码支持 | 不支持,只能识别网络类,更新时不携带子网信息 | 支持可变长子网掩码(VLSM)和无类别域间路由(CIDR),更新时携带子网信息 |
认证功能 | 没有认证功能 | 支持认证,有明文和 MD5 两种认证方式 |
手工汇总功能 | 没有手工汇总功能 | 可以在关闭自动汇总的前提下,进行手工汇总 |
更新方式 | 广播更新(255.255.255.255) | 组播更新(224.0.0.9) |
路由标记功能 | 对路由没有标记的功能 | 可以对路由打标记(tag),用于过滤和做策略 |
路由条目携带数量 | 发送的 update 最多可以携带 25 条路由条目 | 在有认证的情况下最多只能携带 24 条路由 |
Next-hop 属性 | 发送的 update 包里面没有 next-hop 属性 | 有 next-hop 属性,可以用于路由更新的重定向 |
触发更新机制 | 只有定时更新机制,每隔 30 秒更新一次 | 除定时更新外,还支持触发更新,网络变化时立即发送更新信息 |
水平分割 | 通常没有这个特性 | 支持水平分割功能,防止路由环路 |
毒性逆转 | 不具备这样的功能 | 具备毒性逆转的功能,避免不必要的路由探索 |
兼容性 | 与 RIPv2 不完全兼容,不能理解 RIPv2 的路由表项 | 能够处理 RIPv1 发送的路由信息 |