DV問題
路由振盪
舉個例子
路由器 A---B
發生的事情 | A中到目的N | B中到目的N |
---|---|---|
A給B更新,N可達 | 可達 | 可達 |
A收到N不可達的RIP報文,給B更新。由於A-B上的時延,B也給A更新。 | 可達 | 不可達 |
過了一段時間,A告訴B可達,B告訴A不可達 | 不可達 | 可達 |
... | .... | ... |
就會一直往復下去。
路由回路
假如有這么一個拓撲,10.4.0.0接口斷開,從C的路由表中消失。
這時候C還更新周期還沒到,B的更新周期到了,B給A和C發送RIP報文,C進行了更新。
之后,C給B發送RIP報文,進行更新,於是B、C的路由表就會變成這樣
路由器 | 到目的10.4.0.0d的下一條路由器 |
---|---|
B | C |
C | B |
於是就產生了路由環路。
跳數無限大
在上面這個例子,就會發生跳數會一直增大,變成無限(假設不加以限定的話)
DV規則
設定最大跳數
設定最大跳數為15,16就是不可達
水平分割split horizons
概念:由於路由器可能收到它自己發送的路由信息,而這種信息是無用的。
原理:路由器從某個接口接收到的更新信息不允許再從這個接口發回去。
優點
-
能夠阻止路由環路的產生。
-
減少路由器更新信息占用的鏈路帶寬資源。
思想
就是在路由信息傳送過程中,不再把路由信息發送到接收到此路由信息的接口上。從而在一定程度上避免了環路的產生。
路由毒化Route Poisoning
還是這個例子,10.4.0.0網絡從C斷開后,C不是直接刪除條目。而是
- C發現與10.4.0.0連接發生故障
- C將自己關於10.4.0.0的路由信息毒化,更新設置距離向量中的距離為16
- C把毒化后的信息發送給鄰接路由器B,意義就是”這個網段怎么走我現在無可奉告了“,B會對收到的信息與自身路由表進行比對,如果路由表下一條是C(解釋1),B也會把10.4.0.0的網段的路由信息毒化。
- 於是最多只要兩個周期,就能完成收斂。
解釋1:為了避免這樣一種情況,拓撲結構發生了改變,10.4.0.0網段從C斷開,接入了B,這時候B已經更新了路由表,設10.4.0.0可達,但下一條不是C,這時候到10.4.0.0網段已經和C沒關系了,所以不可以被毒化。
毒性逆轉Poisoned Reverse
有了路由毒化,可能還會有一些問題。比如我們又產生了路由震盪中的時延問題,可能BC的狀態會變成這樣
路由器 | 到目的10.4.0.0d的下一條路由器 | 距離 |
---|---|---|
B | C | 16 |
C | B | 2 |
這明顯是有問題的,所以需要配合毒性逆轉。
毒性逆轉實際上是一種改進的水平分割。
這種方法的運作原理是:路由器從某個接口上接收到某個網段的路由信息之后,並不是不往回發送信息了,而是發送,只不過是將這個網段的跳數設為無限大,再發送出去。
抽象來說,就是如果Z的最短路徑要通過鄰居Y,那么它將告訴Y自己到目的節點的距離是∞。這樣,Z向Y撒了一個善意的謊言,使得只要Z經過Y選路到X,它就會一直持續講述這個謊言,這樣Y也就永遠不會嘗試從Z選路到X了,也就避免了環路問題。
RIP規則
RIP是一種分布式的基於距離向量的路由選擇協議
- 對地址為X的路由器發來的RIP報文,先進行修改,把下一條地址都改為X,把距離都+1。每一個項目都三個關鍵數據:目的網絡N、距離d、下一條路由器X
- 對修改后的RIP報文的每一個項目,進行以下步驟:
- 若原路由表沒有目的網絡N,直接寫進去
- 否則(即原本就有到目的網絡N的條目了)
- 若下一條路由器地址為X,則進行替換(解釋1)
- 否則(有到目的網絡N,但下一條不是X)
- 若d<路由表中的距離,進行更新(解釋2)
- 否則什么也不做(解釋3)
- 若3分組還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記為不可達的路由器,距離設為16
- 返回
解釋1:因為這是最新的消息,到目的網絡的距離可能增大或減小,比如拓撲發生了改變?。不過不管怎么樣,X的消息總是最新的,聽他的就是了
解釋2:DV以跳數作為評判,距離小了當然要更新。
解釋3:沒有好處,不更新。
舉個例子
RIP計時器
更新計時器
用於實現對路由條目的周期交互(是否有數據流量),默認是30秒更新一次路由表中的信息。
失效計時器
如果某一條路由信息在180s內沒有收到更新或確認,那么這條路由信息將被標記為“失效”。
如果路由器30s還未收到鄰居發過來的路由更新包,則更新計時器超時。如果再過150s,達到180s(即30s + 150s = 180s)還沒收到路由更新包,說明失效計時器超時了,然后路由器將鄰居路由器的相應路由條目標記為is possibly down,此時並不是真正失效了,是提示快要失效了。
抑制計時器
失效計時器到時,立馬進入180s的抑制計時器,用於防止路由環路。
如果在抑制期間從任何相鄰路由器接收到少量的路由更新包,則恢復該網絡並刪除抑制計時器。
如果在抑制期間從相鄰路由器收到的一條路由更新的跳數大於路由表已記錄的跳數,則該更新將被忽略。
刷新計時器
失效計時器到時,再過60s
,達到240s的刷新計時器(180s + 60s = 240s),還沒收到路由更新包。路由器就刷新路由表,把不可達的路由條目刪掉。