1. 程式人生 > >路由環路的產生及解決方案

路由環路的產生及解決方案

STP用來解決交換機之間產生的環路,下面說的幾種方法用來解決路由器之間產生的環路

路由環路的產生:
       當A路由器一側的X網路發生故障,則A路由器收到故障資訊,並把X網路設定為不可達,等待更新週期來通知相鄰的B路由器。但是,如果相鄰的B路由器的更新週期先來了,則A路由器講從B路由器那學習了到達X網路的路由,就是錯誤路由,因為此時的X網路已經損壞,而A路由器卻在自己的路由表內增加了一條經過B路由器到達X網路的路由。然後A路由器還會繼續把該錯誤路由通告給B路由器,B路由器更新路由表,認為到達X網路須經過A路由,然後繼續通知相鄰的路由器,至此路由環路形成,A路由器認為到達X網路經過B路由器,而B則認為到達X網路進過A路由器。

解決方法:

         定義一個最大值(defining a maximum):

如上所述,路由環路形成時,A和B路由器相互不斷更新到X網路的路由表時,跳數不斷增加,網路一直無法收斂。所以給條數定義一個最大

值,當條數達到這個最大值時,則X網路被認為是不可達的。但是定義最大值不能避免環路產生,而且最大條數不能定義太大,不然耗費大量

時間進行收斂,也不能定義太小,如果太小則只侷限與一個小型的網路中。

      水平分割(split horizon):

看看路由環路產生得原因,A從B那收到到達X網路的路由資訊,接著又把該資訊發給B網路,從而引起相互不斷的更新,而水平分割就是不

允許路由器將路由更新資訊再次傳回到接收傳出該路由資訊的埠,即A從B收到路由資訊後,A不能把該資訊再次回傳給B,這就在一定程度

上避免了環路的產生。

         路由中毒和抑制時間(route prisoning  and  holddown time)

       這兩者結合起來可以在一定程度上避免路由環路的產生,並且抑制復位介面引起的網路震盪。路由中毒即在網路故障或介面復位時,讓

相應的路由項中毒,即將路由項的度量值(metric)設為無窮大,表示該路由項已經失效,一般在這個時候都會同時啟動抑制時間。舉個例

子,比如上面的X網路出現故障,則A路由器到X網路的路由表的度量值會被設定為最大,表示X網路已經不可達,並啟動抑制時間。如果在

抑制時間結束前,在X網路側接收到到達X網路的路由,則更新路由項,因為此時的X網路故障已經排除,並且刪除抑制時間。如果從B路由

器或有其他的C路由器接收到到達X網路的路由,並且新的度量值比舊的好,則更新路由項,刪除抑制時間,因為此時可能有另一條不經過A

但可以到達X網路側的路由器的路徑。但是如果度量值沒有以前的好,則不進行更新。

        觸發更新(triggered update)

       回顧下路由環路產生的原因,A路由器接收到X網路故障資訊後,等待更新週期的到來後再通知B路由器,結果B的更新週期提早到來,結

果掩蓋了X網路的故障資訊,從而形成環路。觸發更新的機制正是用來解決這個問題,在收到故障資訊後,不等待更新週期的到來,立即發

送路由更新資訊。但是還是有個問題,如果在觸發更新剛要啟動時卻收到了來自B的更新資訊,就會進行錯誤的更新。可以將抑制時間和觸

發更新相結合,當收到故障資訊後,立即啟動抑制時間,在這段時間內,不會輕易接受路由更新資訊,這個機制就可以確保觸發資訊有足夠

的時間在網路中傳播。