RFC2328 OSPF

OSPF (Open Shortest Path First,開放最短路徑優先)
ietf於1988發展出,於rfc2328詳述
ip的prot欄位為89,不使用TCP和UDP
AD=110
使用cost當衡量指標,cost=10的8次方/bandwidth(bps),並支援相同cost的多重路徑
ex:頻寬為1000kbps,metric為10^8/1000*10^3=10
 

OSPFv3
僅支援ipv6,於rfc2740詳述,OSPFv2僅支援ipv4
SRF群播位址為ff02::5,ospfv2為224.0.0.5
DR群播位址為ff02::6,ospfv2為224.0.0.6
ps:
不會要求相鄰的ipv6鄰居介面為同一個網段,但OSPFv2會要求
每個介面支援多個OSPF程式,但OSPFv2不行

特色
只支援ip,不像eigrp支援多協定
由area與as組成,因此ospf常以階層式設計
具擴充性
支援vlsm/cidr,支援summarization
不限制hop count
開放式標準,可佈建多種廠商設備
可broadcast,multicast,unicast,而multicast位置為224.0.0.5(用於SPF router)和224.0.0.6(用於DR)
ps:multicast的ipv6位置為ff02::5和ff02::6

使用的技術包括:
initial flood:啟動時資料全送,打聽鄰居是誰,但這可能使網路受影響
event-trigered(激發式更新):有事才發訊號,一次送給全部
spf(shortest path first tree,最短路徑樹):演算法會依拓樸資料庫和頻寬計算目地成本,並建立路由表

…………………….. 

 
RID(router id):
每部路由器都有,id為介面最高的ip,決定後即不受影響,除非重開機 
ps:若未設ip或介面關閉,則找不到rid
RID的優先順序
1手動指定
2up狀態的loopback interface中數字最大的IP
3up狀態的非loopback interface中數字最大的IP
ps:
若兩設備rid相同,則會許多問題,像是持續計算SPF,持續更新等消耗CPU資源等動作 

… 

DR(designated router,指定路由器):
推選出來和其他路由器adjacent(鄰接)並互相交換資訊,若沒鄰接則不交換資訊 
建立type 2 network LSA並flooding到該AREA
協助該AREA上拓樸資料的交換

BDR(備援指定路由器):
只接收不散播,並保持最新資訊以防DR壞掉可即時更新,若無則選優先度高為bdr 

DROTHER
不是DR也不是BDR的router 

DR/BDR選舉
若無DR則BDR升格DR,若無BDR則選最佳優先權成為DR,次佳優先權為BDR,
若有相同優先權以最高RID做為DR,次高RID做為BDR 
一旦選好DR和BDR則不會改變,就算有更高優先的router加入也是
優先度0則不參與DR選擇
ps:各area會選自己的DR及BDR
ps:建議將loopback(回饒界面)的ip設的比所有網路界面高,這樣此loopback ip會成為RID
這可避免若某RID的介面不穩,那就會一直做DR和BDR的選擇,就無法收斂
ps:點對點網路不會指定任何DR/BDR,包括NBMA點對點網路,NBMA點對多點網路,一般的點對點或點對多點網路

… 

OSPF area
是一群鄰近的網路與路由器
除了stand/ordinary(一般) area外,另有二種特殊的area
 backbone area/area 0:ospf一定要有area 0,as內所有area都必須連到area 0 
 stub area
同area中所有router可共享一個area,router也可同時屬於一個以上的area
同一個area的router會有相同的拓樸表,且變動只作用在相同的area,
ospf的as由ospf area組成

area的hiearchy架構 
路由器角色如下:
backbone router(主幹路由器):至少有一個介面連接到area 0
internal router(內部路由器):router所有介面都在同一個area
ABR(area broder router,區間路由器):
 1.各介面分別連到不同area,但至少有一介面連到area 0,
 2.負責轉送area間的主要路徑資訊,但area內的topology細節不會轉送
 3.ABR的LSDB包含所連接AREA的LSA 
ASBR(autonomous system border router,自主系統邊界路由器):和其他as連結,將其他as的路徑(外界路徑)資訊匯入ospf網路,

hiearchy設計區域好處
confine network instability to an area(可將網路的不穩定性限制在一區域內)
improve performance 
 speed up convergence(加快收斂):小的area會有小的topology db,可用較少資源產生route,減少spf計算頻率,而且route table也較小 
 decrease routing overhead(低遶送的額外負擔):type 1,2 lsa會被限制在area內,以減少LSU的負擔
擴充性高
其他還有不太碎弱,packet are seq and ack,…等
ps:缺點是設計複雜

ps:
The maximum number of routers per area depends on following:
1.What kind of area do you have?
2.What kind of CPU power do you have in that area?
3.What kind of media?
4.Will you be running OSPF in NBMA mode?
5.Is your NBMA network meshed?
6.Do you have a lot of external LSAs in the network?
7.Are other areas well summarized?

………………..使用兩個資料庫
topological database(拓樸資料庫):或稱link state database(連結狀態資料庫)
 router用此資訊計算出各網路最短路徑 
 透過hello封包和lsa完成及維護
 每個router會相同
neighborship database(鄰居資料庫):或稱adjacencies database/Link State Adjacency table
 含所有router router清單,以及各router的id,狀態,…等細節
 透過hello封包完成及維護
 每個router不一定會相同  
 類似eigrp的neighbor table

主要步驟
1neighbor discovery:尋找鄰居並存進neighborship database 
2topology database exchange:各路由器將topology資訊儲存自己的topology database/LSDB(link state database,鏈路狀態資料庫)
3.route computation:根據LSDB資料,使用SPF演算法找出最短路徑 
4.maintaining routing information(維護路徑資訊) 

neighbor discovery
establish router adjacencies(建立路由器的相連):透過hello封包建立雙方連結的關係
 1,router加入時會向相鄰router送出hello封包,使用multicast223.0.0.5
 2,相鄰router收到hello封包後紀錄到自己的相鄰資料庫,並送回hello封包給新加入router
 3,新加入router收到相鄰router的hello封包後也紀錄到自己的相鄰資料庫,於是形成adjacency(相鄰關係)
 4,選dr和bdr,若dr和bdr己選定,則新加入的router只會和dr與bdr交換資訊
 5,router透過週期的hello update來維持整個網路的運作
ps:nbma等非廣播的網路需要手動建立adjacency

形成鄰居建立adjacency的必要條件
直連介面不可為passive interface
需在相同area內
hello timer及dead timer需相同
router的RID需唯一
通過驗證
stub area flag要符合
介面的網路類型要一致
ps:
要基本通訊能力,ex:介面主要ip位罝需屬於相同子網路,才可找的到鄰居 
IP MTU需一致,若沒有唯一則無法交換topology資料 
ps:
無法成為鄰居建立adjacency
可能是由於任何下列理由:Hello沒有從鄰居兩端傳送

timer
hello timer預設為10秒送一次hello
dead timer預設40秒,hello timer的4倍,歸0後則鄰居關係中止
ps:若介面失去作用則鄰居關係馬上失效 

OSPF在不同的網路類型下,不同的參數 

interface
type 
 使用
DR/BDR
 hello
timer 
探索
鄰居
支援2台以上router
在同一子網路
 
應用 
broadcast
Multi access
 Y10  Y YLAN
Token Ring 
Non-Broadcast
Multi Access
(NBMA)
 Y 30  Y Frame Relay 
ATM
X.25 
loopback     
point-to-point 10  PPP,HDLC
frame relay
point-to-multipoint 30Y YHub-and-Spoke架構
frame relay 
point-to-multipoint
non-broadcast
(cisco專屬)
 30  Y 

hello封包欄位有:
version
type
packet length
RID(router id)
area-id:
checksum
authentication password:驗證密碼是當router需互相驗證時用
network mask
hello intervals:幾秒傳送一次hello封包,預設為10秒,若為nbma則30秒
option
router priority:預設為1,此值最高的router即可做DR
dead intervals:等待鄰近router的時間,預設是hello的4倍,若超過此時間表示鄰近router未回應
dr:dr的ip位址adjacency
bdr:bdr的ip位址
neighbors:己經建立鄰近router的資料
stub area flag:若2個router屬相同stub area需要此值做溝通 

… 

LSA(link state advertisement,鏈路狀態宣傳)
ospf資料封包,含與其他ospf router分享的link state與路徑資訊,使用multicast方式處理
ps:各路由器將週期性收到lsp後會將資訊儲存在link state database

LSA type
使用32bit LSID(link state identifier,鏈路狀態識別碼)辨識LSA 
主要分為
用在計算內部路徑:lsa type1,2,3
用在計算外部路徑:lsa type4,5,7

lsa type1/router lsa:router link entry,由router發出,
 type 1 lsa的LSID=router本身的RID 
 area下的每個router都會負責建立  
 router會將此lsa flooding到相同的area,一直到area內鄰居都有相同的lsa副本, 
 用途:描述router本身連接到的area 
lsa type2/network lsa:network link entry,由dr發出
 type2 lsa的LSID=該AREA中DR的IP 
 該AREA中的DR會負責建立  
 OSPF定義typ2 lsa做為pseudonode(虛擬節點)  
 type2 lsa會列出所有相連之type 1 lsa的參考值 
 用途:維護連接到該網路的router清單 
lsa type3/summary lsa:summary link entry,由abr發出
 type3 lsa的LSID=area要通告的子網路
 ABR會負責將相鄰AREA內的子網路建立type3 lsa,並通告到其他area
 typ3 lsa會含ABR的RID,以識別是那個ABR所發出 
 應用:在ABR上手動匯整路徑時,會透過type3 lsa 
lsa type4/asbr summary lsa:summary link entry,由abr發出
 type4 lsa的LSID=ASBR的rid 
 會包含asbr的rid,以及ABR到ASBR的成本 
 類似type3 lsa,差別在type4 lsa是通告一筆到達ASBR的路徑 
 應用:
  ABR收到type5 LSA後會轉換為type4 lsa,並flooding到相鄰的區域
  用來協助計算E2類型的區域間external route       
lsa type5/as external lsa:as extenal link entry,由asbr發出 
 負責將其他AS產生或其他路由協定學到的外部路徑置入OSPF內
 應用:在ASBR上手動匯整路徑時,會透過type5 lsa 
 欄位包括以下
  LSID:子網路編號
  Mask:遮罩
  Advertising router:通告路徑的ASBR之rid
  Metric:ASBR指定的權值
  External Metric Type:指定external type1或type2  
lsa type7/nssa external lsa,由asbr在nssa內發出
 類似type5,可將外部路徑置入nssa stub區域中
 用來解決stub區域無法通告lsa type5的問題 
ps:
lsa type 8/external attributes:用來連接OSPF和BGP BT4
lsa type 9,10,11/oqaque:用於OSPF的升級擴充等
 type 9:用於Intra-Area-Prefix-LSA
 type 10:用於mpls

OSPF訊息類型
hello:編號1,探索及維護鄰居,也可測delay時間
DD/DBD(database description,資料庫描述 ):編號2,
 1.用於初始化拓樸交換,
 2.宣告傳送端修改了什麼
 3.僅列出LSA header而已,包括LSID和序號,每當LSA變更時,序號會加1,並開始flooding DD訊息
LSR(link-state request,鏈路狀態要求):編號3,要求對方提供LSA的LSID封包
LSU(link-state update,鏈路狀態更新):編號4,回應LSR的請求傳送該封包,其內容為完整的LSA  
LSack(link-state ack,鏈路狀態確認):編號5,回覆LSack以確認收到LSU的回應時
ps:lsp(link state packet,鏈結狀態封包)  

 

OSPF狀態表
探索鄰居相關狀態
 down:dead timer歸0後中止鄰居關係的狀態
 attemp:手動指定鄰居時,發送端傳送hello,並收到鄰居hello之前的狀態
 init:鄰居收到hello時,發現參數不一致時,會產生此狀態
 2way:鄰居已建立
交換LSDB相關狀態
 ExStart:1協商目前DD序號,2協商用於DD封包的master/slave
 ExChange:完成DD程序並交換DD封包
 Loading:所有DD封包交換完,且router正傳送LSR,LSU,LSack用來交換完整的LSA
 Full:與鄰居形成fully adjacent neighborship(完全相鄰關係)
ps:
若是有DR的情況下,與其他DROTHER只到達2way狀態,只有和DR會到達FULL狀態
在沒有DR的情況下,與其他DROTHER會到達FULL狀態 


交換LSDB對象
有DR的情況
 DROTHER只於DR互相作業,訊息會先傳到DR的mutli-address224.0.0.6,
 接著DR在傳送訊息到SPF router的multi-address224.0.0.5
無DR的情況
 DROTHER之間互相作業,訊息會傳送到SPF router的multi-address224.0.0.5

交換LSDB程序
1.以multicast傳送第一個DD,(目地依有DR和無DR會不一樣)  
2.router變為ExStart狀態,開始找一台較高的RID扮演Master角色
3.router變為ExChange狀態,並透過DD訊息直到雙方已收集完該AREA之LSID
4.router變為Loading狀態,根據LSID清單之內容,針對未知或已改變的部份,交換完整的LSA
 1缺少LSA的一方傳送LSR
 2有該LSA的一方回應LSU
 3收到LSU後回應LSack表示收已收到
 重覆3個步驟直到所有LSA一致
5.router變為FULL狀態,鄰居間有相同的LSDB
6.開始執行SPF演算法
ps:
透過flooding讓所有router有最新的LSA,並防止loop的發生
預設30分鐘內無任何變化,則會自動執行一次flooding,並增加一次LSA序號
當type3 lsa變更時SPF演算法不會重算,只有type1和type 2 lsa變更時才會
ps:
當router收到LSU,若本身
 lsa entry不存在,或收到的LSU較新:則將該entry加入LSDB,並回傳LSAck,flooding該資訊,執行SPF,更新route table
 收到的LSU較舊:則回傳較新的LSU

ps:
discover routes(發現路徑)/交換LSDB程序:
 1,一般router送出帶有RID的hello封包給DR
 2,dr將link state database(連結狀態資料庫)送給一般router,一般router也送自己的link state database給dr
 3,dr和一般router會交換一次以上的dbd(database description packets),最後會回應lsack(link state ack)
 4,所有router都有相同link state database時,就進入full state(完全狀態)/full adjacency neighborship

ps:
異動運作過程
1偵測到發現變動的router用multicast 224.0.0.6傳送lsu(link state update)給dr和bdr
2,dr收到訊息後用multicast 224.0.0.5傳送lsu給其他router
3,一般router收到dr帶有異動的lsu後,則更新自己的link state database,再建立新的route table 

…….. OSPF路徑選擇策略 
1成本最低值做為路徑
依不同區域有不同的計算方式
 intra-area(區域內):將經過的介面成本加總,從type2 lsa和type1 lsa的資料可以得知介面成本 
 interarea(區域間):計算區域內route到區域內ABR的成本(列於type3 lsa)+abr到asbr的成本(列於type4 lsa)
2相同目地,intra-area route優於interarea route  

預設路徑的做法
1讓所有流量,預設導到連結internet的ASBR
連接到internet的ASBR,會將路徑匯整為0.0.0.0,並透過type 5 lsa公告到整個網路
2讓stub area的流量,預設導到特定area內的ABR 

stub area(末梢型區域) 
可用做預設路徑,用來將stub area內的資料流導向到該area的其中一個abr
該area的LSA會減少,使area內的router減省memory及cpu資源 
ABR會過濾所有進入該stub area的type5 lsa 
ABR會建立type3 lsa(含0.0.0.0/0的default route)並flooding到該stub area內,
ps:只有NSSA的ABR不會自動建立type3 lsa default route 

stub type可分為
 stub:allow type1,2,3,4
 NSSA(not-so-stubby areas):allow type1,2,3,4,7
 totally stubby:allow type1,2,4 
 totally NSSA :allow type1,2,4,7
其中
totally表示會過濾進入該stub area的type3 lsa(用於defaulte route的type3 lsa除外),此類型為cisco專屬stub  
NSSA表示會將外部路徑,透過ASBR轉換成type7 lsa送到該stub area內
而nssa內type7 lsa也會透過該area的abr,轉換成type5 lsa送到其他area 

stub area限制
不可為area 0
不可為virtual-link的transit area 
不能有ASBR

….. 

external route的成本計算方式有以下兩種
E1:OSPF外部成本+OSPF內部成本  
E2:OSPF外部成本 
ps:
外部成本根據type5 lsa
內部成本為router到abr的成本(根據區域內的lsdb拓樸)+abr到asbr的成本(根據type4 lsa)

從多條成本相同的E2路徑中決定路徑
當有多條成本相同的e2路徑時,router根據以下情況決定一條路徑
當router與asbr在同一area時,步驟如下
 1從type5 lsa裡找出asbr的rid
 2計算到達asbr最低成本路徑(根據區域內的lsdb拓樸),並決定到asbr的連出介面與下一站
當router與asbr在不同area時,步驟如下
 1計算到達abr最低成本路徑(根據區域內的lsdb拓樸),
 2計算abr到達asbr的成本(根據type4 lsa)
 3步驟1的值+步驟2的值
ps:
abr會將asbr公告的type5 lsa轉換成type4 lsa

………….. 

ospf virutal-link(虛擬鏈路)
用途1
讓ospf支援兩個area 0的情況
virtual-link會連接兩個area0的abr
可解決兩公司合併時,同時有兩個ospf area0的狀況
用途2
讓ospf的area可透過其他area,在連接到area0(讓其他area不用直接area0) 
可解決新增area時,因成本考量而不直接連area0

連接virtual-link的ABR
1.以單點傳播的方式將所有OSPF訊息傳到virtual-link的另一個ABR
2.LSA裡有DNA(do not age,無逾期)位元,因此不會每30分鐘重新flooding

transit area(中繼區域)
virtual-link連接兩個area的區域
transit area上不可存在stub area

…………..

ospf在frame-relay multipoint interface上的問題與解決方式

鄰居探索問題,常見解法有二種 
 手動指定鄰居
 要求frame-relay使用broadcast的參數
 ps:若使用允許hello探索鄰居的OSPF網路類型,則要確定已使用InARP
選不到DR的問題,常見解決有二種 
 避免使用DR/BDR的OSPF網路類型
 若是使用DR/BDR的OSPF網路類型,則要手動指定DR和BDR角色避免問題發生
兩router沒有直連的問題
 解決方式
 將已連接的PVC(DLCI)對應到未直連router的IP,透過已連接的PVC之另一端router,協助轉送訊息到未直連router