一、開放式最短路徑優先OSPF
OSPF(Open Shortest Pah First)協議是IEEE定義的一種基於鏈路狀態的內部網關路由協議.應用在自治系統內部,一種鏈路狀態路由協議,使用最短路徑優先算法計算路由
OSPF數據報文封裝在IP報文內部,協議號為89,使用單播或組播發送(在廣播型網絡中,所有路由器都以224.0.0.5的地址發送hello包,用來維持鄰居關系,非DR/BDR路由都以224.0.0.6的地址發送lsa更新,而只有DR/BDR路由監聽這個地址,反過來,DR路由使用224.0.0.5來發送更新到非DR路由)
OSPF特點:適合范圍廣,快速收斂,無自環、區域划分、支持驗證(支持兩種認證:區域認證和接口認證)、組播發送
Rip是一種基於距離矢量算法的路由協議,存在着收斂慢,容易產生路由環路,可擴展性差等問題
二、OSPF原理
1、OSPF原理
尋找鄰居、建立鄰接關系、鏈路狀態信息傳遞、計算路由
2、OSPF五種報文類型(報文封裝在IP報文中,協議號為89)
Hello報文: //鄰居發現:Hello報文用來發現和維持OSPF鄰居關系 ,周期發送10s ,失效時間40s
DD(Database Description)報文 //描述本地LSDB(Link State DatabASe)的摘要信息,用於兩台設備進行數據庫同步
LSR(LSA Request)報文 //用於向對方請求所需的LSA。設備只有在OSPF鄰居雙方成功交換DD報文后才會向對方發出LSR報文
LSU(LSA Update)報文 //用於向對方發送其所需要的LSA
LSACK (Link State Acknowledgment)報文 //用來對收到的LSA進行確認
3、Hello包 Message Type
- Hello報文type1
- 數據庫描述數據包type2
- 鏈路狀態請求報文type3
- 鏈路狀態更新報文type4
- 鏈路狀態確認報文type5
4、OSPF建立鄰居過程分析
①建立鄰居關系:down ——>init ——>two-way ----->
在狀態init,路由器會互相發送hello包,hello包重要字段如下:
- 始發路由器的router-id
- 始發路由器接口的area-id
- 始發路由器接口的地址掩碼
- 始發路由器接口的authentication type和authentication message
- 始發路由器接口的hello-interval
- 始發路由器接口的router dead-interval
- 路由器優先級
- 指定DR和BDR
- 標識可選性能的5個標志位
- 始發路由器的所有有效neighbor router-id(始發路由器接收到了它們的hello報文)
開啟ospf進程,默認會選擇接口IP地址當Router ID 需要手動修改 [R1]ospf router-id 1.1.1.1 修改之后需要重新系統ospf進程<R1>reset ospf process
初始發送Hello包Options E置1 表示支持外部路由功能,允許外部路由進入
以兩台路由器之間建立鄰居關系為例
1、R1發送hello報文(組播或者單播,鏈路層類型來定),neighbor字段為空 組播地址:224.0.0.5
2、R2收到hello報文,為R1建立一個鄰居數據結構,並把R1的鄰居狀態置為init,然后向R1發送hello報文,neighbor字段中包含R1的rougerID,表示自己收到了R1的hello報文。
3、R1收到R2的hello報文之后,為R2建立一個鄰居數據結構,並把鄰居狀態置為2way,然后向R2發送hello報文,報文的neighbor字段中包含R2的routerID。
4、R2收到R1的hello報文后,把R1的鄰居狀態置為2way
至此,鄰居關系就建立起來了,鄰居路由器之間會按時發送hello報文進行保活,如果hello報文超時,那么該路由器就會宣告這里鄰居失效。
所有路由器之間都達到2way狀態后,它們會根據網絡類型判斷是否需要選舉DR和BDR,如果需要的話就開始選舉DR和BDR
DR/BDR選舉作用:作用:DR可以減少廣播型網絡中的鄰接關系的數量,減少鄰接數目,減小鏈路消耗
MA網絡(多路訪問網絡):
(1)BMA(支持廣播的多路訪問網絡)----LAN
(2)NBMA(不支持廣播的多路訪問網絡)----幀中繼
1)、DR(designated router)即指定路由,其負責在MA網絡建立和維護鄰接關系並負責LSA的同步。
2)、DR與其他所有的路由器形成鄰接關系並交換鏈路狀態信息,其他路由器之間不直接交換鏈路狀態信息,這樣就大大減少了MA網絡中的鄰接關系數據 及交換鏈路狀態信息消耗的資源。
3)、DR一旦出現故障,其與其他路由器之間的鄰接關系將全部失效,鏈路狀態數據庫也無法同步,此時就需要重新選舉DR、再與非DR路由器建立鄰接關系,完成LSA的同步,為了規避單點故障風險,通過選舉備份指定路由器BDR,在DR失效時快速接管DR的工作
選舉規則
1)比較優先級,越大越優(默認為1,最大255,0表示不參加選舉)
2)比較Router-ID,越大越優
②建立各自拓撲表:exstart ——>exchange ----->
在狀態exstart通過發送hello包進行主從關系選舉(master/slave)
- 為了確定誰在exchange狀態先發送DBD包
- 主從關系選舉是通過比較兩台路由器的Router ID大小,
- Router ID大的為master路由器,由master路由器先交互DBD包 ,同時Slave 以Masters序列號為起始位發送DBD包,3個標記都為0
主從關系選舉后,進入狀態exchange ,在此狀態通過交互DBD包,建立各自的拓撲
在DBD包中有3個標記位用來管理鄰接關系的建立過程:
-
I位 或稱為初始位(initial bit) 用於ex-start協商主從關系的初始化協商的DBD包,該位置1
-
M位 或稱為后繼位(More bit) 如果這不是OSPFrouter發送的最后一個DBD,該位置1 說明后續還有DD報文待發送
-
MS位 或稱為主/從位(Master/slave bit) 如果始發路由器是Master,則該位置1
缺省情況第一個DD報文3個標記位全部置1
③建立鄰接關系: loading ——>full
建立各自的拓撲表后,進入狀態loading,請求對方路由信息,
- 如圖左邊路由器,發送LSR包請求172.16.6.0/24的路由信息
- 右邊路由器收到LSR包后,會回復LSU包,來告知172.16.6.0/24的路由信息
- 左邊路由器收到LSU包后,會回復LSACK包,用於對LSU包進行可靠確認
- 交互完路由信息,達到full狀態,路由器之間建立鄰接關系 達到LSDB的同步
Router ID
數據庫同步
路由器使用DD報文來進行主從路由器的選舉和數據庫摘要信息的交互
DD報文包含LSA的頭部信息,用來描述LSDB的摘要信息
建立完全鄰接關系
LSR用於向對方請求所需的LSA
LSU用於向對方發送其所需要的LSA
LSACK用於向對方發送收到LSA的確認
5、OSPF配置
6、OSPF支持的網絡類型
缺省情況下,OSPF認為以太網的網絡類型是廣播類型
PPP、HDLC的網絡類型是點到點類型
缺省情況下,OSPF認為幀中繼,ATM的網絡類型是NBMA
7、OPSF區域
- 每個區域都維護一個獨立的LSDB
- Area 0 是骨干區域,其他區域都必須與此區域相連
ABR:區域邊界路由器
ASBR:AS區域邊界路由器
8、OSPF開銷
OSPF的開銷計算公式為帶寬參考值/帶寬
可以通過bandwidth-reference命令來設置帶寬參考值
OSPF基於接口帶寬計算開銷,計算公式為:接口開銷=帶寬參考值-帶寬,帶寬參考值可配置,缺省為100Mbit/s