Ⅰ OSPF stub和NSSA區域里分別有哪些類型的LSA
連接到同一個OSPF區域的所有路由器都會獲悉完全相同的拓撲數據。每台路由器在鏈路狀態資料庫中存儲這些由鏈路狀態通告(LSA)組成的的數據。然後,路由器對LSDB運行SPF(最短路徑優先)演算法,以確定前往每個子網的最佳路由。
下面就介紹下OSPF中所有類型的LSA。
總體上來說,有以下幾種:
1.類型1:Router LSA
2.類型2:Network LSA
3.類型3:Network Summary LSA
4.類型4:ASBR Summary LSA
5.類型5:AS External LSA
6.類型6:Group Membership LSA
7.類型7:NSSA External LSA
8.類型8:External Attributes LSA
9.類型9:Opaque LSA(link-local scope)
10.類型10:Opaque LSA(area-local scope)
11.類型11:Opaque LSA(AS scope)
下面來進行詳細的解釋。
1.Router LSA
每台路由器都創建1類LSA,用於向它連接的每個區域描述自己。在每台路由器中,每個區域的LSDB都包含一個1類的LSA,它指出了當前路由器的RID和所有介面的IP地址,1類LSA還用於描述末梢網路。
1類LSA使用OSPF路由器ID標示OSPF路由器。每台路由器都創建一個1類的LSA並泛洪到整個區域。為了泛洪LSA,始發路由器將1類LSA發 送給當前區域內的鄰居,然後鄰居再將其發送給當前區域的其他鄰居,以此類推,知道區域內的所有路由器都有該LSA的拷貝。
1類LSA包含信息:對於沒有選舉DR的每個介面,指出介面的子網號/掩碼和OSPF開銷
對於選舉了DR的每個介面,指出DR的IP地址以及連接到中轉網路的鏈路。
對於沒有選舉DR但是通過它可以到達一個鄰居的介面,指出該鄰居的RID。
每台內部路由器都創建一個1類的LSA,但是ABR創建多個1類LSA,每個區域都有一個。
此種LSA 可以通過show ip ospf database router 查看router LSA
2:Network LSA
每個多路訪問網路中,子網中的DR都會創建Network LSA,描述了子網及連接到該子網的路由器借口。它只在產生這條Network LSA 的區域泛洪描述了所有和它相連的路由器(包括DR 本身)。
Show ip ospf database network 可以看到Network LSA
3:Network Summary LSA
由ABR創建,描述了一個區域的1類和2類LSA中包含的子網,被通告到另一個區域。它指出了始發區域的鏈路(子網)和開銷,但是沒有拓撲數據。
如果ABR 知道有多條路徑可以到達目標地址,但是它仍然只發送單個的Network Summary LSA,並且是開銷最低的那條;同樣,如果ABR 從其他的ABR那裡收到多條Network Summary LSA 的話,它會只選擇開銷最低的,並把這條Network Summary LSA 宣告給其他區域
當其他的路由器收到來自ABR 的NetworkSummary LSA 以後,它不會運行SPF 演算法,它只簡單的 加上到達那個ABR 的開銷和Network Summary LSA中包含的開銷,通過ABR,到達目標地址的路由和開銷一起被加進路由表裡,這種依賴中間路由器來確定到達目標地址的完全路由(full route)實際上是距離矢量路由協議的行為
可以使用show ip ospf database summary 查看Network Summary LSA
4:ASBR Summary LSA
類似於3類LSA,只是通告一條用於前往ASBR的主機路由,而不是一個網路。
使用show ip ospf database asbr-summary 可以看到ASBR Summary LSA
5:AS External LSA
AS外部LSA,由ASBR創建,用於描述被注入到OSPF中的外部路由。這種LSA 將在全AS 內泛洪。
可以使用show ip ospf database external看AS External LSA
6:Group Membership LSA
組成員關系LSA,這是為MOSPF定義的,思科的IOS不支持。
7:NSSA External LSA
NSSA外部LSA,來自非完全Stub 區域(not-so-stubby area)內,類似於5類LSA,只不過是由NSSA區域中的ASBR創建,只在NSSA 區域內泛洪。
使用命令Show ip ospf database nssa-external可以看NSSA External LSA
8:External Attributes LSA
外部屬性LSA,思科路由器不能實現。
9--11:Opaque LSA
不透明LSA,用作通用LSA,以方便擴展OSPF。(如:為了支持MPLS流量工程而修改了類型10的LSA。)
最後,再說下OSPF中各種區域會產生的LSA:
骨幹:12345
STUB:1234
NSSA :1237
LSA類型
LSA 1:Router LSA,始發於Area內的任何路由器。
LSA 1列出了路由器的鏈路和介面,鏈路的出站Cost以及介面狀態。LSA 1隻在本Area內Flooding,本Area內其它路由器收到LSA1形成的路由條目以「O」 表示。簡單來講,LSA1描述自身的直連信息。
LSA 2:Network LSA,本Area內DR始發。
LSA2通告的對象:
該LAN 內所有的DRother和Area內的其他路由器(一個Area裡面可能還有其他鏈路,比如點到點,或者另一個LAN,他們作為Area成員需要知道該LAN 的信息)。
LSA 2通告的內容:
該LAN 內所有和DR形成Full 鄰接關系的路由器的Router-id 以及DR本身的Router-id,再就是該LAN的網路掩碼(LAN中的各介面掩碼肯定是一樣的,否則無法形成OSPF鄰居)。LSA2隻在本Area內Flooding。
Attention:就欄位分析,LSA1的重點在於鏈路ID和鏈路數據,針對不同的鏈路類型有不同的內容,而LSA2本身是廣播型鏈路的產物,重點在於和DR相連的路由器ID以及該廣播型鏈路的網路掩碼。
路由器在SPF運算時,使用LSA1確定如何到達此LAN內的各個介面,使用LSA2確定此LAN的網路掩碼。這就是LSA2要求被泛洪到整個Area的原因,也是LSA2最大的一個作用。
LSA1通告的鏈路類型 鏈路ID 鏈路數據
1 我連著點到點鏈路 鄰居路由器的ID 與其直連所用的本端介面IP地址
2 我連著傳送網路 這個網路DR的地址 我和DR相連的那個介面的IP地址
3 我連著末節網路 這個網段的地址 這個網段的子網掩碼
4 我連著一條虛鏈路 虛鏈路對端的路由器ID 我的虛鏈路介面的MIB-II ifIndex
這里所說的傳送網路在實際中就是廣播型鏈路,而末節網路可能是所連的點到點鏈路,一個環回口代表的網段,或者一個實際連接的主機子網段。而MIB-II ifindex 就是虛鏈路所依託的實際鏈路的入口IP地址,虛鏈路的建立是在兩台ABR之間選擇一條Cost最低的路徑。
Eg: (Lo0:1.1.1.1)R1-.1----12.1.1.0----.2-R2(Lo0:2,2.2.2)
R1會向R2通告一個LSA1,其中包含3條自己有關的鏈路:
1.A Stub Network , Link ID = 1.1.1.1 & Link Data = 255.255.255.255
R1認為學到一個末節網路(實際是通過Lo0模擬的主機地址)
2.Another Router(Point-to-Point),Link ID = 2.2.2.2 & Link Data = 12.1.1.1
R1認為自己通過點到點鏈路連著另一個Router,它的ID是2.2.2.2,R1通過12.1.1.1這個介面和它相連。
3.A Stub Network , Link ID = 12.1.1.0 & Link Data = 255.255.255.0
R1認為自己學到一個末節網路(實際是一條點到點的鏈路)
LSA 3:Network Summary LSA,ABR始發。
LSA 3通告的是ABR相連Area的鏈路信息,具體來講就是將自己Area內的鏈路告訴Area 0,也將其他Area(包括Area 0)的信息傳到自己的Area。其通告的鏈路是所有鏈路中Cost最小的,在路由表中以「O IA」 表示。如果LSA3通告的是一條預設路由,那麼鏈路狀態ID和網路掩碼欄位中都將設為0.0.0.0。
Attention:如果在OSPF中執行了Area間匯總,那麼LSA 3中通告的就是匯總路由而不是明細的,其實這里就應該說成是「路由」而不是「鏈路」,因為LSA 3本身通告的就是各網路如何可達,接收路由器並不明了該Area的拓撲結構,只是以DV的思想,將LSA 3中通告的鏈路加上自己到ABR(即ADV Router)的開銷就放進路由表了。
LSA 4:ASBR Summary LSA,ABR始發。
LSA 4通告了ASBR的具體位置,是一條到達ASBR的主機路由。
LSA3和LSA4都由ABR始發,報文格式是相同的,只不過有幾處欄位內容不一樣。在「鏈路狀態ID」 這個欄位中,LSA3通告的是網路或子網的IP地址,而LSA4通告的是ASBR的路由器ID;而「網路掩碼欄位」對LSA4沒什麼意義,設置為0.0.0.0。
一台Router成為ABR的前提是必須有運行OSPF進程的介面與Area 0直連,否則不會產生LSA 3 和LSA 4,也就無法完成ABR的任務,解決辦法一般是通過虛鏈路。
Attention:LSA3和LSA4都只能在單Area內泛洪。具體來看,LSA4就是在Area 0內泛洪讓ABR都知道ASBR在哪;而LSA3這里要注意,比如Area 1的ABR將Area 1的路由信息通告進Area 0,該LSA3僅在Area 0內泛洪,Area 2會收到這個LSA3,但不是將其直接發送到Area 2,而是新生成一個LSA3,因為不僅要加上自己到那個ABR的鏈路開銷,而且ADV Router也要改為自己,新的LSA3會進入到Area 2並泛洪開來,所以還是遵守了LSA 3的泛洪原則。從一個側面也可以看出,OSPF進行Area間路由是典型的距離矢量的行為。
LSA 5:AS External LSA,ASBR始發。
LSA 5通告了與ASBR直連的其它AS的路由信息,不同於BGP中AS的概念,這里指IGP區域。LSA 5被Flooding 至除Stub,Total Stub,,NSSA以外的所有Area,是唯一的一個不與任何Area相關聯的LSA通告。
LSA 5形成的路由條目以E1或E2表示(默認為E2),可以通過命令改為E1類型 redistribute igp subnets metric-type 1 。
E2 Cost = ASBR到AS外部目的網路的Cost
E1 Cost = 本地到ASBR的Cost + ASBR到AS外部目的網路的Cost。
Attention:當OSPF路由器獲得一條LSA 5,在裝進路由表之前會檢查「轉發地址」是否可以通過Area內或Area間路由到達,若不可達,不會裝進路由表。
LSA 7:NSSA External LSA,由NSSA區域的ASBR始發。
該LSA內容和LSA5基本一樣(只有轉發地址欄位不同),關鍵是LSA7隻在始發該LSA的NSSA區域內Flooding,並在ABR轉換成LSA5,LSA 7形成的路由條目以N1或N2表示。
事實上LSA7和LSA5內容一樣,只不過泛洪區域有限制所以要標記一下,而且是可以相互轉換的。在NSSA區域中,ASBR將外部路由信息封裝進LSA ,設置其P-Bit 位為1,使其在NSSA區域里泛洪。在ABR那裡會將P-Bit 位改為0,由LSA 7轉換為LSA 5,再傳到OSPF其他的Area。同樣的,如果有別的Area通告進來的外部路由要注入到這個NSSA區域中,在該NSSA區域的ABR那裡會將LSA 5轉換為LSA 7。
OSPF區域
OSPF 特殊區域類型有四種:Stub ,Total Stub ,NSSA 和 Total NSSA 。其本質都是「LSA精簡的Area 」。當一個Area 被定義為Stub區域時,該Area 內的路由器所發送的hello數據包都會將E-Bit位設為0,而普通區域的應該是1,所以區域內的所有路由器都敲入area 1 stub 這樣的命令才能正常形成鄰接關系。
LSA的精簡決定了Stub區域在接收LSA時會有所取捨,但對本Area信息的向外通告不會有任何影響,因此別的Area對Stub區域的信息是完全了解的。像是要成為Total Stub區域只需要在ABR上加上關鍵字no-summary,因為阻止的是ABR向Stub區域內發送LSA3。
Stub區域中不通告AS外部路由,也無法實現重發布,但是有OSPF Area內和Area間的完整信息,並通過一條默認路由O*IA 保持和AS外部的聯系,該默認路由通過LSA 3學到。Stub 區域設計是出於對該區域路由器性能及路由條目需求的考慮而進行的LSA精簡,但不可避免的引起信息不對稱,進而出現次優選路。
Total Stub 比 Stub 「末節」得更為徹底,連OSPF Area間的路由也不要,只有本Area 的信息。ABR將默認路由注入Total Stub 區域,不僅外部路由要通過它走,Area間的路由也要通過它走,同時ABR會阻止LSA3 & 5 & 7 在Total Stub 區域內泛洪 -- 除了通告默認路由的那一條LSA3。
普通區域的Router 進行Area 間的選路原則為:
路由總Cost = 本Router到ABR的Cost + ABR到目的網路的開銷 Cost最小的路由放進路由表
而設置為Total Stub 的區域的Router 選路原則為:
路由總Cost = 本Router到達ABR的Cost Cost最小的路由放進路由表
NSSA是當Stub區域中存在ASBR時形成的區域,本身Stub不能有AS外部路由,也不能進行重發布,但無奈自己成為了OSPF和其它IGP通信的邊界,變得 Not So Stubby ,於是形成NSSA 區域,在NSSA區域內注入的外部路由以LSA 7傳遞,並在ABR處還原為LSA 5。
簡單來講: NSSA = Stub + ASBR Total NSSA = Total Stub + ASBR
在Stub ,Total Stub ,NSSA 和Total NSSA 中只有NSSA不會自動注入默認路由,不過可以用命令實現: area 1 nssa default-information-originate ,這樣即使是其他Area注入的外部路由也可達,基本上就是can go anywhere。
如果NSSA區域的ABR同時也是一個ASBR,會將外部路由以LSA 7 的形式注入到NSSA區域當中,那麼針對這種特殊情況可以用命令 area 1 nssa no-redistribution 來阻止外部路由的注入。
外部路由在NSSA中以LSA 7存在,在ABR那裡會轉換為LSA 5向Area 0通告,我們可以用命令 summary-address prefix mask not-advertise 針對具體的條目控制LSA轉換的過程,如果不用關鍵字 not-advertise 這條命令是用來外部路由匯總的,在ASBR上進行。