路由環路

路由環路

路由環路,就是數據包不斷在這個網路傳輸,始終到達不了目的地,導致掉線或者網路癱瘓

定義


在維護路由表信息的時候,如果在拓撲發生改變后,網路收斂緩慢產生了不協調或者矛盾的路由選擇條目,就會發生路由環路的問題,這種條件下,路由器對無法到達的網路路由不予理睬,導致用戶的數據包不停在網路上循環發送,最終造成網路資源的嚴重浪費。為此,解決路由環路的問題的方法就出現了。

產生的原因


如圖所示,在網路11.4.0.0發生故障之前,所有的路由器都具有
正確一致的路由表,網路是收斂的。在本例中,路徑開銷用跳數來計算,所以,每條鏈路的開銷是1。路由器C與網路11.4.0.0直連,跳數為0。路由器B經過路由器C 到達網路11.4.0.0,跳數為1。路由器A 經過路由器B到達網路11.4.0.0,跳數為2。
如果網路11.4.0.0 故障,就可能會在路由器之間產生路由環路,下面是產生路由環路的步驟:
1、當網路11.4.0.0 發生故障,路由器C 最先收到故障信息,路由器C 把網路11.4.0.0 設為不可達,並等待更新周期到來通告這一路由變化給相鄰路由器。如果,路由器B的路由更新周期在路由器C之前到來,那麼路由器C就會從路由器B那裡學習到去往11.4.0.0的新路由(實際上,這一路由已經是錯誤路由了)。這樣路由器C的路由表中就記錄了一條錯誤路由(經過路由器B,可去往網路11.4.0.0,跳數增加到2 )。
2、路由器C 學習了一條錯誤信息后,它會把這樣的路由信息再次通告給路由器B,根據通告原則,路由器B也會更新這樣一條錯誤路由信息,認為可以通過路由器C去往網路11.4.0.0,跳數增加到 3 。
3。這樣,路由器 B 認為 可以通過路由器C 去往網路11.4.0.0,路由器C 認為 可以通過路由器B 去往網路11.4.0.0,就形成了環路。

解決方法


解決路由環路問題的方法,概括來講,主要分為六種:
1.定義最大值;
2.水平分割技術;
4.反向路由中毒;
5.控制更新時間;
6.觸發更新。
下面我們就來一一講解各種解決方法的實現原理:

定義最大值

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

水平分割

一種消除路由環路並加快網路收斂的方法是通過叫做“水平分割”的技術實現的。其規則就是不向原始路由更新來的方向再次發送路由更新信息(個人理解為單向更新,單向反饋)。比如有三台路由器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的錯誤信息。

路由中毒

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

反向中毒

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

控制更新時間

(即抑制計時器)
抑制計時器用於阻止定期更新的消息在不恰當的時間內重置一個已經壞掉的路由。抑制計時器告訴路由器把可能影響路由的任何改變暫時保持一段時間,抑制時間通常比更新信息發送到整個網路的時間要長。當路由器從鄰居接收到以前能夠訪問的網路現在不能訪問的更新后,就將該路由標記為不可訪問,並啟動一個抑制計時器,如果再次收到從鄰居發送來的更新信息,包含一個比原來路徑具有更好度量值的路由,就標記為可以訪問,並取消抑制計時器。如果在抑制計時器超時之前從不同鄰居收到的更新信息包含的度量值比以前的更差,更新將被忽略,這樣可以有更多的時間讓更新信息傳遍整個網路。

觸發更新

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