前言
这篇文章介绍经典路由协议RIPv1,虽然如今RIP协议已经很少出现在实际工作中,但可以用它作为入门,来理解路由间协议的工作方式;本文结合实例,详细介绍RIPv1的特征、配置。
文章内容:
- RIP主要特征
- RIP路由互相学习过程解析
- RIP定时器
- RIP路由环路形成解析
- 距离矢量路由环路的解决方法
- RIPv1配置实例
- a.负载均衡
- b.查看路由协议
- c.debug ip rip
- d.水平分隔
- e.被动接口配置
- f.单播更新实例
- g.触发更新
- h.更改定时器
01
RIP(Routing Information Protocol,路由信息协议),是早期应用比较普遍的内部网关协议,是典型的距离矢量路由协议,适用于小型网络,最大的缺点是无法在具有冗余链路的网络中有效的运用。
RIP协议的默认管理距离是120,RIP所接收的路由信息都被封装在UDP协议的数据报中,在UDP的520端口接收来自远程路由的信息。
RIP使用Hop Count(跳计数)作为路径选择的度量值。最大跳数是15,如果最大跳数大于15,则认为该网络失效。RIPv1采用广播式更新,RIPv2采用组播更新方式,RIP默认每隔30秒周期性的发送整个路由表给邻路由。
02
RIP路由互相学习过程解析:
RIP协议运行前R1、R2、R3的路由表中只有直连路由信息如下图:
1)运行RIP路由协议后,R1、R2、R3宣告各自直连网络
2)假设R1先发送路由更新,R1将自己直连网络10.1.0.0和10.2.0.0以1跳的度量值告诉R2。
3)R2收到R1的路由表后,将自己的路由与R1传过来的路由进行比较,R2发现自己的路由表中没有10.1.0.0,R2记下这条路由以及路由对应的接口和跳数1;并且R2发现自己的路由表中已经有10.2.0.0这个条目,而且是直连条目,直连路由的管理距离是0,学到的RIP路由的管理距离是120,所以R2忽略R1传过来的10.2.0.0这个条目。
4)R2把自己路由表中的直连网络10.2.0.0和10.3.0.0以1跳的度量值告诉R3;并且将从R1那里学到的10.1.0.0网络以2跳的度量值告诉R3。
5)R3收到R2发过来的路由条目,将自己的路由表和R2发过来的条目进行比较,R3发现自己路由表中没有10.1.0.0,R3记录下这条路由以及对应端口和跳数2;R3发现自己路由表中没有10.2.0.0,R3记录下这条路由和对应端口以及跳数1;R3发现自己的路由表中已经存在10.3.0.0,并且是直连,比R2发过来的RIP更新有更好的度量值,R3忽略R2发来的10.3.0.0。这样R3学到了完整的路由条目。
6)同理,R3也会将路由发给R2,R2再发给R1,最后所有路由都可以学到所有条目。 运行RIP后各路由上的路由表如下图
03
RIP定时器:
在运行了RIP协议的路由器上查看RIP定时器的情况:
RIP有4种不同类型的定时器:
- 路由更新定时器”Sending updates every 30 seconds”, 默认每隔30秒将自己的路由信息完整的拷贝给邻居。
- 路由失效定时器”Invalid after 180 seconds”, 默认180秒,如果路由在这个期间没有收到某个路由的更新,它认为这个路由失效,这一情况发生时, 路由器将给所有相邻路由发送一个更新消息,通知他们这个路由已经失效。
- 抑制定时器(holddown time),”hold down 180″, 当收到指示某个路由不可达的更新数据包时,路由器将进入”抑制时间” ,抑制定时器默认180秒。
- 路由刷新定时器”flushed after 240″,用于设置某个路由成为无效路由并将它从路由表中删除的时间间隔。 路由失效定时器必须小于路由刷新定时器,这样可以为路由提供足够的时间来通知它的相邻路由有关这一无效路由的情况。
在不考虑使用任何防止距离矢量协议路由选择环路的情况下,可以这样来理解上面的四种定时器。结合下图,默认情况下,网络中的路由30秒发送一次RIP路由更新,如果此时R1上面的”网路1″失效,R1发往R2的路由更新中不再含有”网路1″,R2上的路由失效定时器、路由抑制定时器、路由刷新定时器同时开启,连续6个更新周期(180秒)后,R2都没有收到R1发过来的”网路1″的路由更新,R2认为”网路1″失效,这里用到的就是路由失效定时器(倒计时180秒)。在R2认为”网路1″失效以前(180秒内),如果R2收到发往”网路1″的数据,R2任然转发数据给R1。在R2认为”网路1″失效的前的这180秒中,”网路1″在R2上处于抑制状态。在接下来的60秒中(240-180,也就是R2认为”网路1″失效后),R2认为”网路1″可能down掉了,并且不再转发去往”网路1″的数据给R1。
04
RIP路由环路形成解析:
05
距离矢量路由环路的解决方法:
距离矢量路由环路的解决方法有如下五种:
- 1)最大跳计数(maximum metric),RIP允许跳计数最大可以达到15,任何需要经过16跳才能到达的网络都被认为是不可达的。
- 2)水平分隔(split horizon),(使用上图举例)限制路由器不能按照接收信息的方向去将接收到的信息再发回去。比如路由R3和R5有关网络1的信息是从R2学习到的,它们不会将网络1的信息再从与R2相连的接口发回去。这样R4最终会学习到网络1不可达的信息。
- 3)路由中毒(route poisconing),路由中毒通过将故障网络设置成最大跳计数加1来暗示网络不可达,毒性反转是避免环路的另一种方法,比如R2学习到R1发送过来的网络1不可达的信息,首先它将网络1的跳计数更改成16跳,并且根据毒性反转,它将向R1送回一条网络1不可达的更新。
- 4)触发更新(triggered update),周期性发送更新,RIP是默认每隔30秒。
- 5)抑制定时器(holddown time),(使用上图举例)比如R2收到了R1发来的网络1不可达的信息后,R2首先标记此网络不可达,同时R2的抑制定时器启动,在RIP中抑制定时器是180秒倒计时,如果在抑制定时器到期前,又从R1收到网络1可达的信息了,那么删除这个抑制定时器,并且标记网络1可达;如果在抑制定时器期满前,收到一个来自其他路由的(R3或者R4)关于网络1的更新,并且这个更新具有更好的度量值(假设以前学到的是3跳,这里有其他路由告诉它只需要1跳就能到达网络1),那么R2删除抑制定时器,并且标记网络1可达;如果在抑制定时器到期前,R2收到另外路由器发来的关于网络1的更新,并且具有更差的度量值,那么忽略此更新;在抑制定时器期满后,R2删除抑制定时器,接收来自任何源路由的关于网络1的更新。
06
RIPv1配置实例:
使用RIPv1来配置下图:
三台路由器配置相同部分:
R1配置:
R2配置:
R3配置:
配置完成后大约等待十几秒查看一下R1的路由表:
此时R1拥有全网的路由信息,其中3条是直连(C),3条是通过RIP学习到的(R) 路由表中,C表示直连路由条目;R表示通过RIP学习到的路由, D表示通过EIGRP学习到的路由条目,O表示通过OSPF学习到的路由条目。
“2.0.0.0/8 [120/1] via 12.1.1.2, 00:00:01, Serial1/0”解释如下:
“2.0.0.0/8 ”是学到的远程网络, [120/1] 是管理距离120和度量值1(跳)
“via 12.1.1.2”代表去往2.0.0.0/8网络的下一跳是12.1.1.2
“ 00:00:01”此路由已经存在的时间,这个就是更新定时器的值,递增到30秒自动归零。
“Serial1/0”是本路由去往2.0.0.0/8网络的外出接口。
断开R1和R2之间的链路,等网络再次收敛后查看R1的路由表:
首先关闭R1的s1/0接口
网络收敛后查看R1路由表 可以看到去往”2.0.0.0/8″网络的路由条目发生了变化,它的下一跳变成了”via 13.1.1.3″,并且跳数变成了2,
重新打开R1的s1/0接口,继续下面的实验
a.负载均衡:
从R1的路由表输出可以看出,去往23.0.0.0/24的路径又两条:
R1去往23.0.0.0/8网络的数据将被负载到这两条线路上,在本例中R1和R3之间的以太网线路速率为100Mb/s,而R1和R2之间的串行线路速率仅仅只有1.544Mb/s,可以看出RIP协议并不会不考虑线路带宽,仅考虑度量值,RIP默认支持四条线路的负载均衡,可以使用下面的命令更改最大负载均衡线路数:
通过?查看最大支持多少条线路的负载均衡,然后改成最大支持32条线路负载均衡
现在来测试一些负载均衡是否被使用:
在R1上开启ICMP调试:
测试ping:
从下面的信息看出,去往23.1.1.2的数据全部是从R3走的(也有可能全部从R2走,dst就会是12.1.1.1),并没有负载到两条线路上
上面的测试中,之所以没有将数据负载到两条线路中,是因为思科的IOS软件提供了两种负载均衡的方式:
- 基于每个分组的负载均衡,称作进程交换;
- 基于每个目的的负载均衡,称作快速交换; 而IOS默认使用快速交换,如果使用进程交换,IOS将会将交替使用每条线路,下面关闭快速交换,使用进程交换:
关闭快速交换
再次进行ping测试
从上图调试结果反馈可以看出,数据被均匀的分担到了不同的线路上了
b.查看路由协议:
在R1上使用”show ip protocols”查看R1上运行的路由协议:
C. debug IP rip:
使用”debug ip rip”实时监控路由收发RIP更新的情况:
从sending v1和received v1可以判断,路由运行的是RIPv1, sending是发送,received是接收,via代表从哪个接口发送或接收, update to 255.255.255.255说明RIPv1使用的是广播式更新,并且从发送的网络更新中没有包含直连接口的路由以及对方发送过来的路由,可以推断出,R1所有接口都开启了水平分隔 ,默认路由接口的水平分隔是开启的,可以使用”show ip interface”查看。 从这些更新中同样可以看到,路由也向回环接口发送更新, 向回环接口发送更新没有什么意义,稍后介绍如何取消向回环接口发送更新。
关闭所有debug调试:
d. 水平分隔:
查看某接口是否开启了水平分隔:
可以看到水平分隔已经开启。
现在关闭R1 s1/0接口水平分隔,再使用debug IP rip查看发生更新情况:
关闭s0/0的水平分隔后,它对外发送的RIPv1更新将包含整个路由表的条目,还记得第五节讲到的解决路由环路的方法吗?关闭水平分割后,从这个接口发出去的更新将包含从这个接口接收到的更新,而这些更新本来是应该被水平分割功能阻止的
关闭RIP调试输出
再次查看s1/0接口信息,显示水平分隔已关闭
可以使用下面的命令再次打开它
e. 被动接口配置:
从前面的Debug信息中包含了RIP向回环接口发送的更新,这些更新都是没有意义的,可以将回环接口设置成被动接口,这样这个接口将不再向外发送路由更新:
f. 单播更新实例:
拓扑如下:
R1配置:
R2配置:
R3配置:
使用show ip route分别查看R1、R2、R3上面的路由信息,发现R1和R2可以彼此学习到路由信息,R3学习不到任何路由信息,也不向外发送任何路由信息。使用debug ip rip在R1和R2上可以查看到”sending v1 update to 123.1.1.2″这样的单播更新包。
g. 触发更新:
距离矢量路由采用的是周期性更新,可以在串口上使用触发更新,以太网接口不支持触发更新:
h. 更改定时器:
RIP的是个定时器是可以更改的,但一般不建议更改,更改方法如下:
更改4个定时器的默认值语法:
timers basic updates invalid holddown flush
查看更改后的值
评论前必须 ☞☞ 登录/注册 !