OSPF 距離矢量路由協議和鏈路狀態路由協議相比

距離矢量路由協議和鏈路狀態路由協議相比,前者是依照“傳聞”來進行路由選擇,而後者是每臺路由器獨立地計算最優路徑。

詳細地說,每臺運行了鏈路狀態路由協議的路由器會和它的鄰居建立鄰接關係並且互相給自己的每個鄰居發送一些數據(在此我們用OSPF中的術語“LSA”稱呼),LSA中包含了本地鏈路、鏈路狀態、路由接口到鏈路的代價、鏈路連接的所有鄰居等信息。當一臺路由器收到了另一臺路由器發送的LSA後,它會將其中信息複製一份放在自己的數據庫中並繼續將此信息發送給其他路由器。如果一切順利的話,所有路由器的數據庫都會一致。此時,路由器使用Dijkstra算法對網絡圖進行計算得出到每臺路由器的最優路徑,再從數據庫中查找每臺路由器所連接的子網並寫進路由表。

較爲常見的鏈路狀態路由協議有OSPF(開放式最短路徑優先)、IS-IS(中間系統到中間系統)等。

鄰居

建立鏈路狀態環境的第一步是使用Hello Protocol發現鄰居。

Hello數據包中一定包含路由器ID、發送數據包的網絡地址等信息。路由器ID用於將路由器與路由器區分開來。Hello數據包的其他字段還可以有子網掩碼、Hello間隔、線路類型描述符等信息。

當兩臺路由器使用Hello數據包建立了鄰接關係後,鏈路狀態路由協議就可以開始在受控的方式下交換信息了。與距離矢量路由協議不同,鏈路狀態協議只需要在配置了路由協議的接口上廣播更新信息。

Hello數據包還可以用來監視鄰接關係。某臺路由器如果在特定的時間內沒有從鄰居收到Hello包的話,就會認爲該鄰居不可達並解除理解關係。CISCO默認的Hello數據包發送間隔爲10秒,死亡週期是間隔時間的4倍。

鏈路狀態泛洪擴散

當鄰接關係建立之後,路由器就會開始向鄰居發送LSA。路由器會保存收到的LSA並且依次向自己的每個鄰居擴散。由於LSA是幾乎立刻被轉發,而距離矢量路由協議則是在發送路由更新(無論是剛剛建立還是觸發更新)之前先更新自身的路由表,因而當網絡拓撲發生變化時,鏈路狀態協議的收斂速度要快於距離矢量協議。

使用單播和組播地址、校驗和以及主動確認能夠使泛洪擴散更加高效可靠。

由於鏈路狀態路由協議必須保證所有路由器都收到LSA,那麼就出現了一個問題:當所有路由器都收到LSA後,泛洪擴散如何中止呢?即使數據包中的TTL過期後會中止,但是在過期之前,這些數據包還是會無可避免地佔用鏈路資源。解決這個問題的辦法是在LSA中加入序列號,路由器如果收到一個與之前收到過的擁有相同序列號的LSA數據包的話,它會自動將該數據包丟棄;只有在收到了一個比自己接收的上個序列號數值更高的LSA數據包時,他纔會更新數據庫。那麼這時又有一個新的問題:如果序列號到達了上限,這可如何是好?這個問題解決起來方法多樣且較爲複雜,詳情見下篇筆記。

鏈路狀態數據庫

發現鄰居並且進行鏈路狀態泛洪擴散後,路由器就會建立鏈路狀態數據庫。數據庫根據LSA中的信息建立。需要注意的是,LSA中包含有一個被稱爲代價的,即某條鏈路到鄰居的信息。代價與出接口有關,因此會存在鏈路兩端代價不相同的情況。

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