RIP常用的计时器有4个,分别是更新时间(update timer)、无效时间(invalid timer)、抑制时间(holddown timer)和刷新时间(flush timer)。默认情况下更新时间为30秒,无效时间位180秒,抑制时间180秒,刷新时间为240秒。

Update timer

首先说说更新时间,更新时间用来规定RIP周期发送响应消息(response message)的时间。默认30秒,但是不是标准的30秒,它有一个随机变量。典型的RIP的更新时间大约是25~35秒,而思科将变量缩短为更新时间的15%,所以思科路由器中的更新时间位25.5~30秒之间。我们可以用

1
Debug ip rip

抓获RIP的相关信息。如下抓到的RIP发送响应消息的debug信息:

RIP计时器-成长便签

上图我们看到,R1在1:58.827的时候从S1/1口发送了一个更新信息(也就是response消息),接着在2:24.667的时候又发送了一个更新信息,两个时间之差是25.840秒。正好再25~35这个范围之内。

Invalid timer

接着是无效时间,当一个RIP路由条目在失效时间之内还没有收到该路由条目的更新信息,那么路由器将把该路由条目设置为不可达(Metric为16)向往更新出去,然后在自己的路由表中把该路由条目设置为可能丢失(possibly down)。我们可以在路由对端设置被动接口(只接受,但是不向外发送更新信息,后面会讲),让本端路由器暂时收不到对端的路由更新,以达到超时的效果,如下是失效计时器超时后的情况:

RIP计时器-成长便签

  上图我们可以看到2.0.0.0这个路由条目已经在R1的路由条目中标记为possibly down,并且从Serial1/1口和lookback0口发送该条路由的触发更新(flash update),metric为16跳。后面的周期更新中也是metric为16跳。

Flush timer

在刷新时间内,如果一条路由条目都没有收到更新,那么该路由条目将被移除路由表。默认情况下刷新时间位240秒,也就是路由条目进入possibly down状态以后再过60秒。

Holddown timer

这个计时器有点怪异,在卷一中,作者说:“如果一条路由更新的跳数大于路由表已记录的该路由的跳数,那么将会引起该路由进入长达180s(即6个路由更新周期)的抑制状态阶段”。“如果在抑制时间超时后,同一台邻居路由器仍然通告这个有较大跳数的路由,路由器则接受该路由新的度量值”。上面两句话结合起来就是说路由器收到从同一个下一跳发所过来的高metric路由条目后会进入抑制状态,在抑制时间内路由器不接收该条目的路由信息,知道抑制时间超时。但是这个和实验结果是相悖的,我们用如下拓扑做个实验看看:

RIP计时器-成长便签

R1向外宣告一个环回口1.1.1.1,接着R2和R3就会收到1.0.0.0的路由条目。接着我们在R1上利用偏移列表(后面会提到)将该条目发送出去的时候把metric该大,然后R2下次收到这个路由条目的时候metric就会变大了。我们先看看R2现在的路由表,如下:

RIP计时器-成长便签

接着我把1.1.1.1的mertic该大,看看R2上的debug信息:

*Mar 1 00:23:39.367: RIP: received v1 update from 12.1.1.1 on Serial1/0
*Mar 1 00:23:39.371: 1.0.0.0 in 6 hops
*Mar 1 00:23:41.471: RIP: sending v1 flash update to 255.255.255.255 via Loopback0 (2.2.2.2)
*Mar 1 00:23:41.471: RIP: build flash update entries
*Mar 1 00:23:41.475: network 1.0.0.0 metric 7
*Mar 1 00:23:41.479: RIP: sending v1 flash update to 255.255.255.255 via Serial1/1 (23.1.1.1)
*Mar 1 00:23:41.479: RIP: build flash update entries
*Mar 1 00:23:41.483: network 1.0.0.0 metric 7
*Mar 1 00:23:45.883: RIP: sending v1 update to 255.255.255.255 via Loopback0 (2.2.2.2)
*Mar 1 00:23:45.887: RIP: build update entries
*Mar 1 00:23:45.887: network 1.0.0.0 metric 7
*Mar 1 00:23:45.891: network 3.0.0.0 metric 2
*Mar 1 00:23:45.891: network 12.0.0.0 metric 1
*Mar 1 00:23:45.895: network 23.0.0.0 metric 1

Debug信息我们会发现R2从R1收到1.0.0.0跳数为6的路由条目后,直接会向外发送触发更新,并且直接替换路由表,如下:

RIP计时器-成长便签

  看来确实没有进入抑制状态,或者说进入抑制状态了,抑制没生效。我们再看一个进入抑制状态的例子,当一跳路由条目到达失效时间以后,路由器也会启动抑制状态,我们可以利用

1
Debug ip routing

看到这个现象。还是R1和R2之间,我们在把R2的s1/0口设置被动接口,然后等到失效计时器超时,然后接着关掉被动接口让它接受路由信息,看看这个过程会不会抑制。R1的debug信息如下:

*Mar 1 00:32:05.959: RT: delete route to 2.0.0.0 via 12.1.1.2, rip metric [120/1]
*Mar 1 00:32:05.963: RT: SET_LAST_RDB for 2.0.0.0/8
OLD rdb: via 11.13.11.13
*Mar 1 00:32:05.967: RT: no routes to 2.0.0.0, entering holddown
*Mar 1 00:32:05.971: RT: NET-RED 2.0.0.0/8
*Mar 1 00:32:05.975: RT: delete route to 3.0.0.0 via 12.1.1.2, rip metric [120/2]
*Mar 1 00:32:05.975: RT: SET_LAST_RDB for 3.0.0.0/8
OLD rdb: via 11.13.11.13
*Mar 1 00:32:05.979: RT: no routes to 3.0.0.0, entering holddown
*Mar 1 00:32:05.983: RT: NET-RED 3.0.0.0/8
*Mar 1 00:32:05.987: RT: delete route to 23.0.0.0 via 12.1.1.2, rip metric [120/1]
*Mar 1 00:32:05.991: RT: SET_LAST_RDB for 23.0.0.0/8
OLD rdb: via 11.13.11.13
*Mar 1 00:32:05.995: RT: no routes to 23.0.0.0, entering holddown
*Mar 1 00:32:05.999: RT: NET-RED 23.0.0.0/8
*Mar 1 00:32:19.959: RIP: received v1 update from 12.1.1.2 on Serial1/1
*Mar 1 00:32:19.959: 2.0.0.0 in 1 hops
*Mar 1 00:32:19.963: RT: 2.0.0.0 came out of holddown
*Mar 1 00:32:19.967: RT: SET_LAST_RDB for 2.0.0.0/8
NEW rdb: via 12.1.1.2
*Mar 1 00:32:19.971: RT: add 2.0.0.0/8 via 12.1.1.2, rip metric [120/1]
*Mar 1 00:32:19.971: RT: NET-RED 2.0.0.0/8
*Mar 1 00:32:19.975: 3.0.0.0 in 2 hops
*Mar 1 00:32:19.979: RT: 3.0.0.0 came out of holddown
*Mar 1 00:32:19.979: RT: SET_LAST_RDB for 3.0.0.0/8
NEW rdb: via 12.1.1.2
*Mar 1 00:32:19.983: RT: add 3.0.0.0/8 via 12.1.1.2, rip metric [120/2]
*Mar 1 00:32:19.987: RT: NET-RED 3.0.0.0/8
*Mar 1 00:32:19.991: 23.0.0.0 in 1 hops
*Mar 1 00:32:19.995: RT: 23.0.0.0 came out of holddown
*Mar 1 00:32:19.995: RT: SET_LAST_RDB for 23.0.0.0/8
NEW rdb: via 12.1.1.2
*Mar 1 00:32:19.999: RT: add 23.0.0.0/8 via 12.1.1.2, rip metric [120/1]
*Mar 1 00:32:20.003: RT: NET-RED 23.0.0.0/8

上面我们可以看到当失效时间超时以后,失效的路由条目全部进入holddown状态,这时我们迅速关闭R2的被动接口,然后R1马上又跳出holddown状态,路由表又恢复正常了。虽然进入抑制了,但是还是跳出,没有起到抑制的效果。或许是我们的实验有问题,但是这个holddown确实很怪异。

修改RIP计时器

RIP的计时器可以手动进行修改,我们可以在RIP进程下使用命令

1
timers basic

进行修改,我们修改R1的计时器看看效果,配置如下:

timers basic 10 30 30 70

效果如下:

RIP计时器-成长便签

  上面的信息我们可以使用

1
show ip protocols

查看。