OSPF Area & LSA詳解

LSA 101
 
LSA是LSDB建立的基礎。每條LSA都包含序列號,校驗和以及老化時間。一臺路由器始發一個LSA,之後每產生一個該LSA的拷貝就在序列號上加1,序列號從0x80000001到0x7fffffff(不用考慮8和7的大小),數值越大視爲越新。
 
LSA存放在LSDB中每5mins就會進行一次校驗,以確保該LSA沒有損壞。一條LSA的老化時間爲1h,始發路由器發出一條LSA時會將其時間設置爲0,每經過一臺路由器就增加一個由InfTransDelay設定的秒數(Cisco路由器上默認爲1),當LSA在LSDB中駐留時,老化時間也會逐漸增大。
 
當一條LSA在LSDB中一直沒有被新的LSA實例刷新直到老化計時器超時,就會從本地的LSDB中清除,但是這個動作不會影響到別的路由器,在OSPF網絡中只有始發路由器能夠提前使該LSA老化,即有意識的清除該LSA,具體動作是將該LSA的老化時間設爲最大然後重新泛洪出去。
 
LSA的刷新時間是30mins,關於刷新機制是個值得關注的問題。如果每個LSA都關聯一個獨自的重刷新計時器,這樣會使鏈路帶寬的利用沒有效率,如果統一爲一個計時器,那麼每隔30mins都會產生一個流量和CPU利用率的高峯。
 
作爲折衷的的解法,引入LSA組步調機制,即每一條LSA依然保持各自的重刷新計時器,不過在超時的時候,會引入一個時延(缺省爲240s)來推遲這些LSA通告泛洪的時間,並在這個時間段內將更多的LSA通告編爲一組,使一個LSU可以攜帶更多的LSA再通告出去。
 
如果LSDB非常大,那麼減小這個時延會比較好,而如果LSDB較小的話,增大這個時延會更有效率,該組步調計時器的範圍從10到1800s。
 
每一個LSA都必須要得到接收路由器的確認,確認分爲顯式確認和隱式確認兩種,顯示確認就是用LSAck給予迴應,LSAck中只含有該LSA的頭部,因爲這樣就足夠了;而隱式確認是發送包含該LSA拷貝的數據包給始發路由器,當鄰居路由器收到該LSA,又剛好要向始發路由器發送自己的LSU的時候,隱式確認就顯得很方便。
 
在OSPF的Hello,DBD和LSA中都有一個Option字段,即可選字段。下面重點說一下LSA中的一些位:
 
DN位,用於基於MPLS的三層***技術。當一條路由通過OSPF從某個客戶網絡學到,就會穿過使用多協議BGP的***被通告到網絡對端,接着再通過OSPF被通告回客戶網絡。通告回的OSPF網絡會被重新分配到***運營商網絡,這樣就產生環路。而DN位就是用來避免環路,當LSA 3 & 5 & 7設置了DN位後,接收路由器就不能用該LSA進行SPF計算。
 
O位,用來表明始發路由器支持Opaque LSA,即LSA 9 & 10 & 11,可用做MPLS網絡應用的流量工程參數。
 
N位,設置N-bit=1,表明該LSA支持NSSA外部路由,即爲LSA 7,N-bit=0則不支持。需要注意的是如果N-bit=1,那麼E-bit必須爲0。
 
E位,設置E-bit=0,表明該LSA始發於Stub區域路由器,如果是NSSA區域該位也設爲0,其他類型區域始發的LSA都設置E-bit=1,另外可以在Hello中設置該位表明這個接口能接受和發送LSA 5,形成鄰居時會檢查該字段看對端接口是否屬於相同類型的區域。
 
P位,P位和N位在同一字段內,如果該字段選擇設置P-bit,可以告訴一個NSSA中的ABR將LSA 7 轉換爲 LSA 5,即將P-bit位從1設置爲0。
 
 
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上進行。 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章