如圖3.1(a) 中所示正常網間網拓撲結構,從G1可直接到達網絡Net1,從G2經G1(距離為1)可到達Net1.正常情況下,G2收到G1的V-D報文后,會建立一條路由(1,G1,1).
現在假設從G1到Net1的路由因故障而崩潰,但G1依然能正常工作.G1一旦檢測到不可達,會立即將原來的路由廢除(將距離改為16).然后會出現兩種可能:
第一種,在收到來自G2的V-D報文之前,G1將修改后的路由信息廣播出去,于是G2將修改其路由數據庫,將原來去往Net1的路由(1,G1,1)刪除.這是完全正常的.
第二種,在G1發送新的報文之前,G2廣播自己的V-D報文.該報文中必然有一條路由(1,1)表目,說明從G2出發,經1個驛站可以到達Net1.G1收到該報文
后,顯然會根據此表目更改自己的路由表,產生關于Net1的新路由(1,G2,2).于是G1與G2間產生尋徑環,如圖3.1(b)所示.
上述路由環會通過G1和G2間的不斷V-D報文交換而解除,但解除的過程是非常緩慢的:出現路由環后,在下一輪路由廣播中,G1將向G2通告(1,2)表目,G2收到此表目修改本地路由數據庫,將去往Net1的路由改為(1,G1,3).然后,G2向G1通告(1,3)表目,G1將去往Net1的表目改為(1,G2,4)...如此下去,直到路由長度變為16.也就是說,至少要經過7番往返(至少30*7秒),路由環才能解除.這就是所謂滿收斂問題.
其實這只是一種非常簡單的情況,路由環也可以建立在不相鄰的路由器之間.對于這種情況,假如減小路由的最大長度,對解決慢收斂問題將有所幫助,但這會限制網點的規模,無疑是不行的.
對于這種問題,有很多種辦法,在本協議的實現中,用的是水平分割(Split Horizon)和毒性逆轉法(Poison Reverse),并在毒性逆轉時采用觸發刷新(Triggered Update).具體實現是這樣的:
水平分割:當路由器從某個網絡接口發送Rip路由刷新報文時,其中不包含從該接口獲取的路由信息.
毒性逆轉:某路徑崩潰后,最早廣播此路由的路由器將原路由繼續保留在若干報文中,但指明該路由為無限長.
觸發刷新:一旦檢測到路由崩潰,立即廣播路由刷新報文,而不等到下一刷新周期.
根據路由環產生的過程,可知通過水平分割法對解決兩路由器之間形成的路由環是極為有效的方法.毒性逆轉法可解決多路由器之間的路由環問題.使用觸發刷新,顯然可以加快新路由的有效刷新.
更有這樣一個事實,從本接口發出的路由再從別的接口收到,對本地路由表是不會幫助的,正是基于這種考慮,水平分割是在RIP協議的實現中是必不可少的.對于這一點在后來的討論中會更清楚地得到熟悉.
新聞熱點
疑難解答