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