解決路由環路問題的探討

在維護路由表信息的時候,如果在拓撲發生改變後,網絡收斂緩慢產生了不協調或者矛盾的路有選擇條目,就會發生路由環路的問題,這種條件下,路由器對無法到達的網絡路由不予理睬,導致用戶的數據包不停在網絡上循環發送,最終造成網絡資源的嚴重浪費。爲此,解決路由環路的問題的方法就出現了。
解決路由環路問題的方法,概括來講,主要分爲六種:
1.定義最大值;
2.水平分割技術;
3.路由中毒;
4.反向路由中毒;
5.控制更新時間;
6.觸發更新。
下面我們就來一一講解各種解決方法的實現原理:
1.定義最大值:
距離矢量路由算法可以通過IP頭中的生存時間(TTL)自糾錯,但路由環路問題可能首先要求無窮計數。爲了避免這個延時問題,距離矢量協議定義了一個最大值,這個數字是指最大的度量值(最大值爲16),比如跳數。也就是說,路由更新信息可以向不可到達的網絡的路由中的路由器發送15次,一旦達到最大值16,就視爲網絡不可到達,存在故障,將不再接受來自訪問該網絡的任何路由更新信息。
2.水平分割:
一種消除路有環路並加快網絡收斂的方法是通過叫做“水平分割”的技術實現的。其規則就是不向原始路由更新來的方向再次發送路由更新信息(個人理解爲單向更新,單向反饋)。比如有三臺路由器ABC,B向C學習到訪問網絡10.4.0.0的路徑以後,不再向C聲明自己可以通過C訪問10.4.0.0網絡的路徑信息,A向B學習到訪問10.4.0.0網絡路徑信息後,也不再向B聲明,而一旦網絡10.4.0.0發生故障無法訪問,C會向A和B發送該網絡不可達到的路由更新信息,但不會再學習A和B發送的能夠到達10.4.0.0的錯誤信息。
3.路由中毒(也稱爲路由毒化):
定義最大值在一定程度上解決了路由環路問題,但並不徹底,可以看到,在達到最大值之前,路由環路還是存在的。爲此,路由中毒就可以徹底解決這個問題。其原理是這樣的:假設有三臺路由器ABC,當網絡10.4.0.0出現故障無法訪問的時候,路由器C便向鄰居路由發送相關路由更新信息,並將其度量值標爲無窮大,告訴它們網絡10.4.0.0不可到達,路由器B收到毒化消息後將該鏈路路由表項標記爲無窮大,表示該路徑已經失效,並向鄰居A路由器通告,依次毒化各個路由器,告訴鄰居10.4.0.0這個網絡已經失效,不再接收更新信息,從而避免了路由環路。
4.反向中毒(也稱爲毒化逆轉):
結合上面的例子,當路由器B看到到達網絡10.4.0.0的度量值爲無窮大的時候,就發送一個叫做毒化逆轉的更新信息給C路由器,說明10.4.0.0這個網絡不可達到,這是超越水平分割的一個特列,這樣保證所有的路由器都接受到了毒化的路由信息。
5.控制更新時間(即抑制計時器):
抑制計時器用於阻止定期更新的消息在不恰當的時間內重置一個已經壞掉的路由。抑制計時器告訴路由器把可能影響路由的任何改變暫時保持一段時間,抑制時間通常比更新信息發送到整個網絡的時間要長。當路由器從鄰居接收到以前能夠訪問的網絡現在不能訪問的更新後,就將該路由標記爲不可訪問,並啓動一個抑制計時器,如果再次收到從鄰居發送來的更新信息,包含一個比原來路徑具有更好度量值的路由,就標記爲可以訪問,並取消抑制計時器。如果在抑制計時器超時之前從不同鄰居收到的更新信息包含的度量值比以前的更差,更新將被忽略,這樣可以有更多的時間讓更新信息傳遍整個網絡。
6.觸發更新:
正常情況下,路由器會定期將路由表發送給鄰居路由器。而觸發更新就是立刻發送路由更新信息,以響應某些變化。檢測到網絡故障的路由器會立即發送一個更新信息給鄰居路由器,並依次產生觸發更新通知它們的鄰居路由器,使整個網絡上的路由器在最短的時間內收到更新信息,從而快速瞭解整個網絡的變化。但這樣也是有問題存在,有可能包含更新信息的數據包被某些網絡中的鏈路丟失或損壞,其他路由器沒能及時收到觸發更新,因此就產生了結合抑制的觸發更新,抑制規則要求一旦路由無效,在抑制時間內,到達同一目的地有同樣或更差度量值的路由將會被忽略,這樣觸發更新將有時間傳遍整個網絡,從而避免了已經損壞的路由重新插入到已經收到觸發更新的鄰居中,也就解決了路由環路的問題。
以上探討的解決方案可以同時工作,以防止在更復雜的網絡設計中出現路由環路的問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章