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

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

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

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

鄰居ide

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

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

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

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

鏈路狀態泛洪擴散class

當鄰接關係創建以後,路由器就會開始向鄰居發送LSA。路由器會保存收到的LSA而且依次向本身的每一個鄰居擴散。因爲LSA是幾乎馬上被轉發,而距離矢量路由協議則是在發送路由更新(不管是剛剛創建仍是觸發更新)以前先更新自身的路由表,於是當網絡拓撲發生變化時,鏈路狀態協議的收斂速度要快於距離矢量協議。配置

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

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

鏈路狀態數據庫

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

相關文章
相關標籤/搜索