這篇文章將會讓你對OSPF有一個大概的認識,僅僅是個認識,下面進入正題。
OSPF它是一個鏈路狀態路由協議,運行OSPF的路由器它是知道知曉整個網絡拓撲結構,這就使得它不易發生路由環路,它本身也支持VLSM,路由匯總,它還引入了Area(區域)的概念使得OSPF能夠支持更大規模的網絡。OSPF它只要分為兩個版本一個是針對IPV4的OSPFv2,一個是針對IPV6的OSPFv3。
OSPF的一些重要概念
Router-ID:它是一個長度為32bit數值,用於OSPF域中唯一標識一台OSPF路由器。
MA(多路訪問)網絡:指在同一個共享介質中連接着多個設備的網絡,任意兩台設備之間都可以實現二次通信。
DR與BDR:OSPF會在每個MA網絡中選舉一個DR(指定路由器)和一個BDR(備用指定路由器),DR主要是負責監聽網絡拓撲中變更信息並通知給其他路由器,BDR主要監視DR狀態並在DR發生故障后接替它的工作。
鄰居表:當一個接口激活OSPF后,該接口將會周期性地發送hello報文從而發現直連路由上的鄰居,當發現鄰居后鄰居信息(它包括Router-ID,address,DR,BDM,MTU,等)就會寫入OSPF鄰居表。
LSDB(鏈路狀態數據庫):運行在鏈路狀態協議的路由器在網絡中泛洪的狀態信息即LSA(路由狀態通告)路由器將所有收集到的LSA裝載到自己的LSDB,所有你可以把它看做成一個集合,而他的子集就是LSA。你也可以把它看做一個對OSPF網絡的一個完整的認知。
OSPF路由表:它是根據LSDB的數據運行SPF算法得到一顆以自己為根,無環的最短路徑樹。基於這棵樹能夠到達網絡的最佳路徑,從而得到的路由信息就組成了OSPF路由表。
度量值:OSPF使用Cost(開銷)作為它的度量值。值越小路徑越優。
報文類型:報文類型分為五種主要有hello報文,DD報文,LSR報文,LSU報文,LSAck報文。
鄰居關系:在通過Hello報文發現彼此並確定雙方通訊后,邊形成了鄰居關系。
鄰接關系:在鄰居關系的基礎上,兩台設備交互DD報文,再交互包含LSA頭部的DD報文,再通過LSR交互LSA,完成LSDB同步后,兩台設備形成網絡拓撲的一致性,並開始獨立運算路由時就形成了鄰接關系。
網絡類型:OSPF的很多功能和特性都是基於接口實現的,一個OSPF接口激活后會維護很多變量,在不同的網絡類型的接口上OSPF會有不同的操作。而OSPF的網絡類型有點對點網絡,廣播性多路訪問類型,非廣播多路訪問類型,點對多點類型。
區域:在一個較大規模的網絡中我們會把OSPF划分成多個區域,同一個區域的設備會維護同一個LSDB,每個區域都會獨立SPF運算。
OSPF路由器的扮演的角色:在整個OSPF網絡中OSPF路由器所扮演的角色有內部路由器,區域邊界路由器,骨干路由器,AS邊界路由器等。
OSPF協議特性
路由匯總:當網絡規模很大時IP網段就會很多,路由表就會變得臃腫,就會消耗太多的路由器資源,為了避免我們使用路由匯總,是將一組路由匯聚成一條路由,進而達到減小路由規模優化設備資源利用率的目的。
Virtual Link(虛鏈路):OSPF規定網絡中存在多區域必須部署骨干區域Area0,如未連接LSA泛洪就會出現問題,當遇到網絡不易做大的變動但是此網絡必須連接到Area0時就可以使用Virtual Link,它是一種虛擬的,邏輯的鏈路,被部署兩台OSPF兩台路由器中間,注意Stub區域千萬不能部署Virtual link。
點對點類型網絡:
廣播型多路訪問類型:
非廣播型多路訪問類型:
點對多點類型:
OSPF運行的基本原理
路由器建立鄰居關系與鄰接關系的工作原理:
鄰居關系建立:當網絡中的路由器接口被激活時就開始發送組播hello報文。當一個激活OSPF接口接受到時,先對報文進行檢查比如說網絡掩碼的一致性,路由器失效間隔對應字段等等,如果檢驗合格,接受報文的路由器(R1)會將發送hello報文的路由器(R2)設置為Init狀態,。之后R2會發送自己的hello報文這個報文的鄰居字段就是R1的Router-ID,R1收到R2的hello報文后就會自己的Router-ID,R1知道R2發現自己了,並認可R2發送的hello報文中的相關參數,於是R1將R2添加到自己的鄰居表並把R2的狀態設置為2-way,隨后R1在自己發送的hello報文中添加R2的Router-ID並發送。R2收到后R1的hello報文后就將R1的狀態設置為2-way。到此R1與R2的鄰居關系就建立了。
鄰接關系的建立:當路由器雙方建立了鄰居關系后,緊接着建立鄰接關系。接下來R1與R2進入ExStart狀態下交互空DD報文以便協商Master/slave,而Master與slave角色的決定是由Router-ID決定,Router-id(R1)大為master,R1收到DD報文接受自己並非master路由器,然后將R2狀態切換為Exchange並發送帶有LSA頭部的DD報文,R2收到R1的DD報文后將R1狀態設置為Exchange,隨后R2就也開始發送DD報文,當R1,R2交互完最后一個報文后便徹底了解對方LSDB中所包含的LSA,此時他們要從對方獲取他們需要的LSA,此時R1與R2進入loading,接下來便是數據庫同步雙發發送相互需要的LSA。LSR用於請求需要的LSA,LSU用於回應對方的請求,而LSACK用於對對方回應的LSU報文進行確認操作,直到LSDB完成同步。知道雙方發現沒有其他LSA需要從鄰居獲取后雙方的狀態切換為Full。
