OSPF區域與LSA詳解

 

OSPF Area & LSA詳解
LSA 101
 
LSA是LSDB建立的基礎。每條LSA都包含序列號,校驗和以及老化時間。一臺路由器始發一個LSA,之後每產生一個該LSA的拷貝就在序列號上加1,序列號從Ox8 0000001到0X7 fffffff(不用考慮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拷貝的數據包給始發路由器,這樣當鄰居路由器正好要向始發路由器發送更新數據包的時候,隱式確認就顯得很有用。
 
在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,該路由器處於NSSA區域;N-bit=0則不支持,需要注意的是如果N-bit=1,那麼E-bit必須爲0。
 
E位,當始發路由器既有接受AS外部路由的能力,骨幹區域和普通區域的路由器發的LSA的E-bit=1,而Stub區域的E-bit=0,另外可以在Hello中設置該位表明這個接口能接受和發送LSA 5。
 
P位,P位和N位在同一字段內,如果該字段選擇設置P-bit,可以告訴一個NSSA中的ABR將LSA 7 轉換爲 LSA 5,即將P-bit位從1設置爲0。
 
LSA類型
 
LSA 1:路由器LSA,Area內任何路由器都發送的LSA,用於通告本路由器所連接的鏈路狀態及代價,只在本Area內Flooding,本Area內其它路由器收到LSA1形成的路由條目以"O”表示。簡單來講,LSA1描述自身信息,當一臺OSPF路由器發出一條LSA1 ,就是在說:“我是X,我連着Y,Z等等。”
 
LSA 2:網絡LSA,本Area內DR始發。LSA2通告的對象是該廣播型鏈路所有的DRother和其他OSPF路由器(這個Area內還可能有其他類型的鏈路類型,比如點到點,或者另一個廣播鏈路,他們同樣需要知道這個廣播鏈路的信息),通告的內容是該廣播鏈路的成員和與這個鏈路相連的所有路由器。LSA2只在本Area內Flooding。
 
Attention:就字段分析,LSA1的重點在於鏈路ID和鏈路數據,針對不同的鏈路類型有不同的內容,而LSA2本身是廣播型鏈路的產物,重點在於和DR相連的路由器ID以及該廣播型鏈路的子網掩碼。
 
路由器在SPF運算時,使用LSA1確定如何到達此LAN內的各個接口,再使用LSA2確定到此鏈路的掩碼。這就是爲什麼LSA2要求被泛洪到整個Area的原因,也是LSA2最大的一個作用。
 
LSA1通告的鏈路類型                鏈路ID                                    鏈路數據
 
1 我連着點到點鏈路          鄰居路由器的ID                   他和我相連的那個接口的IP地址
2 我連着傳送網絡              這個網絡DR的地址              我和DR相連的那個接口的IP地址
3 我連着末節網絡              這個網段的地址                    這個地址的子網掩碼
4 我連着虛鏈路                  虛鏈路對端的路由器ID        我的虛鏈路接口的MIB-II ifIndex
 
這裏所說的傳送網絡和末節網絡在實際中就是指的廣播型鏈路和點到點鏈路。
 
LSA 3:網絡彙總LSA,ABR始發,LSA3通告了與ABR相連網絡的所有鏈路狀態,通過骨幹區域Area0(Transmit Area)發送到其它Area,LSA3宣告的鏈路代價是所有鏈路中代價最小的條目,在路由表中以“O IA”表示。如果LSA3通告的是一條缺省路由,那麼鏈路狀態ID和網絡掩碼字段中都將設爲0.0.0.0。
 
Attention:如果在OSPF中執行了域間彙總,那麼LSA 3中通告的就是彙總後的條目而不是明細路由,也就是說彙總是針對LSA做改變的。
 
LSA 4:ASBR彙總LSA,ABR始發,LSA4通告了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都只能在單區域內傳播。具體來看,LSA4就是在Area 0內泛洪讓ABR都知道ASBR在哪;而LSA3這裏要注意,比如Area 1的ABR將Area 1的路由信息通告進Area 0,該LSA3僅在Area 0內泛洪,Area 2會收到這個LSA3,但不是將其直接發送到Area 2,而是根據內容自己新生成一個LSA3,這樣ADV Router就發生了變化,新的LSA3會進入到Area 2並泛洪開來,這樣就保證LSA3泛洪區域的原則。從一個側面也可以看出,OSPF進行Area間路由是典型的距離矢量的行爲。
 
LSA 5:AS外部LSA,ASBR始發,LSA5通告了與ASBR直連的其它AS,不同於BGP中AS的概念,這裏只運行其它IGP的區域,LSA5被Flooding至除Stub,Total Stub, NSSA以外的所有區域,是唯一的一個不與任何Area相關聯的LSA通告。
 
該LSA形成的路由條目以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外部LSA,連接到NSSA區域的ASBR始發,該LSA內容和LSA5基本一樣(只有轉發地址字段不同),關鍵是LSA7只在始發該LSA的NSSA區域內Flooding,並在ABR轉換成LSA5,該LSA形成的路由條目以N1或N2表示。
 
事實上,LSA7和LSA5內容是一樣的,只不過由於泛洪區域的限制所以要進行必要的標記。在NSSA區域中,ASBR將外部路由信息封裝進LSA7,並設置其 P-Bit 位爲1,使其在NSSA區域裏泛洪,然後在ABR那裏將 P-Bit 位改爲0,即將LSA 7轉換爲LSA 5,再傳到OSPF其他的Area。
 
OSPF區域
 
OSPF特別的區域類型有四種:Stub ,Total Stub ,NSSA 和 Total NSSA 。其本質都是末節區域。當一個Area被定義爲Stub區域時,該區域內的路由器所發送的hello數據包都會將E-Bit位設爲0,而普通區域的應該是1,所以區域內的所有路由器都敲入 area 1 stub 這樣的命令才能正常形成鄰接關係。
 
Stub區域中不通告AS外部路由,也無法實現重發布,只有OSPF自己的信息,並通過一條O*IA的默認路由保持和AS外部的聯繫,該默認路由通過LSA3學到。
 
Total Stub 比 Stub "末節"得更爲徹底,連OSPF Area間的路由也不要,只有本Area 的信息,注入的默認路由不僅外部路由要通過它走,Area間的路由也要通過它走,而ABR就成爲這個Area的網關。Total Stub 的ABR會阻止LSA3 & 5 & 7 向Total Stub 區域內洪泛 -- 除了通告默認路由的那一條LSA3。
 
NSSA是當Stub區域中存在ASBR時形成的區域,本身Stub不涉及AS外的路由,也不能進行重發布,但無奈自己成爲了OSPF和其它IGP通信的邊界,所以就變得 Not So Stubby ,於是形成NSSA 區域,在本區域內注入的外界信息以LSA7傳遞,並在ABR處還原爲LSA5。
 
簡單來講:  NSSA = Stub + ASBR      Total NSSA = Total Stub + ASBR 
 
在Stub ,Total Stub ,NSSA 和Total NSSA 中只有NSSA沒有默認路由注入,要實現注入可以用命令: area 1 nssa default-information-originate ,這樣通過其他Area的ASBR傳遞進來的AS外部路由就可以學習到了。同時NSSA區域也可以防止AS外部路由注入,用命令 area 1 nssa no-redistribution 實現。
 
Stub 區域設計是出於對該區域路由器性能及路由條目需求的考慮而進行的LSA精簡,但不可避免的引起信息不對稱,進而出現次優選路。
 
普通區域的Router 進行Area 間的選路原則爲:
 
路由總Cost = 本Router到ABR的Cost + ABR到目的網絡的開銷    最小Cost的路由放進路由表
 
而設置爲Total Stub 的區域的Router選路原則爲:
 
路由總Cost = 本Router到達ABR的Cost    最小Cost的放進路由表
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章