RIP路由协议
RIP基础
1、RIP的更新过程
现在我们通过一个简单的环境,来看一下运行了RIP的路由器是如何交互路由信息的,并且网络中的路由器是如何完成路由信息的学习和收敛的。当然,这是一个微观的模拟过程,旨在帮助大家理解RIP的工作机制。
1)路由器初始启动
最初的网络发现:直连网络写入路由表,路由器能够自动学习直连路由并写入路由表,现在我们在所有路由器上都部署RIP。
2)初次交换路由信息
由
于ABC都运行了RIP,因此他们都将自己的路由表通过广播(RIP版本1是广播发送,版本2是组播发送)的方式从所有激活了RIP的接口上更新出去。拿
B来举例,它将自己的路由表更新出去,A和C都能够收到。A收到B传过来的路由表,它发现10.0.3.0路由自己没有,于是将这条路由学习过来,同时在
为这条路由关联一个度量值:1跳,所谓1跳的意思是,A要到达10.0.3.0这个网络,需要经过B这个路由器,这是一跳,一跳就是一台三层设备,RIP
通过跳数作为路由的度量值。
经过这一轮学习,A能学到10.0.3.0,C能学到10.0.2.0,而B能够学习到A和C传来的10.0.1.0及10.0.4.0。
3)路由收敛完成
接
下去又是一轮更新,所有路由器将自己的路由表发送给直连邻居。A就能学习到B更新过来的10.0.4.0路由,跳数为2跳,因为它要到10.0.4.0需
要经过BC两台路由器(实际上他并不知道要经过谁,RIP只是单纯的做个加法而已)。这样一来,所有的路由器,都拥有到达全网各个角落的路由了。我们把这
个称为,路由收敛完成了。
路由器收敛完成的标志
当所有路由表包含相同网络可达性信息
网络(路由)进入一个稳态
路由器继续交换路由信息
当无新路由信息被更新时收敛结束
网络在达到收敛前无法完全正常工作
2、RIP概述
RIP(Routing Information Protocols,路由信息协议)是历史悠久的内部网关协议,适用于小型网络,是典型的距离矢量协议;
RIP基于UDP,端口520;
在我司设备上路由优先级为100;
定期更新整张路由表;依照传闻;距离矢量路由协议并不了解网络拓扑;
有三个版本RIPv1、RIPv2和RIPng,RIPng是为IPv6开发的。
V2在V1的基础上做了如下改进:
增加外部路由标记
增加VLSM支持
组播发送RIP消息:224.0.0.9
支持认证
增加下一跳字段
3、RIP的Metric(度量值)
RIP以跳数(Hops)作为度量值,虽然简单,但是事实上是不够科学的。如下图:
R5
本地有个直连网络100.0/24,它通过RIP将这个网络更新出来。R2及R4都能学习到这条路由,并且跳数为1。而R1能通过R2学习到这条路由,跳
数为2;同时R1又能从R3学习到R4传递过来的100.0/24路由,跳数为3,这样一来,R1将收到两条到达同一个网络100.0/24的两条RIP
更新,它会去比较这两条路由的metric,结果发现,从R2来的路由,metric也就是跳数要更小,因此R1将R2更新过来的路由装载进路由表,并且
将R2设置为去往该网段的下一跳。
很明显,这是不合理的,因为虽然R1从R3-R4-R5这段路径去往100.0/24经过的设备更多,但是链路却都是1G带宽,而从R2这一侧走,链路的带宽却非常的低。但是很遗憾,RIP并无法不关心带宽的问题,它只将跳数作为路由的度量值,这就是它的短板之一。
在路由表中,能够查看到RIP路由的跳数:
4、RIP的防环机制
我们先来看一下路由更新环路的现象:
上图汇总,假设ABC都运行了RIP,并且网络已经收敛完成。现在C路由器的直连网段10.0.4.0发生故障,C检测到故障后,将10.0.4.0路由从路由表中擦除。
这时候,更新周期到了,ABC路由器都将自己的路由表更新给直连邻居。那么C路由器会收到B更新过来的路由,其中也包括10.0.4.0,这时候C把10.0.4.0学习过来并且装载进了路由表,同时关联metric为2跳(因为路由是从B学习过来的,而B自己是1跳)。
10.0.4.0路由继续在网络中随着更新周期的到来不断的被更新来更新去,然而事实上,10.0.4.0网络早就不存在了,这时候如果网络中有任何一个地方发送数据到10.0.4.0网络,这个数据将在网络中不断的打转,直到TTL递减为0。这就是环路。
环路是一个危害非常大的问题,一个健壮的路由协议应该有充分的机制去规避环路的问题,RIP也有相应的一系列机制来防止网络中出现环路。
- 定义最大度量以防止计数至无穷大
- 水平分割
- 路由中毒
- 毒性逆转
- 抑制计时器
- 触发更新
篇幅有限,我们只介绍其中几个机制:
定义最大度量以防止计数至无穷大
在
上文的例子中,10.0.4.0路由被RIP在网络中传来传去,跳数不断的累加。RIP定义了一个最大跳数,15跳,当一条路由跳数为16跳时,这条路由
被视为不可达,因此这就避免了路由被无休止的传递。当然,这事实上是个笨方法,因为它在规避环路的同时,也限制了RIP适用的网络规模,如果我的网络当真
有15台以上的路由器串起来呢,这时候RIP就搞不定了。
水平分割规则
水平分割规则是距离矢量路由协议一个特点非常鲜明的机制。
当一台路由器,从一个接口收到一条路由更新,这台路由器将不再把这条路由从该接口再更新回去,这就是水平分割规则,RIP的环路避免很大程度上依赖于该规则。
毒性路由
另一个避免环路的机制是,路由中毒机制,上图中,C路由器一旦发现10.0.4.0的直连网络发生故障,它将立即发送一个路由更新,该更新包含10.0.4.0路由同时将跳数设置为16跳,这样其他路由器将接收这个路由更新并将故障路由从路由表中擦去。
毒性逆转
毒性逆转(Poison Reverse)的原理是,RIP从某个接口学到路由后,将该路由的开销设置为16(即指明该路由不可达),并从原接口发回邻居路由器。利用这种方式,可以清除对方路由表中的无用路由。毒性逆转可以防止产生路由环路的发生。
在
上图中,如果C的10.0.4.0网络挂掉了,而B不再从C收到4.0的路由更新,它就有可能向C通告4.0的路由(暂不考虑水平分割规则),这样一来C
就有可能将B作为4.0网络的下一跳,这就形成了环路。在B上开启了毒性逆转后,B从GE0/0/1口手到的RIP路由,它也会将路由从该接口更新回去,
只不过跳数被设置成了16,这样C将不会使用这些路由。
同时配置水平分割和毒性逆转的话,只有毒性逆转生效。
5、RIP的配置
1.配置命令
启动RIP进程,并进入RIP配置视图
[Router] rip 1
在指定网段使能RIP(RIP只支持classful网络宣告)
[Router-rip-1] network 192.168.12.0
事实上这条命令将产生两个效果:1是network的这个接口将激活RIP,开始发送和侦听RIP消息;2是network的这个接口所在的网段会被
引入RIP并被RIP通告出去。
指定RIP的版本(默认为版本1)
[Router-rip-1] version 2
2.配置示例
R1的配置如下:
#完成接口IP的配置:
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.12.1 24
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ip address 192.168.1.254 24
#在R1的GE0/0/0及GE0/0/1口上激活RIPv2:
[R1] rip 1
[R1-rip-1] version 2 #指定RIP的版本为版本2
[R1-rip-1] network 192.168.12.0 #在GE0/0/0口上激活RIP
[R1-rip-1] network 192.168.1.0 #在GE0/0/1口上激活RIP
R2的配置如下:
#完成接口IP的配置:
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.12.2 24
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 192.168.23.2 24
#在R2的GE0/0/0及GE0/0/1口上激活RIPv2:
[R2] rip 1
[R2-rip-1] version 2
[R2-rip-1] network 192.168.12.0
[R2-rip-1] network 192.168.23.0
R3的配置如下:
#完成接口IP的配置
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 192.168.23.3 24
[R3] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ip address 192.168.2.254 24
#在R3的GE0/0/0及GE0/0/1口上激活RIPv2
[R3] rip 1
[R3-rip-1] version 2
[R3-rip-1] network 192.168.2.0
[R3-rip-1] network 192.168.23.0
完成上述配置后,我们来查看及验证,首先查看R1的IP路由表:
[R1] display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 12 Routes : 12
Destination/Mask Proto PreCostFlags NextHop Interface
192.168.1.0/24 Direct 0 0 D 192.168.1.254 GigabitEthernet0/0/1
192.168.1.254/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
192.168.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
192.168.2.0/24 RIP100 2 D 192.168.12.2 GigabitEthernet0/0/0
192.168.12.0/24 Direct 0 0 D 192.168.12.1 GigabitEthernet0/0/0
192.168.12.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
192.168.12.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
192.168.23.0/24 RIP 100 1 D 192.168.12.2 GigabitEthernet0/0/0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
……
从
上面的输出,我们可以看到R1已经通过RIP学习到了两条路由,分别是192.168.2.0/24及192.168.23.0/24。当然为了使得
PC1与PC2要能够正常通信,沿途的所有路由器都要有完整的路由表项,因此我们还需要检查检查R2及R3的路由表,重点看RIP路由:
[R2] display ip routing-table protocol rip
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : RIP
Destinations : 2 Routes : 2
RIP routing table status : <Active>
Destinations : 2 Routes : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.1.0/24 RIP 100 1 D 192.168.12.1 GigabitEthernet0/0/0
192.168.2.0/24 RIP 100 1 D 192.168.23.3 GigabitEthernet0/0/1
R2也通过RIP学习到了两条路由,分别是192.168.1.0/24及192.168.2.0/24。
同理查看R3的路由表,确保R3能够学习到192.168.1.0/24的路由。
如此一来,全网的路由就打通了,那么现在PC1与PC2是能够互相通信的。