路由環路及解決辦法

路由環路:在維護路由表信息的時候,如果在拓撲發生改變後,網絡收斂緩慢產生了不協調或者矛盾的路由選擇條目,就會發生路由環路的問題,這種條件下,路由器對無法到達的網絡路由不予理睬,導致用戶的數據包不停在網絡上循環發送,最終造成網絡資源的嚴重浪費。鏈路狀態算法(OSPF)不會產生路由環路,因此,消除路由環路的技術,都是針對距離向量協議進行的。路由環路的形成大致如下述:

當C路由器一側的X網絡(192.168.4.0)發生故障,則C路由器收到故障信息,並在路由表中把X網絡設置爲不可達,等待更新週期到時來通知相鄰的B路由器。但這時,如果相鄰的B路由器的更新週期先來了,則C路由器將從B路由器那學習並更新到達X網絡的路由。這是錯誤路由,因爲此時的X網絡已經損壞,而C路由器卻在自己的路由表內增加了一條經過B 路由器到達X網絡的路由。然後C路由器還會繼續把該錯誤路由通告給B路由器,B路由器更新路由表,認爲到達X網絡須經過C路由,然後繼續通知相鄰的路由器,至此路由環路形成,C路由器認爲到達X網絡經過B路由器,而B則認爲到達X網絡進過C路由器。


解決路由環路問題的方法,概括來講,主要分爲六種:

1.定義最大值:
距離矢量路由算法可以通過IP頭中的生存時間(TTL)來糾錯,但路由環路問題可能首先要求無窮計數。爲了避免這個延時問題,距離矢量協議定義了一個最大值,這個數字是指最大的度量值,如RIP協議最大值爲16跳。也就是說,路由更新信息可以向不可到達的網絡的路由中的路由器發送15次,一旦達到最大值16,就視爲網絡不可到達,存在故障,將不再接受來自訪問該網絡的任何路由更新信息。


2.水平分割:
一種消除路由環路並加快網絡收斂的方法是通過叫做“水平分割”的技術實現的。其規則就是不向原始路由更新的方向再次發送路由更新信息(個人理解爲單向更新,單向反饋)。比如有三臺路由器ABC,B向C學習到訪問網絡192.168.4.0的路徑以後,不再向C聲明自己可以通過C訪問10.4.0.0網絡的路徑信息,A向B學習到訪問192.168.4.0網絡路徑信息後,也不再向B聲明,而一旦網絡192.168.4.0發生故障無法訪問,C會向A和B發送該網絡不可達到的路由更新信息,但不會再學習A和B發送的能夠到達192.168.4.0的錯誤信息。


3.路由中毒(也稱爲路由毒化): 
定義最大值在一定程度上解決了路由環路問題,但並不徹底,可以看到,在達到最大值之前,路由環路還是存在的。爲此,路由中毒就可以徹底解決這個問題。其原理是這樣的:假設有三臺路由器ABC,當網絡192.168.4.0出現故障無法訪問時,路由器C立即向鄰居路由發送相關路由更新信息,並將其度量值標爲無窮大,告訴它們網絡192.168.4.0不可到達,路由器B收到毒化消息後將該鏈路路由表項標記爲無窮大,表示該路徑已經失效,並向鄰居A路由器通告,依次毒化各個路由器,告訴鄰居192.168.4.0這個網絡已經失效,不再接收更新信息,從而避免了路由環路。


4.反向中毒(也稱爲毒化逆轉):
結合上面的例子,當路由器B看到到達網絡192.168.4.0的度量值爲無窮大的時候,就發送一個叫做毒化逆轉的更新信息給C路由器,說明192.168.4.0這個網絡不可達到,這是超越水平分割的一個特列,這樣保證所有的路由器都接受到了毒化的路由信息。


5.控制更新時間(即抑制計時器):
抑制計時器用於阻止定期更新的消息在不恰當的時間內重置一個已經壞掉的路由。抑制計時器告訴路由器把可能影響路由的任何改變暫時保持一段時間,抑制時間通常比更新信息發送到整個網絡的時間要長。當路由器從鄰居接收到以前能夠訪問的網絡現在不能訪問的更新後,就將該路由標記爲不可訪問,並啓動一個抑制計時器,如果再次收到從鄰居發送來的更新信息,包含一個比原來路徑具有更好度量值的路由,就標記爲可以訪問,並取消抑制計時器。如果在抑制計時器超時之前從不同鄰居收到的更新信息包含的度量值比以前的更差,更新將被忽略,這樣可以有更多的時間讓更新信息傳遍整個網絡。路由中毒和抑制時間結合起來可以在一定程度上避免路由環路的產生,並且抑制復位接口引起的網絡震盪。路由中毒即在網絡故障或接口復位時,讓相應的路由項中毒,即將路由項的度量值設爲無窮大,表示該路由項已經失效,一般在這個時候都會同時啓動抑制時間。比如上面圖示的X網絡出現故障,則C路由器到X網絡的路由表的度量值會被設置爲最大,表示X網絡已經不可達,並啓動抑制時間。如果在抑制時間結束前,C路由器在X網絡側接收到到達X網絡的路由,則更新路由項,因爲此時的X網絡故障已經排除,並且刪除抑制時間。如果有從別的路由器接收到到達X網絡的路由(上圖沒有),並且新的度量值比舊的好,則更新路由項,刪除抑制時間,因爲此時可能有另一條不經過C但可以到達X網絡側的路由器的路徑。但是如果度量值沒有以前的好,則不進行更新。


6.觸發更新:
正常情況下,路由器會定期將路由表發送給鄰居路由器。而觸發更新就是立刻發送路由更新信息,以響應某些變化。檢測到網絡故障的路由器會立即發送一個更新信息給鄰居路由器,並依次產生觸發更新通知它們的鄰居路由器,使整個網絡上的路由器在最短的時間內收到更新信息,從而快速瞭解整個網絡的變化。但這樣也是有問題存在,有可能包含更新信息的數據包被某些網絡中的鏈路丟失或損壞,其它路由器沒能及時收到觸發更新,因此就產生了結合抑制的觸發更新,抑制規則要求一旦路由無效,在抑制時間內,到達同一目的地有同樣或更差度量值的路由將會被忽略,這樣觸發更新將有時間傳遍整個網絡,從而避免了已經損壞的路由重新插入到已經收到觸發更新的鄰居中,也就解決了路由環路的問題。


回顧下上圖示路由環路的產生,C路由器接收到X網絡故障信息後,等待更新週期的到來後再通知B路由器,結果B的更新週期提早到來,結果掩蓋了X網絡的故障信息,從而形成環路。觸發更新的機制正是用來解決這個問題,在收到故障信息後,不等待更新週期的到來,立即發送路由更新信息。但是還是有個問題,如果在觸發更新剛要啓動時卻收到了來自B的更新信息,就會進行錯誤的更新。可以將抑制時間和觸發更新相結合,當收到故障信息後,立即啓動抑制時間,在這段時間內,不會輕易接受路由更新信息,這個機制就可以確保觸發信息有足夠的時間在網絡中傳播。


小提示:
路由中毒:是指在路由信息在路由表中失效時,先將度量值變爲無窮大,而不是馬上從路由表中刪掉這條路由信息。(這句話要理解,如RIP協議中,其度量值變爲16,意味着路由不可達)再將其信息發佈出去,這樣相鄰的路由器就得知這條路由己無效了.....


毒性反轉與路由中毒概念是不一樣的,它是指收到路由中毒消息的路由器,不遵守水平分割原則將中毒消息轉發給所有的相鄰路由器,也包括髮送中毒信息的源路由器,也就是通告相鄰路由器這條路由信息己失效了。。主要目的是達到快速收斂的目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章