什么是OSPF
OSPF(OPen Shortest Path First)開放最短路徑優(yōu)先,由IETF開發(fā)的基于鏈路狀態(tài)的自治系統(tǒng)內(nèi)部路由協(xié)議(IGP)采用Dijkstra的最短路徑優(yōu)先算法來計(jì)算和選擇路由。
該協(xié)議關(guān)注網(wǎng)絡(luò)中鏈路或者接口的狀態(tài)、帶寬、利用率、延時(shí)等。使用SPF算法計(jì)算和選擇路由,OSPF 將協(xié)議包直接封裝在 IP 包中,協(xié)議號(hào) 89。并且OSPF以組播形式發(fā)送協(xié)議報(bào)文,減少鏈路帶寬資源浪費(fèi)。
OSPF的工作流程概述
工作流程主要有四個(gè)階段:
尋找鄰居
、建立鄰接關(guān)系
、鏈路狀態(tài)信息傳遞
、計(jì)算路由
尋找鄰居
在網(wǎng)絡(luò)中尋找可能與自己交換鏈路狀態(tài)信息的周邊路由器,可以交換鏈路狀態(tài)信息的路由器互為鄰居(Neighbor)
建立鄰接關(guān)系
鄰接關(guān)系(Adjacency)可以抽象的想象成一條虛擬的鏈路,用于鄰居路由器之間傳遞鏈路狀態(tài)信息,且只有建立了鄰接關(guān)系才能傳遞
鏈路狀態(tài)信息傳遞
OSPF路由器將建立描述網(wǎng)絡(luò)鏈路狀態(tài)的LSA(Link State Advertisement - 鏈路狀態(tài)公告),建立鄰接關(guān)系的OSPF路由器之間將交互LSA,最終形成包含整個(gè)網(wǎng)絡(luò)完整鏈路狀態(tài)信息的LSDB(Link State DataBase)鏈路狀態(tài)數(shù)據(jù)庫
計(jì)算路由
獲取完整的LSDB過后,OSPF區(qū)域內(nèi)的每個(gè)路由器將會(huì)對(duì)著區(qū)域的網(wǎng)絡(luò)結(jié)構(gòu)有相同的認(rèn)識(shí),如何根據(jù)LSDB的信息,運(yùn)用SPF算法計(jì)算出路由,且避環(huán)路的產(chǎn)生。
如何建立鄰居關(guān)系
OSPF進(jìn)程啟動(dòng)后,以224.0.0.5進(jìn)行組播發(fā)送Hello包,用以尋找鄰居, Hello包里面包含了:
始發(fā)路由器的Router-id
始發(fā)路由器接口的區(qū)域ID(Area ID)
始發(fā)路由器接口的子網(wǎng)掩碼
選定的DR路由器
路由器的優(yōu)先級(jí)
等信息
其中建立鄰居關(guān)系的前提是:雙方接口UP``雙方接口IP地址在同一網(wǎng)段``雙方接口在同一區(qū)域
一臺(tái)路由器可以有很多鄰居,也可以同時(shí)成為幾臺(tái)或者其他的路由器鄰居,所有的信息都會(huì)存在鄰居表內(nèi)。 通過互收Hello包,將狀態(tài)轉(zhuǎn)換為Init狀態(tài)
,之后兩邊Hello包內(nèi)協(xié)商某些參數(shù)后,才能確定為鄰居,狀態(tài)修改為2-Way
當(dāng)雙方鏈路狀態(tài)信息交互成功后,鄰居狀態(tài)修改為Full
,就表明鄰居之間鏈路狀態(tài)信息已經(jīng)同步
Init:
初始化[收到了對(duì)方的Hello報(bào)文,但Hello報(bào)文中的鄰居字段沒有本機(jī)的Router-ID]
2-Way:
鄰居關(guān)系[雙方互相發(fā)現(xiàn),收到了對(duì)方的Hello報(bào)文,并且報(bào)文中包含了乙方路由的Router-ID,并且確認(rèn)了DR/BDR的角色關(guān)系]
BR與BDR選舉
在未選舉BR與BDR的狀態(tài)下,鏈路中的鄰接關(guān)系將變得非常巨大,消耗巨大的網(wǎng)絡(luò)資源,可以由上圖公式可算得網(wǎng)絡(luò)內(nèi)鄰接關(guān)系的數(shù)量,為了解決這個(gè)問題,在OSPF引入了DR與BDR的概念。
本意是在網(wǎng)絡(luò)中選舉一臺(tái)DR(Designated Router)指定路由器
負(fù)責(zé)描述用LSA描述該網(wǎng)絡(luò)類型以及網(wǎng)絡(luò)內(nèi)其他路由器,同時(shí),他們也負(fù)責(zé)鏈路狀態(tài)信息交互過程。 同樣在選舉DR的同時(shí)也在選舉BDR(Backup Designated Riyter)指定備份路由器
簡單的說就是DR的備份,DR掛了就由他頂上,提升了可靠性
選舉規(guī)則
首先優(yōu)先級(jí)數(shù)字大的優(yōu)先選擇,默認(rèn)優(yōu)先級(jí)都是1
再接著是Router-id大的優(yōu)先
Router-id
用來表述路由器的身份,產(chǎn)生的方法,有兩種手動(dòng)配置一個(gè)可存在/不可存在的IPv4的地址格式作為Router-ID,自動(dòng)選舉在所有環(huán)回口中選舉IP地址最大的作為Route-ID,在所有物理接口中選舉IP地址最大的作為Router-ID,建議是用手動(dòng)方式配置一個(gè)環(huán)回口的IP地址作為Router-ID
鏈路狀態(tài)信息傳遞
通過在路由器之間發(fā)送LSA(Link State Advertisement)鏈路狀態(tài)公告
來交換鏈路狀態(tài)信息,通過獲取對(duì)方LSA,來同步乙方OSPF區(qū)域內(nèi)的鏈路狀態(tài)信息。
為避免網(wǎng)絡(luò)資源浪費(fèi),OSPF 路由器采取路由增量更新的機(jī)制發(fā)布 LSA,即只發(fā)布鄰居缺失的鏈路狀態(tài)給鄰居
路由計(jì)算
路由計(jì)算
- 首先評(píng)估一臺(tái)路由器到另一臺(tái)路由器所需的開銷(Cost)
- 同步區(qū)域內(nèi)的所有路由器的LSDB
- 使用SPF算法計(jì)算出路由
數(shù)據(jù)庫同步的工作流程
- 向鄰接路由器發(fā)送DD報(bào)文,通告本地LSDB中所有LSA的摘要信息
- 收到DD后,與本地LSDB對(duì)比,向?qū)Ψ桨l(fā)送LSR報(bào)文,請(qǐng)求發(fā)送本機(jī)所需的LSA的完整信息
- 收到LSR后,把對(duì)方所需的LSA的完整信息打包為一條LSU報(bào)文,發(fā)送至對(duì)方
- 收到LSU后,向?qū)Ψ交貜?fù)LSAck報(bào)文,進(jìn)行確認(rèn)
OSPF三張表
路由表
記錄了由SPF算法計(jì)算過后的路由
鄰居表
記錄鄰居關(guān)系和狀態(tài)
拓?fù)浔?/strong>
鏈路狀態(tài)數(shù)據(jù)庫
OSPF報(bào)文類型
-
Hello報(bào)文 :
用于發(fā)現(xiàn)和建立鄰居關(guān)系,維護(hù)鄰居狀態(tài)
-
DD報(bào)文 :
用于描述本地LSDB中所有的LSA摘要
-
LSR報(bào)文 :
用于鏈路狀態(tài)請(qǐng)求,自身所要更新的鏈路狀態(tài)詳細(xì)信息
-
LSU報(bào)文 :
用于鏈路狀態(tài)更新
-
LSACK報(bào)文 :
用于鏈路狀態(tài)確認(rèn)報(bào)文
OSPF多區(qū)域概念
分區(qū)域管理是為了環(huán)節(jié)單區(qū)域管理中,節(jié)點(diǎn)壓力過大的問題,將一個(gè)大區(qū)域劃分為多個(gè)小區(qū)域(Area)來管理,劃分之后的系統(tǒng)內(nèi)通信將劃為三種:區(qū)域內(nèi)通信
、區(qū)域間通信
、區(qū)域外部通信
區(qū)域內(nèi)通信
—在同一個(gè)區(qū)域內(nèi)的路由器之間的通信 路由角色可以叫IR
,區(qū)域內(nèi)部路由器 用于內(nèi)部通信,所有接口都在同一個(gè)區(qū)域內(nèi)
區(qū)域間通信
不同區(qū)域的路由器之間的通信 路由器角色可以叫ABR
,區(qū)域間路由器 用于區(qū)域之間通信
區(qū)域內(nèi)部通信
OSPF 域內(nèi)路由器與另一個(gè)自治系統(tǒng)內(nèi)的路由器之間的通信 路由器角色可以叫ASBR
,自治系統(tǒng)邊界路由器 用于連接外部自治系統(tǒng)的路由器
OSPF區(qū)域類型
-
骨干區(qū)域 :
每個(gè)OSPF網(wǎng)絡(luò)中只能有一個(gè)骨干區(qū)域,一般都是
Area 0
,骨干區(qū)域主要用于連接其他非骨干區(qū)域,且每個(gè)非骨干區(qū)域必須要與骨干區(qū)域相連接 -
非骨干區(qū)域 :
-
所有的非骨干區(qū)域必須和骨干區(qū)域相連接
OSPF的開銷計(jì)算
參考帶寬:
- 計(jì)算開銷的基準(zhǔn)帶寬值
- 默認(rèn)參考帶寬為100M
- 建議把網(wǎng)絡(luò)中最高的鏈路帶寬設(shè)置為參考帶寬。
- 參考帶寬僅本地有效
計(jì)算方法:
- 鏈路帶寬大于等于參考帶寬 Cost = 1
- 鏈路帶寬小于參考帶寬Cost = 參考帶寬/鏈路帶寬MB
OSPF的優(yōu)點(diǎn)
- OSPF 區(qū)域內(nèi)的路由器對(duì)整個(gè)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)有相同的認(rèn)識(shí),在此基礎(chǔ)上計(jì)算的路由不可能產(chǎn)生環(huán)路
- 當(dāng)網(wǎng)絡(luò)結(jié)構(gòu)變更時(shí),所有路由器能迅速獲得變更后的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),網(wǎng)絡(luò)收斂速度快
- 由于引入了Router ID的概念,OSPF區(qū)域內(nèi)的每臺(tái)路由器的行為都能很好地被跟蹤
- 使用 SPF 算法計(jì)算路由,路由選擇與網(wǎng)絡(luò)能力直接掛鉤,選路更合理
- OSPF 采用多種手段保證信息傳遞的可靠性、準(zhǔn)確性,確保每臺(tái)路由器網(wǎng)絡(luò)信息同步,同時(shí),避免了不必要的網(wǎng)絡(luò)資源浪費(fèi)
OSPF基礎(chǔ)配置
[系統(tǒng)]ospf [ID] router-id [Router-ID] #設(shè)置Router-id
router-id [Router-ID] #在系統(tǒng)視圖下設(shè)置Router-ID 會(huì)被應(yīng)用到所有的協(xié)議[全局],其中在協(xié)議內(nèi)配置的Router-ID高
[進(jìn)程]area [ID] #進(jìn)入?yún)^(qū)域ID,區(qū)域的編號(hào)格式也是IPv4地址格式
[區(qū)域]network [network] [反網(wǎng)掩碼]#宣告網(wǎng)絡(luò),反網(wǎng)掩碼也叫掩碼通配符
[進(jìn)程]silent-interface [interface] #靜默接口
ospf network-type [broadcast | nbma | p2mp unicast | p2p | peer-address-check ] #手動(dòng)修改網(wǎng)絡(luò)類型
[進(jìn)程]ospf-router-advertise [always | permit-calculate-other | cost [Cost] | route-policy [name] | type [Type] | summary cost [cost]] #配置OSPF引入缺省路由,always,如果本機(jī)沒有配置默認(rèn)路由,使用此參數(shù)可以參數(shù)一個(gè)描述默認(rèn)路由的一個(gè)LSA發(fā)布出去,Cost為改默認(rèn)路由的度量值,type為LSA的類型。
[接口]ospf timer hello [seconds] #修改Hello Time 計(jì)時(shí)器時(shí)間
[接口]ospf time dead [seconds] #修改鄰居失效時(shí)間
[接口]ospf dr-priority [priority] #修改啟用OSPF的接口的路由器優(yōu)先級(jí)
[接口]ospf cost [cost] #修改開銷值
bandwitdth-reference [value] #修改OSPF的參考帶寬
display ospf interface #顯示ospf接口信息
display ospf peer #顯示鄰居關(guān)系FULL為鄰接關(guān)系,2-Way為鄰居關(guān)系
display ospf lsdb #查看LSDB數(shù)據(jù)庫
display ospf routing #查看OSPF路由
display ospf lsdb #插件本地LSDB匯總情況
display ospf verbose #查看OSPF進(jìn)程詳細(xì)信息
display ospf statistics #顯示OSPF統(tǒng)計(jì)信息
display ospf interface #查看OSPF接口信息
display ospf routing #查看OSPF路由信息
dispaly ospf statistics error #顯示ospf錯(cuò)誤信息[排錯(cuò)常用]
-
交換機(jī)
+關(guān)注
關(guān)注
20文章
2604瀏覽量
98943 -
路由器
+關(guān)注
關(guān)注
22文章
3685瀏覽量
113321 -
OSPF
+關(guān)注
關(guān)注
0文章
80瀏覽量
14859
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論