8.1.3 RIP路由更新机制
RIP协议有两种更新机制:一是定期更新,二是触发更新。“定期更新”是根据设置的更新计时器定期发送RIP路由通告。该通告报文中携带了除“水平分割”机制抑制的RIP路由之外本地路由器中的所有RIP路由信息。而“触发更新”则是RIP路由器仅在有路由表项发生变化时发送的RIP路由通告,仅携带本地路由表中有变化的路由信息。RIP路由器一旦察觉到网络变化,就尽快甚至是立即发送更新报文,而不等待更新周期结束。只要触发更新的速度足够快,就可以大大地防止“计数到无穷大”的发生,但是这一现象还是有可能发生的。
无论是定期更新,还是触发更新,RIP路由的更新规则如下:
l 如果更新的某路由表项在路由表中没有,则直接在路由表中添加该路由表项;
l 如果路由表中已有相同目的网络的路由表项,且来源端口相同,那么无条件根据最新的路由信息更新其路由表;
l 如果路由表中已有相同目的网络的路由表项,但来源端口不同,则要比较它们的度量值,将度量值较小的一个作为自己的路由表项;
l 如果路由表中已有相同目的网络的路由表项,且度量值相等,保留原来的路由表项。
下面主要介绍RIP路由的定期更新机制。
1.RIP路由定期更新机制
RIP路由器总是会每隔30秒(这是默认值,可以修改,而且也可能与设置值有些偏差)通过UDP 520端口以RIP广播应答方式向邻居路由器发送的一个路由更新包,包中包括了本路由器上的完整的路由表(除了被“水平分割”机制抑制的路由表项),用来向邻居路由器提供路由更新,同时用来向邻居路由器证明自己的存在。RIP的路由表中主要包括“目的网络”、“下一跳地址”和“距离”这三个字段,参见图8-3。
如果一个路由器在180秒(这也是默认值,可以修改)内没有收到某个邻居路由器发来的路由更新,则这个路由器就会标记该邻居路由器为不可达路由器,使这个邻居路由器处于抑制周期。当路由器处于抑制周期内,它仍然用于向前转发数据包,但网络中的其它路由器不学习到达该路由器所连网络的路由信息,除非是一条更好的到达该路由器所连网络的路由信息,如本来是3跳,在抑制周期内学到了一条2跳的路由信息。但抑制周期过后,即使是差的路由信息也接受。
如果在连续的240秒(这也是默认值,可以修改)内还没收到这个路由器的路由更新,则本地路由器会在路由表中删除与该邻居路由器相关的路由表项。
由此可见,这个路由更新不仅影响着整个RIP网络中的路由器上最由表的更新和所有需要到达,或者经过该路由器的数据包路由,还影响着其它邻居路由器是否当它存在。试想一下,如果有一个数据包是要发送到连接某个某个RIP路由器的网络的一台主机上,但这台RIP路由器当时恰好出现了故障,没有这个路由器更新机制的话,其它路由器也就不知道它当前出现了故障,仍按原来的路由路径传输数据包,结果当然是数据包总是无法到达目的主机了,尽管可能经过多次尝试。
2.RIP路由定期更新机制解析示例
为了更好地理解RIP协议路由表的更新机制,下面以图8-6所示的简单的互连网络为例来讨论图中各个路由器中的路由表是怎样建立的。
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Network/lyjs/
图8-6 RIP路由表建立网络示例
(1)在一开始,所有路由器中的路由表只有自己所直接连接的网络的路由表项信息。但不是RIP路由表项,是直连路由表项,无需下一跳(用“--”表示),度量“距离”也均为0 ,各路由器的初始路由表如图8-7所示,均只有两条直连网络的路由表项。
(2)接下来,各路由器就会按设置的周期(默认为30秒)向邻居路由器发送路由更新了。具体哪个路由器会先发送路由更新,取决于哪个路由器先开了。现假设路由器R2先收到来自路由器R1和R3的路由更新,然后就更新自己的路由表,如图8-8所示。从中可以看出,它新添加了分别通过R1和R3到达10.0.0.0网络和30.0.0.0网络的路由表项,度量值均为1,因为它只经过了一跳。
图8-7 R1、R2和R3的初始路由表
(3)R2更新自己的路由表后,会把完整的路由表发给邻居路由器R1和R3。路由器R1和R3分别再进行更新。根据前面介绍的RIP路由表更新的规则可以知道,R1首先是把从R2上接收到的如果图8-8的路由表中,对每项度量进行加1,得到的路由表如图8-9所示。
图8-8 R2在路由更新后的路由表 图8-9 R1对收到的来自R2路由表进行度量加1后形成的路由表