天天看點

ospf難點記錄

為什麼需要劃分區域?

随着網絡規模日益擴大,網絡中的路由器數量不斷增加。當一個巨型網絡中的路由器都運作OSPF路由協定時,就會遇到如下問題:

1.每台路由器都保留着整個網絡中其他所有路由器生成的LSA,這些LSA的集合組成LSDB,路由器數量的增多會導緻LSDB非常龐大,這會占用大量的存儲空間。

2.LSDB的龐大會增加運作SPF算法的複雜度,導緻CPU負擔很重。

?由于LSDB很大,兩台路由器之間達到LSDB同步會需要很長時間。

3.網絡規模增大之後,拓撲結構發生變化的機率也增大,網絡會經常處于“動蕩”之中,為了同步這種變化,網絡中會有大量的OSPF協定封包在傳遞,降低了網絡的帶寬使用率。更糟糕的是:每一次變化都會導緻網絡中所有的路由器重新進行路由計算。

解決上述問題的關鍵主要有兩點:減少LSA的數量;屏蔽網絡變化波及的範圍。

OSPF 協定通過将自治系統劃分成不同的區域(Area)來解決上述問題。區域是在邏輯上将路由器劃分為不同的組。區域的邊界是路由器,這樣會有一些路由器屬于不同的區域,(這樣的路由器稱作區域邊界路由器——ABR),而一個網段隻能屬于一個區域。

劃分成區域之後,給OSPF協定的處理帶來了很大的變化。

4.每一個網段必須屬于一個區域,或者說每個運作OSPF協定的接口必須指名屬于某一個特定的區域,區域用區域号(Area ID)來辨別。區域号是一個從0開始的32位整數。

5.不同的區域之間通過ABR來傳遞路由資訊。

1.11 區域間路由計算

OSPF将自治系統劃分為不同的區域後,路由計算方法也發生了很多變化:

1.隻有同一個區域内的路由器之間會保持LSDB的同步,網絡拓撲結構的變化首先在區域内更新。

2.區域之間的路由計算是通過ABR來完成的。ABR首先完成一個區域内的路由計算,然後查詢路由表,為每一條OSPF路由生成一條Type3類型的LSA,内容主要包括該條路由的目的位址、掩碼、花費等資訊。然後将這些LSA發送到另一個區域中。

3.在另一個區域中的路由器根據每一條Type3的LSA生成一條路由,由于這些路由資訊都是由ABR釋出的,是以這些路由的下一跳都指向該ABR。

劃分區域後的好處:

4.由于劃分區域後ABR是根據本區域内的路由生成LSA,則可以根據IP位址的規律先将這些路由進行聚合後再生成LSA,這樣做可以大大減少自治系統中LSA的數量。

5.劃分區域之後,網絡拓撲的變化首先在區域内進行同步,如果該變化影響到聚合之後的路由,則才會由ABR将該變化通知到其他區域。大部分的拓撲結構變化都會被屏蔽在區域之内了。

1.12 骨幹區域與虛連接配接

為何需要骨幹區域?

OSPF劃分區域之後,并非所有的區域都是平等的關系。其中有一個區域是與衆不同的,它的區域号(Area ID)是0,通常被稱為骨幹區域(Backbone Area)。

由于劃分區域之後,區域之間是通過ABR将一個區域内的已計算出的路由封裝成Type3類的LSA發送到另一個區域之中來傳遞路由資訊。需要注意的是:此時的LSA中包含的已不再是鍊路狀态資訊,而是純粹的路由資訊了。或者說,此時的OSPF是基于D-V算法,而不是基于鍊路狀态算法的了。這就涉及到一個很重要的問題:路由自環。因為D-V算法無法保證消除路由自環。如果無法解決這個問題,則區域概念的提出就是失敗的。

通過分析D-V算法中路由環的産生的原因可知,自環的産生主要是因為生成該條路由資訊的路由器沒有加入生成者的資訊,即每一條路由資訊都無法知道最初是由誰所生成。OSPF協定在生成LSA時首先将自己的Router ID加入到LSA中,但是如果該路由資訊傳遞超過兩個區域後,就會喪失最初的生成者的資訊。

解決的方法是:所有ABR将本區域内的路由資訊封裝成LSA後,統一的發送給一個特定的區域,再由該區域将這些資訊轉發給其他區域。在這個特定區域内,每一條LSA都确切的知道生成者資訊。在其他區域内所有的到區域外的路由都會發送到這個特定區域中,是以就不會産生路由自環。這個“特定區域”就是骨幹區域。由上面的分析可知:所有的區域必須和骨幹區域相連,也就是說,每一個ABR連接配接的區域中至少有一個是骨幹區域。而且骨幹區域自身也必須是連通的。

虛連接配接:

由于網絡的拓撲結構複雜,有時無法滿足每個區域必須和骨幹區域直接相連的要求,例如圖中的Area 19。 為解決此問題,OSPF提出了虛連接配接的概念。虛連接配接是指在兩台ABR之間,穿過一個非骨幹區域(轉換區域——transit Area),建立的一條邏輯上的連接配接通道。可以了解為兩台ABR之間存在一個點對點的連接配接。“邏輯通道”是指兩台ABR之間的多台運作OSPF的路由器隻是起到一個轉發封包的作用(由于協定封包的目的位址不是這些路由器,是以這些封包對于他們是透明的,隻是當作普通的IP封包來轉發),兩台ABR之間直接傳遞路由資訊。這裡的路由資訊是指由ABR生成的type3的LSA,區域内的路由器同步方式沒有是以改變。

注意:

如果自治系統被劃分成一個以上的區域,則必須有一個區域是骨幹區域,并且保證其它區域與骨幹區域直接相連或邏輯上相連,且骨幹區域自身也必須是連通的。

1.13 與自治系統外部通訊

自治系統:

OSPF是自治系統内部路由協定,負責計算同一個自治系統内的路由。在這裡“自治系統”是指彼此相連的運作OSPF路由協定的所有路由器的集合。對于OSPF來說,整個網絡隻有“自治系統内”和“自治系統外”之分。需要注意的是:“自治系統外”并不一定在實體上或拓撲結構中真正的位于自治系統的外部,而是指那些沒有運作OSPF的路由器或者是某台運作OSPF協定的路由器中沒有運作OSPF的接口。

ASBR(Autonomous System Boundary Router):

作為一個IGP,OSPF同樣需要了解自治系統外部的路由資訊,這些資訊是通過ASBR(自治系統邊界路由器)獲得的,ASBR是那些将其他路由協定(也包括靜态路由和接口的直接路由)發現的路由引入(redistribute)到OSPF中的路由器。同樣需要注意的是:ASBR并不一定真的位于AS的邊界,而是可以在自治系統中的任何位置。

計算自治系統外部路由:

ASBR為每一條引入的路由生成一條Type5類型的LSA,主要内容包括該條路由的目的位址、掩碼和花費等資訊。這些路由資訊将在整個自治系統中傳播(STUB AREA除外)。計算路由時先在最短路徑樹中找到ASBR的位置,然後将所有由該ASBR生成的Type5類型的LSA都當作葉子節點挂在ASBR的下面。以上的方法在區域内部是可行的,但是由于劃分區域的原因,與該ASBR不處于同一個區域的路由器計算路由時無法知道ASBR的确切位置(該資訊被ABR給過濾掉了,因為ABR是根據區域内的已生成的路由再生成Type3類型的LSA)。為了解決這個問題,協定規定如下:如果某個區域内有ASBR,則這個區域的ABR在向其他區域生成路由資訊時必須單獨為這個ASBR生成一條Type 4類型的LSA,内容主要包括這個ASBR的Router ID和到他所需的花費值。

路由分級管理:

OSPF将所引入的自治系統外部路由分成兩類:type 1和type 2。第一類是指引入的是IGP路由(例如RIP,STATIC),由于這類路由的可信程度高一些,是以計算出的外部路由的花費與自治系統内部的路由花費的數量級是相同的,即到第一類外部路由的花費值 = 本路由器到相應的ASBR的花費值+ASBR到該路由目的位址的花費值。對于第二類外部路由是指引入的是BGP路由,由于這類路由的可信度比較低,是以OSPF協定認為從ASBR到自治系統之外的花費遠遠大于在自治系統之内到達ASBR的花費。是以計算路由花費時将主要考慮前者,即到第二類外部路由的花費值 = ASBR到該路由目的位址的花費值。如果該值相等,再考慮本路由器到相應的ASBR的花費值。如果加上前面所述的兩種路由類型,OSPF一共将路由分為四級,按優先級從高到低排列:

1.區域内路由

2.區域間路由

3.自治系統外一類路由

4.自治系統外二類路由

其中前兩種路由在路由表中的優先級是一樣的,預設值為10;後兩種路由在路由表中的優先級是相同的,預設值是150。

1.14 STUB區域與路由聚合

OSPF協定将整個自治系統劃分成不同的區域。主要出于以下目的:減少路由資訊在自治系統之中的傳遞;可以針對不同區域的拓撲特點采用不同的政策。

STUB區域

STUB區域是指那些不傳播Type5類型(即引入的外部路由)的LSA的區域。在這些區域中路由器的路由表規模以及路由資訊傳遞的數量都會大大減少。為了保證到自治系統外的路由依舊可達,由該區域的ABR生成一條預設路由(0.0.0.0)傳播到區域内,因為所有到自治系統外部的路由都必須通過ABR才能到達。STUB區域是一種可選的配置屬性,但并不是每個區域都符合配置的條件。通常的,STUB區域位于自治系統的邊界,是那些隻有一個ABR的非骨幹區域。或者該區域雖然有多個ABR,但這些ABR之間沒有配置虛連接配接。圖中的 Area 8 和 Area 19 符合配置成STUB區域的條件。

配置STUB區域的一些注意事項:

1.骨幹區域不能配置成STUB區域,虛連接配接不能穿過STUB區域。

2.如果想将一個區域配置成STUB區域,則該區域中的所有路由器都必須都配置該屬性。

3.STUB區域内不能存在ASBR,即自治系統外部路由不能引入到區域内,區域的自治系統外部路由也不能在本區域内傳播和傳遞到區域外。

NSSA(Not-So-Stubby Area)區域:

STUB 區域雖然為合理的規劃 OSPF 網絡描繪了美好的前景,但她在實際的組網中又不具備可操作性,因為實際網絡中不可能每台路由、每個接口都運作 OSPF 路由協定,STUB 區域必然需要存在 ASBR 路由器。

為此協定設計者提出了一種新的概念 NSSA,并且作為 OSPF 協定的一種擴充屬性單獨在RFC 1587中描述。

NSSA 需要完成如下任務:

1)自治系統外的 ASE 路由(自治系統外部路由)不可以進入到 NSSA 區域中,但是 NSSA 區域内的路由器引入的 ASE 路由可以在 NSSA 中傳播并發送到區域之外。即:取消了 STUB 關于 ASE 的雙向傳播的限制(區域外的進不來,區域裡的也出不去),改為單向限制(區域外的進不來,區域裡的能出去)。

2)由于是作為 OSPF 标準協定的一種擴充屬性,應盡量減少與不支援該屬性的路由器協調工作時的沖突和相容性問題。

為了解決ASE路由(自治系統外部路由)單向傳遞的問題,NSSA 中重新定義了一種LSA——Type 7類型的 LSA,作為區域内的路由器引入外部路由時使用,該類型的 LSA 除了類型辨別與 Type 5 不相同之外,其它内容基本一樣。這樣區域内的路由器就可以通過 LSA 的類型來判斷是否該路由來自本區域内。但由于Type 7類的 LSA 是新定義的,對于不支援 NSSA 屬性的路由器無法識别,是以協定規定:在 NSSA 的 ABR 上将 NSSA 内部産生的Type 7類型的 LSA 轉化為Type 5類型的 LSA 再釋出出去,并同時更改 LSA 的釋出者為 ABR 自己。這樣 NSSA 區域外的路由器就可以完全不用支援該屬性。

從上述描述可以看出:在 NSSA 區域内的所有路由器必須支援該屬性(包括NSSA的ABR),而自治系統中的其他路由器則不需要。

由于NSSA是由STUB區域的概念改進得來,是以她的名字叫做: "not-so-stubby" area ,本意是:不是那麼STUB的區域。

路由聚合:

自治系統被劃分成不同的區域,其主要目的是為了減少路由資訊及路由表的規模。這主要是通過區域間的路由聚合來實作。ABR在計算出一個區域的區域内路由之後,查詢路由表,将其中每一條OSPF 路由封裝成一條Type3類型的LSA發送到區域之外。例如圖中Area 19 内有三條區域内路由19.1.1.0/24,19.1.2.0/24,19.1.3.0/24,正常情況下RTA應該将這三條路由生成三條Type3類型的LSA。如果此時配置了路由聚合,即将三條路由聚合成19.1.0.0/16一條,在RTA上就會隻生成一條描述聚合後路由的LSA。需要注意的是:路由聚合隻有在ABR上配置才會有效。

1.15 LSA分類

OSPF是基于鍊路狀态算法的路由協定,所有對路由資訊的描述都是封裝在LSA中發送出去。LSA根據不同的用途分為不同的種類,目前使用最多的是以下五種LSA:

Router LSA(Type = 1):

是最基本的LSA類型,所有運作OSPF的路由器都會生成這種LSA。主要描述本路由器運作OSPF的接口的連接配接狀況,花費等資訊。對于ABR,它會為每個區域生成一條Router LSA。這種類型的LSA傳遞的範圍是它所屬的整個區域。

Netwrok LSA(Type = 2):

本類型的LSA由DR生成。對于廣播和NBMA類型的網絡,為了減少該網段中路由器之間交換封包的次數而提出了DR的概念。一個網段中有了DR之後不僅發送封包的方式有所改變,鍊路狀态的描述也發生了變化。在DROther 和BDR的Router LSA中隻描述到DR的連接配接,而DR則通過Network LSA來描述本網段中所有已經同其建立了鄰接關系的路由器。(分别列出它們Router ID)。同樣, 這種類型的LSA傳遞的範圍是它所屬的整個區域。

Network Summary LSA(Type = 3):

本類型的LSA由ABR生成。當ABR完成它所屬一個區域中的區域内路由計算之後,查詢路由表,将本區域内的每一條OSPF路由封裝成 Network Summary LSA 發送到區域外。 LSA中描述了某條路由的目的位址、掩碼、花費值等資訊。這種類型的LSA傳遞的範圍是ABR中除了該LSA生成區域之外的其他區域。

ASBR Summary LSA(Type = 4):

本類型的LSA同樣是由ABR生成。内容主要是描述到達本區域内部的ASBR的路由。 這種LSA與Type3類型的LSA内容基本一樣,隻是Type4的LSA描述的目的位址是ASBR,是主機路由,是以掩碼為0.0.0.0。這種類型的LSA傳遞的範圍與Type3的LSA相同。

AS External LSA(Type = 5):

本類型的LSA由ASBR生成。主要描述了到自治系統外部路由的資訊,LSA中包含某條路由的目的位址、掩碼、花費值等資訊。本類型的LSA是唯一一種與區域無關的LSA類型,它并不與某一個特定的區域相關。 這種類型的LSA傳遞的範圍整個自治系統(STUB區域除外)。

1.16 接口分類及路由器分類

OSPF協定根據鍊路層封裝協定不同分為以下四種網絡類型:

Broadcast:當鍊路層協定是Ethernet時,OSPF預設認為網絡類型是Broadcast。在這種類型網絡中, 以多點傳播位址(224.0.0.5,224.0.0.6)發送協定封包,需要選舉DR,BDR。

NBMA

當鍊路層協定是Frame Relay、X.25時,OSPF預設認為網絡類型是NBMA。在這種類型網絡中, 以單點傳播位址發送協定封包,必須手工配置鄰居的IP位址,需要選舉DR,BDR。

Point-to-Multipoint

沒有一種鍊路層協定會被預設的認為是Point-to-Multipoint類型,通常由NBMA的類型手工修改而來,如果NBMA類型的網絡不是全連通的。 在這種類型網絡中,以多點傳播位址(224.0.0.5)發送協定封包,不需要選舉DR,BDR。

Point-to-Point

當鍊路層協定是PPP,HDLC,LAPB時,OSPF預設認為網絡類型是Point-to-Point。在這種類型網絡中, 以多點傳播位址(224.0.0.5)發送協定封包,不需要選舉DR,BDR。

路由器根據在自治系統中的不同位置劃分為以下四種類型:

IAR(Internal Area Router):

區域内路由器,是指該路由器的所有接口都屬于同一個OSPF區域。這種路由器隻生成一條Router LSA,隻儲存一個LSDB。

ABR(Area Border Router):

區域邊界路由器,該路由器同時屬于兩個以上的區域(其中必須有一個是骨幹區域,也就是區域0)。該路由器為每一個所屬的區域生成一條Router LSA,為每一個所屬的區域儲存一個LSDB。并根據需要生成Network Summary LSA(Type = 3)和 ASBR Summary LSA(Type = 4)。

BBR (BackBone Router):

骨幹路由器,是指該路由器屬于骨幹區域(也就是0 區域)。由定義可知,所有的ABR都是骨幹路由器,所有的骨幹區域内部的IAR也屬于BBR。

ASBR(AS Boundary Router):

自治系統邊界路由器,是指該路由器引入了其他路由協定(也包括靜态路由和接口的直接路由)發現的路由。需要注意的是ASBR并不一定在拓撲結構中位于自治系統的邊界。ASBR生成AS External LSA(Type = 5)。

一個運作OSPF協定的接口狀态根據接口的不同類型可劃分為以下四種:

DR、BDR、DROther:

當接口的類型為Broadcast、NBMA時,需要在網段内選舉DR、BDR,根據選舉的結果不同,接口的狀态可能是以上三種中的一種。

Point-to-Point:

當接口的類型為Point-to-Point、Point-to-Multipoint時,不需要在網段内選舉DR、BDR,此時接口的狀态是Point-to-Point。

路由器的各種類型之間是可以“兼職”的(除了不能同時是IAR和ABR),例如:一台路由器可以同時是IAR、BBR、ASBR。而接口狀态是指路由器的其中一個接口的狀态,兩者之間沒有任何關系。

1.17 OSPF與路由自環

路由自環是指到某一個目的位址的路由在網絡中形成了環路,一個最簡單的例子:路由器A上有一條路由10.0.0.0/8下一跳是路由器B;而在路由器B的路由表中該路由的下一跳指向A;如果A收到一條到10.0.0.1的封包,它會轉發給B,而B根據路由表又将該封包轉發給A。于是該封包會在A、B之間不停的震蕩,直至TTL=0才會将該封包丢棄,最壞的情況可能會震蕩255次。路由自環對網絡的危害是極大的,不僅導緻路由不可達,而且浪費了大量的網絡的帶寬。路由自環是所有路由協定必須解決的問題,也是衡量一個路由協定好壞的重要标志。

D-V算法與路由自環:

D-V算法又稱為“距離—向量”算法,其核心思想是網絡中的每台路由器都将自己已知的路由表發送給相鄰的路由器,每台路由器都會根據收到的所有路由确定最優路徑的下一跳。這種算法(主要指RIP和IGPR所實作的D-V算法)的缺陷是:

1.每台路由器對接收到的路由的可信度完全依賴于相鄰的路由器。而一台路由器隻能保證自己本地路由的正确性(指本路由器的接口路由),而對由其他路由器發送來的路由則無法保證。

2.每一條路由資訊中沒有标明生成者的資訊,該路由資訊經過網絡中多次傳遞之後,可能被傳回給最初的生成者,而生成者無法知道該資訊是否由自己所釋出,這就為自環的産生埋下了隐患。

當網絡拓撲結構發生變化時,一條已經無效的路由在未能徹底清除之前,可能仍舊在網絡中傳遞,當它傳遞給該路由的生成者時,此時下一跳的計算可能會發生錯誤,導緻路由自環的産生。

OSPF與路由自環:

OSPF是一種基于鍊路狀态算法的協定,其核心思想是:每一台路由器将自己周邊的鍊路狀态(包括接口的直接路由、相連的路由器等資訊)描述出來,發送給網絡中所有的路由器。每台路由器在收到其他所有路由器的發送的鍊路狀态資訊之後,運作SPF算法計算路由。

OSPF計算出的路由不會有自環,主要有以下原因:

1.每台路由器描述的是自己能夠確定正确的資訊——自己周邊的網絡拓撲結構。并且在生成的LSA中标記了該資訊的生成者——寫入自己的Router ID。其他的路由器隻負責在網絡中傳輸該資訊,而不會有任何的更改。這一點保證了無論網絡的拓撲結構如何,無論路由器位于網絡中的什麼位置,都可以準确無誤的接收到全網的拓撲結構圖。

2.路由計算的算法是SPF算法。計算的結果是一棵樹,路由是樹上的葉子節點。從根節點到葉子節點是單向不可回複的路徑。

3.當網絡的拓撲結構發生變化時(此時最易産生路由自環),會有一台(或多台)路由器感覺到這一變化,重新描述網絡拓撲結構,并将其通知給其他路由器。每個路由器接收到更新資訊後,都會立即重新運作SPF算法,得到新的路由。

OSPF真的沒有路由自環嗎?

上文中描述的是指沒有劃分區域時的情況,或者說是在同一區域内OSPF的運作情況。當OSPF劃分為不同的區域之後,ABR通過将區域内已計算好的路由封裝成Type3類型的LSA發送出去。需要特别注意的是:此時ABR隻是單純的對路由進行描述,而不是描述鍊路的狀态了。或者說,此時的OSPF計算區域間路由時使用的是D-V算法。這時就可能會産生路由自環,OSPF通過骨幹區域解決了這個問題(詳情見“骨幹區域與虛連接配接”)。

但是當OSPF引入自治系統外部路由時,ASBR封裝在Type5類型的LSA中的同樣是路由資訊,而不是鍊路狀态。這時也同樣會産生路由自環。這一次OSPF沒有采取任何措施來避免自環的生成,因為引入的自治系統外部路由其本身就是不可靠的。它可能來源于RIP等不可靠的路由,或者是配置錯誤的靜态路由等等,可能這些路由本身就存在路由環。劃分區域時區域内計算出的路由都是正确無誤的,是以應極力避免由于劃分區域而生成新的環路。而引入的外部路由由于其來源即不可靠,是以就沒必要再進行其他的操作了。

“OSPF協定不會産生路由自環”這句話的嚴格定義應該是:OSPF協定生成的自治系統内部路由是無自環的,引入的自治系統外部路由則無法保證。

繼續閱讀