轉載自http://www.cnitblog.com/langog/articles/4578.html
dv演算法,也叫向量演算法,是路由協議rip,igrp等的演算法基礎。
其目標是尋求:
D(x,y)=min(d(x,k),D(k,y))
方法為:
基於鄰居節點的路由資訊,計算自己的最佳路由。"Routing by Rumor"說的就是這個意思。因此,節點沒有網路的全域視圖,而且路由計算的可靠程度依據上遊節點的路由資訊。
這個演算法,被證明是可以在有限時間收斂的。但是,演算法本身沒有考慮使用於路由情況下,節點或網路故障導致的恢複問題。所以為了提高演算法的魯棒性,實際使用中加入了幾種技巧。
由於dv的本質是在基於鄰居的資訊上,計算路由,所以為了防止鄰居資訊的資訊誤導,加入“水平分割”技術。該技術就是“從該介面發給鄰居的資訊中不包含從鄰居學習到的路由”。為了加強這種防止環路的效果,可以加入"毒性逆轉",也就是"從該介面發給鄰居的資訊中對從鄰居學習到的路由規定其metric=infinit"。這兩種技巧,可以解決鄰接節點間由於錯誤訊息導致的環路問題。
對於超過兩個節點的錯誤訊息導致的環路,上述辦法不能解決。其本質在於,本節點依照上遊節點給出的路徑,不可判斷是否自身在路徑上,也就是不可以監測環路存在。所以,dv演算法不能根本上防止環路的發生。為了演算法可以實際使用,人為限制環路的存留時間,也即規定了網路的規模。同時,人們又想到了一些方法來加速環路存在的情況下的路由環打破技術。“觸發更新”就是一種加快網路資訊傳遞的方法。這個方法在沒有環路的情況下,可以提高收斂速度,在有環路的情形下,可以加速錯誤訊息的迴圈,從而加速此錯誤路由到達跳數上限而破除環路。"抑制時間"是在介面收到的路由比以前從此介面收到且使用的路由變糟糕時,開啟一小段時間,禁止該路由改變。其本質是為了減小錯誤路由資訊的誤導,其思想基礎是,如過當前路由變糟糕,則很可能是錯誤路由,也就是寧可信其好,不信其壞。而且,路由變糟糕,很可能是路由環路產生的結果,所以加入"抑制時間"可以防止路由環路的繼續擴散,同時導致環路上遊的節點逾時路由。
這裡面,對"抑制時間"的理解是最難得部分。rip的rfc1058中沒有加入這個調控參數,但是cisco等廠家的產品中有這個。而且,cisco設定這個時間為180s,6個周期。考慮到路由逾時也是180s,所以,這兩個相等,可以加速環路的破環。
對於dv演算法,有個說法"好訊息傳遞快,壞訊息傳遞慢",按照Andrew s.Tanenbaum《電腦網路》的例子,這個原因可以歸結為,路由變糟糕後,在沒有水平分割等手段的處理下,這個訊息在全網擴散開的時間比好訊息緩慢。我理解為即便有上述手段,但是在不可消除的環路情況下,壞訊息總是傳遞緩慢的。
這裡,最後提出一個思考,上述的技巧是如何發現的。這需要仔細的對比,發現共性,重視差異了。