OSPF動態路由協議筆記之(四) : 域內路由和計算最短路徑
本節筆記,主要介紹OSPF域內路由的基本知識,內容涵蓋如何使用一類LSA(Router-LSA)和二類LSA(Network-LSA)描述拓撲信息和路由信息,以及如何使用這兩類LSA通過SPF算法計算域內路由,構建最短路徑樹。
第一類LSA:Router-LSA
每台OSPF路由器使用一條Router-LSA描述本區域內的鏈路狀態信息。
LSA頭部的三個字段含義如下:
① Type :LSA類型,Router-LSA是一類LSA。
② LS id :鏈路狀態ID。
③ Adv rtr :產生此Router-LSA的路由器Router ID。
(1)Router-LSA描述P2P網絡
一條Router-LSA可以描述多條鏈接,每條鏈接描述信息由Link ID,Data,Link Type和Metric組成。
命令: display ospf lsdb router self-originate
其關鍵字含義如下:
① Type :鏈接類型(並非OSPF定義的四種網絡類型),Router LSA描述的鏈接類型主要有:
l Point-to-Point(P2P):描述一個從本路由器到鄰居路由器之間的點到點鏈接,屬於拓撲信息。
l TransNet:描述一個從本路由器到一個Transit網段(例如MA網段或者NBMA網段)的鏈接,屬於拓撲信息。
l StubNet:描述一個從本路由器到一個Stub網段(例如Loopback接口)的鏈接,屬於路由信息。
② Link ID :此鏈接的對端標識,不同鏈接類型的Link ID表示的意義也不同。
③ Data :用於描述此鏈接的附加信息,不同的鏈接類型所描述的信息也不同。
④ Metric :描述此鏈接的開銷。
(2)Router-LSA描述MA網絡或NBMA網絡
如下圖所示,RTB、RTC、RTE之間通過以太鏈路互連,鏈接類型(Link Type)為TransNet。以RTC產生的LSA為例,Link ID為DR的接口IP地址(10.1.235.2),Data為本地路由器連接此MA網絡的接口IP地址(10.1.235.3),Link Type為TransNet,Metric表示到達DR的開銷值。
TransNet描述的鏈接中僅包括與DR的連接關系及開銷,沒有網絡號/掩碼及共享鏈路上其他路由器的任何信息。
Tips:總結。當鏈接類型Link Type有所不同時,其Link ID和Data分別代表什么:
Link Type |
場景 |
Link ID含義 |
Data含義 |
P-2-P |
點對點鏈接 |
鄰居路由器Router ID |
宣告該Router LSA的路由器接口的IP地址 |
TransNet |
MA或NBMA網段 |
DR的接口IP地址 |
宣告該Router LSA的路由器接口的IP地址 |
StubNet |
Loopback接口 |
該Stub網絡的IP地址 |
該Stub網絡的網絡掩碼 |
第二類LSA:Network-LSA
MA共享網段或NBMA共享網段中的網絡號/掩碼及路由器間的鏈接關系,通過Network-LSA來呈現。
命令: display ospf lsdb network self-originate
在Network-LSA中關鍵字含義如下:
l Type:LSA類型,Network-LSA是二類LSA。
l LS id:DR的接口IP地址。
l Adv rtr:產生此Network-LSA的路由器Router ID,在該例子中就是DR的Router ID。
l Net mask:該網段的網絡掩碼。
l Attached Router:連接到該網段的路由器列表,呈現了此網段的拓撲信息。
基於上述字段表達的信息,Ls id和Net mask做與運算,即可得出該網段的IP網絡號,另外,從DR路由器到其所連接的路由器的開銷為0。
從Attached Router部分可以看出,2.2.2.2、3.3.3.3、5.5.5.5共同連接到該共享MA網段中,DR路由器為2.2.2.2,網絡號10.1.235.0,掩碼255.255.255.0。
OSPF區域LSDB
如下圖所示,五台路由器互連並運行OSPF協議。以RTA的LSDB為例,其中包括了五個路由器產生的Router-LSA,以及兩個廣播型網絡中產生的Network-LSA。
命令: display ospf lsdb
SPF算法
在一類LSA和二類LSA中,包括了拓撲信息和路由信息。OSPF路由協議通過使用SPF(最短路徑優先)算法,計算到達每個路由器的最短路徑。
SPF算法分為兩個階段:構建SPF樹和計算最優路由。OSPF將依據SPF算法和各類LSA進行最短路徑樹的計算。
階段 1:構建SPF樹。
根據Router-LSA中的Point to Point,TransNet(拓撲信息)和Network-LSA中的拓撲信息,構建SPF樹干。
階段 2:計算最優路由
基於SPF樹干和Router-LSA中的Stub(路由信息)、Network- LSA中的路由信息,計算最優路由。
階段一:構建SPF樹
接下來將會分步驟介紹SPF算法計算最短路徑:
Step 1:OSPF路由器將分別以自身為根節點計算最短路徑樹。
以RTA為例,計算過程如下:
RTA將自己添加到最短路徑樹的樹根位置,然后檢查自己生成的Router-LSA,對於該LSA中所描述的每一個連接,如果不是一個Stub連接,就把該連接添加到候選列表中,分節點的候選列表為Link ID,對應的候選總開銷為本LSA中描述的Metric值和父節點到達根節點開銷之和。
根節點RTA的Router-LSA中存在TransNet中Link ID為10.1.12.2 Metric=1和P-2-P中Link ID為3.3.3.3 Metric=48的兩個連接,被添加進候選列表中。
RTA將候選列表中候選總開銷最小的節點10.1.12.2移到最短路徑樹上,並從候選列表中刪除。
Step 2:DR被加入到SPF中,接下來檢查Ls id為10.1.12.2的Network-LSA。如果LSA中所描述的分節點在最短路徑樹上已經存在,則忽略該分節點。
如上圖所示,在Attached Router部分:
節點1.1.1.1被忽略,因為1.1.1.1已經在最短路徑樹上。
將節點2.2.2.2,Metric=0,父節點到根節點的開銷為1,所以候選總開銷為1,加入候選列表。
候選節點列表中有兩個候選節點,選擇候選總開銷最小的節點2.2.2.2加入最短路徑樹並從候選列表中刪除。
Step 3:節點2.2.2.2新添加進最短路徑樹上,此時繼續檢查Ls id為2.2.2.2的Router-LSA:
第一個TransNet連接中,Link ID為10.1.12.2,此節點已經在最短路徑樹上,忽略。
第二個TransNet連接中,Link ID為10.1.235.2,Metric=1,父節點到根節點的開銷為1,候選總開銷為2,加入候選列表。
第三個P-2-P連接中,Link ID為4.4.4.4,Metric=48,父節點到根節點的開銷為1,候選總開銷為49,加入候選列表。
候選節點列表中有三個候選節點,選擇候選總開銷最小的節點10.1.235.2加入最短路徑樹並從候選列表中刪除。
Step 4:DR被加入到SPF中,接下來檢查Ls id為10.1.235.2的Network-LSA。
如上圖所示,在Attached Router部分:
節點2.2.2.2被忽略,因為2.2.2.2已經在最短路徑樹上。
將節點3.3.3.3,Metric=0,父節點到根節點的開銷為2,候選總開銷為2,加入候選列表。(如果在候選列表中出現兩個節點ID一樣但是到根節點的開銷不一樣的節點,則刪除到根節點的開銷大的節點。所以刪除節點3.3.3.3 累計開銷為48的候選項)。
將節點5.5.5.5,Metric=0,父節點到根節點的開銷為2,候選總開銷為2,加入候選列表。
候選節點列表中有三個候選節點,選擇候選總開銷最小的節點3.3.3.3和5.5.5.5加入最短路徑樹並從候選列表中刪除。
Step 5:節點3.3.3.3和5.5.5.5新添加進最短路徑樹上,此時繼續檢查Ls id分別為3.3.3.3和5.5.5.5的Router-LSA。
① Ls id為3.3.3.3的LSA:
Link ID為10.1.235.2的節點已經在最短路徑樹上,忽略。
Link ID為1.1.1.1的節點已經在最短路徑樹上,忽略。
② Ls id為5.5.5.5的LSA:
Link ID為10.1.235.2的節點已經在最短路徑樹上,忽略。
Link ID為4.4.4.4的P-2-P連接,Metric=48,父節點到根節點的開銷為2,候選總開銷為50。因為節點4.4.4.4已經在候選列表中出現,且候選總開銷為49。49<50,所以子節點4.4.4.4的父節點選擇2.2.2.2。
至此,再通過命令display ospf lsdb router 4.4.4.4發現,LSA中的連接所描述的相鄰節點都已經添加到了SPF樹中。
此時候選列表為空,完成SPF計算,其中10.1.12.2和10.1.235.2是虛節點(DR)。
階段二:計算最優路由
從根節點開始依次添加各節點LSA中的路由信息,添加順序為各節點加入SPF樹的順序。
第二階段根據Router LSA中的Stub、Network LSA中的路由信息,完成最優路由的計算。
從根節點開始,依次添加LSA中的路由信息(添加順序按照每個節點加入SPF樹的順序):
① 1.1.1.1(RTA)的Router LSA中,共1個Stub連接,網絡號/掩碼10.1.13.0/24,Metric=48;
② 10.1.12.2(DR)的Network LSA中,網絡號/掩碼10.1.12.0/24,Metric=1+0=1;
③ 2.2.2.2(RTB)的Router LSA中,共1個Stub連接,網絡號/掩碼10.1.24.0/24,Metric=1+0+48=49;
④ 10.1.235.2(DR)的Network LSA中,網絡號/掩碼10.1.235.0/24,Metric=1+0+1=2;
⑤ 3.3.3.3(RTC)的Router LSA中,共1個Stub連接,網絡號/掩碼10.1.13.0/24,已在RTA上,忽略;
⑥ 5.5.5.5(RTE)的Router LSA中,共1個Stub連接,網絡號/掩碼10.1.45.0/24,Metric=1+0+0+1+48=50;
⑦ 4.4.4.4(RTD)的Router LSA中,共2個Stub連接,網絡號/掩碼10.1.24.0/24,已在RTB上,忽略;網絡號/掩碼10.1.45.0/24,已在RTE上,忽略。
查看OSPF路由表
經歷上述兩個階段的計算,RTA生成的OSPF路由如下圖所示。
經過OSPF優選后的路由並不一定會安裝進系統路由表,因為路由器還可以通過其他協議獲得路由,通過不同方式獲得的路由需要進行優先級比較。
Q:Router-LSA中主要包含哪幾種鏈路類型?
A:P2P、TransNet、StubNet、vlink。
Q:經過SPF算法計算后,被認為是最優的OSPF路由是否一定會被放入路由器的路由表中?
A:不一定,路由器可能通過多種路由協議獲得同一路由前綴的路由信息,還需要通過路由優先級比較確定通過哪個路由協議獲得的路由會放入路由表。
下一節筆記,將會介紹OSPF路由區域間傳遞過程,理解區域間防環機制,以及掌握虛連接的配置過程。