Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39958
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 440
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-26 20:08
文章分类

全部博文(28)

文章存档

2013年(28)

我的朋友

分类: 网络与安全

2013-02-27 20:23:36

RIP有五种防环机制:

1.计数无穷大:定义最大跳数为15跳,当16跳为不可达;

2.水平分割:从一个接口学习到的路由不会再广播回该接口,减少带宽消耗,防止路由环路,这个特点在非广播

  多路访问网络十分有用,但有时不能解决某些拓扑的环路(拓扑本身就是循环结构);

3.毒性逆转:从一个接口学习的路由会发送回该接口,但是已经被毒化了,跳数设置为16跳,可以消除对方路由

  表中的无用路由信息;

4.触发更新:一旦某条路由的度量值发生了变化,就立即向邻居路由器发布更新报文,而不等到下一刷新周期,

  避免在多个路由器之间形成路由环路的可能,加快了网络的收敛速度但会造成网络上突然的流量激增;

5.抑制计时器:防止路由表频繁跳动,增加了网络的稳定性,但也增加了收敛时间。

 RIP防环机制实验

基本配置:

R1(config-if)#int lo0
R1(config-if)#ip add 1.1.1.1 255.255.255.0

R1(config)#int s1/0
R1(config-if)#ip add 13.1.1.1 255.255.255.0

R1(config-if)#clock rate 64000
R1(config-if)#no sh

R1(config-if)#int s1/1
R1(config-if)#ip add 12.1.1.1 255.255.255.0

R1(config-if)#clock rate 64000
R1(config-if)#no sh

R1(config-if)#router rip

R1(config-router)#net 1.0.0.0
R1(config-router)#net 12.0.0.0
R1(config-router)#net 13.0.0.0
R2(config)#int s1/0
R2(config-if)#ip add 12.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#int s1/1
R2(config-if)#ip add 23.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#router rip
R2(config-router)#net 12.0.0.0
R2(config-router)#net 23.0.0.0
R3(config)#int s1/0
R3(config-if)#ip add 23.1.1.3 255.255.255.0

R3(config-if)#cl ra 64000
R3(config-if)#no sh
R3(config-if)#int s1/1
R3(config-if)#ip add 13.1.1.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#rotuer rip
R3(config-router)#net 13.0.0.0
R3(config-router)#net 23.0.0.0


一:计数无穷大

产生环路计数到16跳的工作过程:

1.R1丢失了loopback接口的网络(下面简称网络A)后,产生一个即时更新送往R2和R3。这个更新信息要告诉R2和R3,R1不再有到达网络A的路径。然而这个更新信息传输到R3被推迟了(CPU忙、链路拥塞等),但到达了R2。R2从路由表中去掉到网络A的路径。

2.R3仍未收到R1的即时更新信息,并发出它的常规路由选择更新信息,通告网络A以2跳的距离可达。R2收到这个更新信息,认为出现了一条新路径到网络A。

3.R2告诉R1它能以3跳的距离到达网络A。

4.R1告诉R3它能以4跳的距离到达网络A。

5.这个循环将进行到跳数为无穷,在RIP中定义为16。一旦一个路由器达到无穷,它将声明这条路径不可用并从路由表中删除此路径。由于记数到无穷大问题,路由选择信息将从一个路由器传到另一个路由器,每次段数加一。路由选择环路问题将无限制地进行下去,除非达到某个限制。这个限制就是RIP的最大跳数。当路径的跳数超过15,这条路径就从路由表中删除。

操作步骤:

1、被动R1的s1/1接口,令R2学到网络A是来自R3而不是R1,该过程大约需要4分钟;

R1(config)#router rip
R1(config-router)#passive-interface s1/1

2、打开各个路由器的debug,观察debug信息;

R1#debug ip rip

R2#debug ip rip

R3#debug ip rip

3、被动R1的s1/0接口,然后断开loopback0接口;

R1(config)#router rip
R1(config-router)#passive-interface s1/0
R1(config)#int lo0
R1(config-if)#sh
4、直到R1收到1.0.0.0的网络是来自R2后,再取消R1的s1/1接口的被动;

R1(config-if)#router rip
R1(config-router)#no passive-interface s1/0
5、观察debug信息:1.0.0.0这个网络已经在拓扑上出现了R1-R3-R2-R1这样的环路。

 

二:水平分割

水平分割的规则是:从一个接口学习到的路由不会再广播回该接口。

操作步骤:

1、为方便实验先断开R1的s1/0接口;

R1(config)#int s1/0
R1(config-if)#sh

2、开启R2的debug,观察R2发送和接收更新报文的情况:R2从s1/0接收来自R1的1.0.0.0/8路由条目,再从s1/0发送更新时,只有23.0.0.0的网络,并没有包括1.0.0.0的网络,但从s1/1发送到R3的更新时包括了1.0.0.0的网络,这就说明水平分割起作用了;

R2#debug ip rip

3、测试关闭水平分割后的情况:关闭水平分割后,R2从s1/0接收来自R1的1.0.0.0网络,又从s1/0发送回个R1。

R1(config)#int s1/1
R1(config-if)#no ip split-horizon

R2(config)#int s1/0

R2(config-if)#no ip split-horizon

产生环路计数到16跳(实验一):关闭水平分割后只用两个路由器就能造成环路计数到16跳的实验

1、被动掉R1的s1/1接口;

R1(config)#router rip
R1(config-router)#passive-interface s1/1

2、打开R1、R2的debug,观察debug信息;

R1#debug ip rip

R2#debug ip rip

3、关闭loopback接口;

R1(config)#int lo0
R1(config-if)#sh
4、取消R1的s1/1接口的被动;

R1(config-if)#router rip
R1(config-router)#no passive-interface s1/0
5、观察debug信息。

原理:我们把R1的S1/1出口passive了,R1就不能把lo0被shutdown的信息以flash update的形式发给R2。同时我们也把R1和R2的两接口的水平分割关了这时不知道情况的R2就发送更新对R1说:“你到lo0是2跳”。而现在R1本身已经没有了与自身直连的lo0的信息,它以为R2能通往lo0,所以就无选择的接受R2发来的2跳。当我们取消R1的S1/1被动功能,R1再对R2说:“你到lo0是3跳”。虽然比原来的差,且是从同一个接口收到的,根据距离矢量算法R2别无选择的接受。就这样它们之间就相互“欺骗”,如此循环直到出现16跳。

 

三:毒性逆转

毒性逆转的规则是:从一个接口学习的路由会发送回该接口,但是已经被毒化了,跳数设置为16跳不可达。

实验步骤:

1、为方便实验先断开R1的s1/0接口;

R1(config)#int s1/0
R1(config-if)#sh

2、打开各个路由器的debug;

R1#debug ip rip

R2#debug ip rip

R3#debug ip rip

3、关闭loopback接口;

R1(config)#int lo0
R1(config-if)#sh
4、观察debug信息:R1从接口s1/1发出又收到1.0.0.0网络,但是已被标记为16跳不可达;R2也从同一个接口即收到也发出1.0.0.0网络,但是也已经被毒化;R3也是从同一个接口即接收也发送1.0.0.0网络,但是也不可达。

说明:以上效果是不用关闭水平分割的,否则不能说明毒性逆转。

 

四:触发更新

触发更新的规则是:一旦检测到路由崩溃或变动,立即广播路由报文,而不是等到下一个更新周期。

实验步骤:

1、以R1、R2为例做实验,打开R1的debug;

R1#debug ip rip

R1#debug ip rip trigger

2、在R1的s1/1启动触发更新,观察R1的debug信息:R1启动了触发更新试图与链路的另一端的R2建立触发更新关系。R1以每5秒为一个周期发送轮询(poll)并等待确认,但发送了6个触发请求后还没有收到确认消息,那么整个轮询过程就认为超时,触发更新建立不成功,路由器R1等待下一个普通的更新时间,并广播一个普通的RIP更新。而在整个过程R2始终在广播着它自己的RIP更新。

R1(config)#int s1/1

R1(config-if)#ip rip triggered

3、在R2也打开debug,并且把R2的s1/1接口也启动触发更新,观察R2的debug信息:由请求到轮询到确认的时间是很短的,触发状态从DOWN经过INT和LOADING,最后到FULL状态。然后就是进行路由信息的交换和更新确认了。在输出信息的后面也出现了RIP更新计时器超时,是因为R2一直没有向R1发送新的更新也没有从R1那里收到新的更新,也就是RIP启用触发更新会关闭计时器的效果。

R2#debug ip rip

R2#debug ip rip trigger

R2(config)#int s1/1

R2(config-if)#ip rip triggered

4、查看路由表、RIP数据库和路由协议:可以看到路由条目时间已经很大了,很长时间没有收到邻居的更新了,这是因为启动了触发更新学到的条目是永久的(permanent)。

R2#sh ip route

R2#sh ip protocols

R2#sh ip rip database

触发更新数据包交换过程

RIP防环机制实验

 

 

阅读(425) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~