目錄
OSPF鄰居關系的建立及握手過程
鄰居發現
鄰居(Neighbouring)關系的建立過程
鄰接(Adjacency)關系建立過程
影響鄰居關系及鄰接關系建立的問題
OSPF網絡類型
OSPF報文與區域
OSPF報文結構
LSA格式及類型
OSPF區域
OSPF協議特性
路由匯總
Virtual Link
默認路由
報文認證
轉發地址
OSPF路由防環機制
OSPF路由類型及優先級
內容
OSPF鄰居關系的建立及握手過程
鄰居發現
OSPF通過Hello報文發現維持鄰居關系,鄰居關系是指達到2-way狀態的路由器之間的關系。
OSPF發送Hello報文方式
在不同網絡上,OSPF發送Hello報文方式不同:
時間上,broadcast和P2P網絡中,Hello報文10s發送一次; NBMA和P2MP上30s發送一次。
Broadcast、P2P、P2MP,OPSF通過目的地址為244.0.0.5(AllOSPFRouter)來自動發現鄰居。而在NBMA網絡中需要手動指定鄰居。
建立鄰居關系時報文字段的檢查
在建立鄰居關系時,路由器必須對Hello報文中攜帶的“參數”達成一致,對參數進行檢查對比,以下是需要對比的參數:
Hello/Dead Interval:全部一致才能建立鄰居關系。
Area ID(在Hello報文頭部中):全部一致才能建立鄰居關系。
Area Type:參考Hello報文的Option位,全部一致才能建立鄰居關系。
Authentication Type和密鑰:全部一致才能建立鄰居關系
Router ID:不能一樣才能建立鄰居關系。
鄰居(Neighbouring)關系的建立過程
下面以圖示來說明鄰居(Neighbouring)關系的建立過程:
DOWN
假設兩個路由器運行OSPF,正准備建立鄰居關系。此時兩台路由器在對方眼里都處於DOWN狀態。
DOWN -> INIT
路由器A發送了第一個報文,路由器B接收到了,B將會把A加入到鄰居列表中,並將A的狀態標記為INIT。
DOWN -> Two-Way
B發送Hello報文,並聲明看見了鄰居A,當A收到該報文后,將B加入鄰居列表中,並將其狀態轉移到Two-Way。
INIT -> Two-Way
此時A發送了一個Hello報文,並聲明看見了鄰居B,當B收到該報文后,將A的狀態轉移到Two-Way。
鄰接(Adjacency)關系建立過程
鄰接(Adjacency)關系建立的對象
在broadcast和NBMA網絡上,DROther彼此之間保持在2-way狀態,而只與AllDRouter之間形成鄰接關系。
在其他OSPF類型網絡上,不需要DR,鄰接關系發生在2-way狀態之后。
鄰接關系狀態遷移過程如下圖所示[3:Page54:Fig14]:
信息交換初始狀態(ExStart)
動作:路由器之間互相發送空的DD(Database Description)報文。
作用:確定Slave / Master關系、確定DD初始化序列號、比較接口MTU。
信息交換狀態(Exchange)
動作:Master和Slave路由器之間互相DD報文。
作用:用於數據庫同步的標識信息傳遞。
信息加載狀態(Loading)
動作:Master和Slave之間使用上一狀態獲取的標識符來向對方索取自己沒有的LSDB表元。
作用:同步路由器的LSDB。
完全鄰接狀態(Full)
動作:當路由器發現自己已經同步LSDB后,將鄰居狀態更改到Full。
作用:表明自己已經不需要從某個鄰居同步LSBD。
影響鄰居關系及鄰接關系建立的問題
有以下幾種原因影響Adjacency關系的建立:
1. 主IP網絡和掩碼
在broadcast網絡中,如果兩個路由器發送hell報文源IP地址和hello中的子網掩碼確定的子網不一致,則不能建立neigbouring relationship,而P2P和P2MP沒有此要求。
2. MTU不一致
由於MTU不一致,如果DD、LSRequest、LSUpdate報文過大,會導致報文被對方忽略,而OSPF沒有提供手段自動檢測該情況,所以鄰居狀態可能會一直停留在ExStart、Exchange、loading狀態之一。
OSPF網絡類型
OSPF接口根據鏈路類型可分為4種網絡類型:
1. P2P(Point-to-Point)
這種網絡類型工作在只有兩個節點的環境中,彼此之間不需要選舉DR,建立鄰居關系后直接開始同步數據庫。鏈路層運行協議有PPP、HDLC和FrameRelay。
2. broadcast
支持廣播的網絡環境,該網絡允許多台路由器介入,任意兩台路由器之間都能直接進行二層通信,一個廣播報文能被其他所有路由器接收到。
3. NBMA(Non-broadcast Multi-Access)
不支持廣播,該網絡允許多台路由器介入,任意兩台路由器之間都能直接進行二層通信。
4. P2MP(Point-to-Multipoint)
邏輯上等同於多個P2P網絡的組合。
OSPF報文與區域
OSPF報文結構[3]
OSPF通用頭部
所有OSPF報文都有一個相同的頭部,長度為24byte,如下圖所示:
Version
OSPF版本號,在本上下文中為2。
Type
表明該報文的類型,對應關系如下表所示:
Packet length
OSPF報文長度的byte數,包含該頭部的長度
Router ID
路由器的OSPF Router-ID。
Area ID
報文所屬的Area ID。
Checksum
校驗報文是否有效。
Autype
指示該報文使用的認證類型。
Authentication
用於報文認證的內容。
Hello報文
Hello報文是OSPF報文類型1,在所有接口上周期性發送以建立保持鄰居關系,報文結構如下所示。
Network mask
發送該報文的接口的網絡掩碼。
HelloInterval
發送Hello報文的時間間隔。
Options
被發送者用來通告自己具有某種能力。
Rtr Pri
路由優先級,用於DR、BDR的選舉。
RouterDeadInterval
在鄰居路由器被視為無效之前需要等待對方發送Hello報文的時間。
Designated Router
本網段中DR的接口IP地址。
Backup Designated Router
本網段中DR的接口IP地址。
Neighbor
鄰居列表,用Router-ID標識,記錄當前路由器已知的鏈路上所有鄰居的RID。
DD(Database Description)報文
Interface MTU
不分片下,此接口最大可發出的IP報文長度。
Options
被發送者用來通告自己具有某種能力。
I(Initialization)
為1時代表這是第一個DD報文,否則為0。
M(More)
為1表示后續DD報文中還有LSA Header,否則為0。
MS(Master / Slave)
當兩台OSPF路由器交換DD報文時,要確定雙方的主從關系,RouterID大的一方稱為Master,為1時表示Master,0表示Slave。
DD Seq NR
DD報文序列號,用以保證DD報文傳輸的可靠性。
LSA Headers
本LSBD的LSA header。
LSR(Link-State Request)報文
在與OSPF鄰居交換DD報文后,路由器知曉了鄰居的LSDB摘要,路由器使用該報文來請求所需的LSA,LS type、Link State ID和Advertising Router字段唯一地標識了一個LSA。
LS type
指示LSA的類型,例如Router LSA、Network LSA、Network Summary LSA、ASBR Summary LSA、AS External LSA等。
Link State ID
LSA的標識。
Advertising Router
產生該LSA的Router-ID。
LSU報文
路由器接收到LSR后,會以LSU回應,在LSU報文中包含着對方請求的LSA。
# LSAs(NR of LSAs)
標識LSU中包含的LSA的個數。
LSAs
LSA的列表。
LSAck報文
為了確保LSA能夠可靠送達,當一台路由器收到鄰居發來的LSU報文時,需要對報文中包含的LSA進行確認,LSA header唯一地標識了一個LSA。
LSA header
LSA的頭部,唯一標識一個LSA。
LSA格式及類型
LSA頭部
LS age
LSA產生后所經過的時間,以s計。
Options
宣告自己具有某種能力。
LS Type
代表不同的LSA類型。
Link State ID
與LS Type和Advertising Router一起標識一個LSA,具體的LS Type和Link State ID的對應關系[3 : Page 119 : Table 16]:
Advertising Router
記錄產生該LSA的路由器的Router ID。
LS Sequence NR
LSA的序列號。
LS Checksum
除了LS age以外其他域的校驗和。
Length
LSA的總長度,包含LSA header,以byte計。
LSA類型
Router-LSA(Type 1)
產生設備:每個Router。
作用:描述該路由器所有OSPF直連接口的狀況和Cost值。
報文傳播范圍:所屬Area。
報文格式:
V(Virtual):
如果為1表示該路由器為Virtual Link的端點。
E(External):
如果為1表示該路由器為ASBR(Autonomous Systen Border Router)。
B(Border):
如果為1表示該路由器為ABR(Area Border Router)。
# links:
該Router LSA描述的鏈路(Link)數量,每個Link在邏輯上是一個4元組(link type,link ID,link data,metric)。
Link ID:
該路由器連接到的對象的標識符。
Link Data:
鏈路數據。
Link Type:
鏈路類型(並非OSPF網絡類型!),如下表所示:
鏈路類型 | 描述 | Link ID | Link Data |
1 | 點到點(P2P)連接到另一台路由器 | 鄰居的Router-ID | 產生該LSA的路由器的接口IP地址 |
2 | 連接到一個傳輸網絡(Transit) | DR的接口IP地址 | 產生該LSA的路由器的接口IP地址 |
3 | 連接到一個末梢網絡(Stub) | 網絡IP地址 | 網絡掩碼 |
4 | 虛鏈路(Virtual) | 鄰居的Router-ID | 產生該LSA的路由器的接口IP地址 |
metric:
Cost的值。
Network-LSA(Type 2)
產生設備:DR。
作用:描述該MA網絡的子網掩碼和鄰居Router-ID。
報文傳播范圍:所屬Area。
報文格式(簡潔起見,除去了LSA Header):
network mask
該MA網絡的網絡掩碼。
Attached Router
介入到該MA網絡的路由器的Router-ID。
Network-Summary-LSA(Type 3)
產生設備:ABR。
作用:描述了到達某個區域的目標網段路由。
報文傳播范圍:所屬Area。
報文格式(簡潔起見,除去了LSA Header):
Network mask:
被通告的網絡的子網掩碼(The subnet mask of an advertised network)。
metric:
路由的cost。
TOS、TOS metric:
REF [3]
ASBR-Summary-LSA(Type 4)
產生設備:ABR。
作用:描述了到達某個ASBR的主機路由。
報文傳播范圍:所屬Area。
報文格式:
同Network-Summary LSA報文格式一致。
Network mask:
恆為0.0.0.0,LSA header中的LSID為該ASBR的Router-ID。
metric:
路由的cost。
TOS、TOS metric:
REF [3]
AS-External-LSA(Type 5)
產生設備:ASBR。
作用:描述了OSPF domain外部的目標網段路由。
報文傳播范圍:OSPF domain。
報文格式(簡潔起見,除去了LSA Header):
Network Mask:
外部路由的目的網絡掩碼。
E:
1表示Metric-Type-2類型度量值類型,否則為Metric-Type-1。
metric:
該外部路由的cost。
Forwarding address:
若該字段為0.0.0.0時,到達該外部網段的流量會被發往引入該條路由的ASBR,否則轉發到該地址。
External Route Tag:
外部路由才能攜帶的標記,用於部署路由策略。
其他不重要字段:
REF [3]
NSSA LSA(Type 7)
產生設備:ASBR。
作用:描述了OSPF domain外部的目標網段路由。
報文傳播范圍:所屬NSSA。
報文格式:同ASE LSA。
OSPF區域
骨干區域(Backbone Area)
角色:OSPF domain的核心即Area0,所有域間路由必須通過它來中轉。
允許泛洪的LSA:Router,Network,Network Summary,ASBR Summary,ASE。
常規區域(Normal Area)
角色:OSPF domain的非核心區域,知曉本域內所有路由信息(包括引入的路由)。
允許泛洪的LSA:Router,Network,Network Summary,ASBR Summary,ASE。
末梢區域(Stub Area)
角色:相當於阻擋ASE LSA的Normal Area,區域內部路由器不需要根據特定外部路由來選擇特定出口的區域。ABR下發一個Network Summary默認路由,表明可以到達OSPF domain外的目的網段。
允許泛洪的LSA:Router,Network,Network Summary。
Totally Stub Area
角色:相當於阻擋Network Summary的Stub Area,ABR下發一個Network Summary 默認路由,表明可以到達本Area外的目的網段。
允許泛洪的LSA:Router,Network,Network Summary(默認路由)。
非完全末梢區域(Not-So-Stubby Area)
角色:相當於引入了一些ASE路由的Stub Area。
允許泛洪的LSA:Router,Network,Network Summary,NSSA Externel(外部路由,默認路由)。
Totally NSSA
角色:相當於引入了一些ASE路由的Totally Stub Area。
允許泛洪的LSA:Router,Network,Network Summary(默認路由),NSSA Externel。
OSPF協議特性
路由匯總
OSPF支持兩種路由匯總,一種部署在ABR上,另一種部署在ASBR上:
1. 在ABR上部署路由匯總。
只能在ABR上完成路由匯總,並且只能匯總ABR直連區域內部路由。
2. 在ASBR上部署路由匯總。
只能在ASBR上完成路由匯總,並且只能匯總ASBR引入的外部路由。
Virtual Link
一條在路由器之間建立的邏輯通路。
默認路由
在Normal Area中發布默認路由
OSPF認為在執行路由重分發時,如果把默認路由引入OSPF存在引發環路的風險,所以不能通過引入靜態路由來發布默認路由,以防止失誤。
在Stub Area中發布默認路由
Stub Area中的ABR會在區域內下發一個Network Summary LSA來使Stub Area內部流量能夠通過ABR到達OSPF domain外部。
在Totally Stub Area中發布默認路由
Totally Stub Area中的ABR會在區域內下發一個Network Summary LSA來使Totally Stub Area內部流量能夠通過ABR到達該區域外部。
在NSSA中發布默認路由
NSSA只能學習到自己引入的外部路由,而OSPF domain外其他的外部路由不能被學習到。因此,NSSA ABR將會分發一個默認路由來引導到OSPF domain外部的流 量。
在Totally NSSA中發布默認路由
NSSA只能學習到自己引入的外部路由,而該區域外的其他路由不能被學習到。因 此,NSSA ABR將會分發一個默認路由來引導到該區域外部的流量。
報文認證
空認證
簡單口令認證
密文認證
轉發地址
一種防止次優化的手段,見實驗。
OSPF路由防環機制
區域內部防環
由於區域內部的lsdb的同步機制,在同一個域中的路由器將會擁有一致的Area-Intra (Type1和Type2 LSA)lsdb,根據生成樹算法會得到一個無環圖。
區域間防環
網絡結構防環
所有非backbone area必須與backbone area相連接,Area-inter路由需要經過Area0中轉。
Network Summary LSA防環機制
1. ABR從Non-backbone area收到的Network Summary LSA不能用於Area-Inter路由的計算。
2. ABR只能把自己到達所連接區域的Area-Intra路由注入Area0。另外,可以將所到達的Area-Intra路由和到達其他區域的Area-Inter路由注入Non-backbone Area。
3. 水平分割:ABR不會將到達某個區域內的網段路由的Network Summary LSA再次通告回去。
MPLS VPN防環
HCNP R&S 不做要求,略去。
外部路由防環
外部路由由ASE LSA和ASBR LSA描述,根據Router LSA、Network LSA、Network Summary LSA可以保證到達ASBR無環路,ASBR再將流量送出OSPF domain。
OSPF路由類型及優先級
以下按照優先順序枚舉OSPF路由類型:
Area-Intra Route
Area-Inter Route
Metric-Type 1 Route
Metric-Type 2 Route
參考文獻
[1] HCNP 路由交換學習指南
[2] HCIE 路由交換學習指南 //這本書有點雞肋,敘述協議不如看RFC文檔,概念順序安排不當,有價值的可能就是一些配置實例。
[3] RFC 2328,OSPF version2 official standard