![a688427105100d95a2436d0c2734ed1a.png](https://img-blog.csdnimg.cn/img_convert/a688427105100d95a2436d0c2734ed1a.png)
RIP(Routing Information Protocol,路由信息协议)是一种较为简单的内部网关协议(Interior Gateway Protocol,IGP),主要用于规模较小的网络中,比如校园网以及结构较简单的地区性网络。对于更为复杂的环境和大型网络,一般不使用RIP。
由于 RIP 的实现较为简单,在配置和维护管理方面也远比OSPF 和IS-IS 容易,因此在实际组网中仍有广泛地应用。
RIP和OSPF的区别在于,RIP是基于距离矢量,只知道下一跳的相关信息,不了解整个网络的信息;而OSPF是路由状态协议,它是知道整个网络状态的。
![a688427105100d95a2436d0c2734ed1a.png](https://img-blog.csdnimg.cn/img_convert/a688427105100d95a2436d0c2734ed1a.png)
1. RIP 的基本概念
RIP 是一种基于距离矢量(Distance-Vector)算法的协议,它通过UDP 报文进行路由信息的交换,使用的端口号为520。
RIP 使用跳数来衡量到达目的地址的距离,跳数称为度量值。在RIP 中,路由器到与它直接相连网络的跳数为0,通过与其相连的路由器到达另一个网络的跳数为1,其余依此类推。为限制收敛时间,RIP 规定度量值取0~15 之间的整数,大于或等于16 的跳数被定义为无穷大,即目的网络或主机不可达。由于这个限制,使得RIP不适合应用于大型网络。
为提高性能,防止产生路由环路,RIP 支持水平分割(Split Horizon)和毒性逆转(Poison Reverse)功能。后面会介绍。
2. RIP 的路由数据库
每个运行 RIP 的路由器管理一个路由数据库,该路由数据库包含了到所有可达目的地的路由项,这些路由项包含下列信息:
? 目的地址:主机或网络的地址。
? 下一跳地址:为到达目的地,需要经过的相邻路由器的接口 IP 地址。
? 出接口:转发报文通过的出接口。
? 度量值:本路由器到达目的地的开销。
? 路由时间:从路由项最后一次被更新到现在所经过的时间,路由项每次被更新时,路由时间重置为0。
? 路由标记(Route Tag):用于标识外部路由,在路由策略中可根据路由标记对路由信息进行灵活的控制。
3. RIP 的启动和运行过程
RIP 启动和运行的整个过程可描述如下:
? 路由器启动 RIP 后,便会向相邻的路由器发送请求报文(Request message),相邻的RIP 路由器收到请求报文后,响应该请求,回送包含本地路由表信息的响应报文(Response message)。
? 路由器收到响应报文后,更新本地路由表,同时向相邻路由器发送触发更新报文,广播路由更新信息。相邻路由器收到触发更新报文后,又向其各自的相邻路由器发送触发更新报文。在一连串的触发更新广播后,各路由器都能得到并保持最新的路由信息。
? RIP 采用老化机制对超时的路由进行老化处理,以保证路由的实时性和有效性。
4. RIP 定时器
RIP 受四个定时器的控制,分别是Update、Timeout、Suppress 和Garbage-Collect。
? Update 定时器,定义了发送路由更新的时间间隔。
? Timeout 定时器,定义了路由老化时间。如果在老化时间内没有收到关于某条路由的更新报文,则该条路由在路由表中的度量值将会被设置为16。
? Suppress 定时器,定义了RIP 路由处于抑制状态的时长。当一条路由的度量值变为16 时,该路由将进入抑制状态。在被抑制状态,只有来自同一邻居且度量值小于16 的路由更新才会被路由器接收,取代不可达路由。
? Garbage-Collect 定时器,定义了一条路由从度量值变为16 开始,直到它从路由表里被删除所经过的时间。在Garbage-Collect 时间内,RIP 以16 作为度量值向外发送这条路由的更新,如果Garbage-Collect 超时,该路由仍没有得到更新,则该路由将从路由表中被彻底删除。
5. 防止路由环路
RIP 是一种基于D-V 算法的路由协议,由于它向邻居通告的是自己的路由表,存在发生路由环路的可能性。
RIP 通过以下机制来避免路由环路的产生:
? 计数到无穷(Counting to infinity):将度量值等于16 的路由定义为不可达(infinity)。在路由环路发生时,某条路由的度量值将被设置为16,该路由被认为不可达。
? 水平分割(Split Horizon):RIP 从某个接口学到的路由,不会从该接口再发回给邻居路由器。这样不但减少了带宽消耗,还可以防止路由环路。
? 毒性逆转(Poison Reverse):RIP 从某个接口学到路由后,将该路由的度量值设置为16(不可达),并从原接口发回邻居路由器。利用这种方式,可以清除对方路由表中的无用信息。
? 触发更新(Triggered Updates):RIP 通过触发更新来避免在多个路由器之间形成路由环路的可能,而且可以加速网络的收敛速度。一旦某条路由的度量值发生了变化,就立刻向邻居路由器发布更新报文,而不是等到更新周期的到来。
![a688427105100d95a2436d0c2734ed1a.png](https://img-blog.csdnimg.cn/img_convert/a688427105100d95a2436d0c2734ed1a.png)
实验要求:
R1-R2-R3-R4-R5 运行RIPV2,R6-R7运行RIPV1
1.使用合理IP地址规划网络,各自创建环回接口2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/243.要求R3使用R2访问R1环回4.加快网络收敛,减少路由条目数量,增加路由传递安全性5.R5创建一个环回模拟运营商,不能通告6.R1 telnet R2环回实际telnet 到R7上7.R6-R7路由器不能学习到达R1环回路由8.全网可达
拓扑如下:
首先配置IP和还回接口,同时给给R1再创建三个环回172.16.1.1/24 172.16.2.1/24 172.16.3.1/24
配置脚本如下:
-------------------------R1--------------------------
sysname R1
int lo0
ip add 1.1.1.1 24
int g 0/0/0
ip addr 12.1.1.1 24
int g 0/0/1
ip addr 14.1.1.1 24
int lo1
ip add 172.16.1.1 24
int lo2
ip add 172.16.2.1 24
int lo3
ip add 172.16.3.1 24
-------------------------R2--------------------------
sysname R2
int lo0
ip add 2.2.2.2 24
int g 0/0/0
ip addr 12.1.1.2 24
int g 0/0/1
ip addr 23.1.1.1 24
-------------------------R3--------------------------
sysname R3
int lo0
ip add 3.3.3.3 24
int g 0/0/0
ip addr 23.1.1.2 24
int g 0/0/1
ip addr 34.1.1.1 24
-------------------------R4--------------------------
sysname R4
int lo0
ip add 4.4.4.4 24
int g 0/0/0
ip addr 34.1.1.2 24
int g 0/0/1
ip addr 14.1.1.2 24
int g 4/0/0
ip addr 45.1.1.1 24
int g 0/0/2
ip addr 46.1.1.1 24
-------------------------R5--------------------------
sysname R5
int lo0
ip add 5.5.5.5 24
int g 0/0/0
ip addr 45.1.1.2 24
-------------------------R6--------------------------
sysname R6
int lo0
ip add 6.6.6.6 24
int g 0/0/0
ip addr 46.1.1.2 24
int g 0/0/1
ip addr 67.1.1.2 24
-------------------------R7--------------------------
sysname R7
int lo0
ip add 7.7.7.7 24
int g 0/0/0
ip addr 67.1.1.2 24
配置完记得测试直连路由通不通,以及看一下每个路由器的路由表
第二步:R1-R2-R3-R4-R5 运行RIPV2, R5不通告环回,配置脚本如下:
-------------------------R1--------------------------
rip 100
version 2
network 1.0.0.0
network 172.16.0.0
network 12.0.0.0
network 14.0.0.0
-------------------------R2--------------------------
rip 100
version 2
network 2.0.0.0
network 12.0.0.0
network 23.0.0.0
-------------------------R3--------------------------
rip 100
version 2
network 3.0.0.0
network 23.0.0.0
network 34.0.0.0
-------------------------R4--------------------------
rip 100
version 2
network 4.0.0.0
network 14.0.0.0
network 34.0.0.0
network 45.0.0.0
network 46.0.0.0
-------------------------R5--------------------------
rip 100
version 2
network 45.0.0.0
-------------------------R6--------------------------
rip 100
verify-source
version 1
network 6.0.0.0
network 46.0.0.0
network 47.0.0.0
-------------------------R7--------------------------
rip 100
verify-source
version 1
network 7.0.0.0
network 67.0.0.0
配置完成后,测试一下RIP V1内的所有路由是否可以相互学习,RIPV2也一样
首先查看R2,路由表如下:
检查R6的路由表如下
说明配置到此都是正确的
第三步,R3通过R2来访问R1的环回,此处涉及到修改RIP的cost值。
在修改cost之前,先做一个路由汇总,因为下面有要求要减少路由条目。脚本如下:
-------------------------R1--------------------------
int g 0/0/0
rip summary-address 172.16.0.0 255.255.252.0
int g 0/0/1
rip summary-address 172.16.0.0 255.255.252.0
然后修改Cost
首先从R3上看,在修改前去1.0.0.0有两条等价路由,如下图
然后修改cost,脚本如下:
-------------------------R3--------------------------
acl 2000
rule permit source 1.1.1.0 0.0.0.0
rule permit source 172.16.0.0 0.0.0.0
q
int g 0/0/1
rip metricin 2000 2
然后再看R3到达1.0.0.0的路由只有一条了,COST大的路由已经变成unactive,所以不会显示出来
第四步,实现R1 telnet R2环回实际telnet 到R7上,先在R7上开启telnet功能, huawei是密码,脚本如下:
-------------------------R7--------------------------
user-interface vty 0 4
authentication-mode aaa
quit
aaa
local-user admin password cipher huawei
local-user admin privilege level 15
local-user admin service-type telnet
quit
telnet server enable
然后让RIPV1 和RIPV2 可以相互学习路由,首先查看为相互学习之前的状态,如下图:只能学习到7.0.0.0网段的路由
相互学习脚本如下:
-------------------------R6--------------------------
int g 0/0/0
rip version 2
然后查看R6的路由,已经学习了RIPV2的路由
此时也可以查看R2等路由器,也学习到67.0.0.0、6.0.0.0/7.0.0.0的网段。
第四步,在R2上做NAT的地址转换,这里我们使用 NAT SERVER
-------------------------R2--------------------------
int g 0/0/0
nat server protocol tcp global interface loopback 0 23 inside 7.7.7.7 23
查看R7到1.1.1.1的路由,如下,他经过R4直接到R1,这显然不合我们的需求,我们需要它经过R2才可以,于是需要增大R1-R4之间的Cost。
增加Cost的脚本如下:
-------------------------R4--------------------------
acl 2000
rule permit source 12.1.1.0 0
int g 0/0/1
rip metricin 2000 4
此时通过R1 Telnet R2,输入admin huawei后显示R7, 说明实现了R1 telnet R2环回实际telnet 到R7上的目的。
注意:telnet需要在退出用户模式
第五步,R6-R7路由器不能学习到达R1环回路由,在R4 R6之间 做一个过滤,同样 export和import随便选一个,我们选择import
-------------------------R6--------------------------
acl 2000
rue deny source 1.1.1.0 0
rue deny source 172.16.0.0 0
rule permit source any
quit
rip 100
filter-policy 2000 import g 0/0/0
再来在R6上检测一下是否还能学到R1还回地址
[r6-rip-100]dis ip ro pr rip
实验做到这里,本来已经全网可达了,但是我们刚刚让R6 R7过滤掉了R1的环回,所以现在我们让R5这个虚拟的运营商来下放缺省,这样就可以实现全网可达了
-------------------------R5--------------------------
rip 100
default-route originate
最终实现全网联通。