第四章 網路層之IP支援協議--OSPF(2)起源、概述、工作原理
OSPF路由協議概念及工作原理
——隨著Internet技術在全球範圍的飛速發展,OSPF已成為目前Internet廣域網和Intranet企業網採用最多、應用最廣泛的路由協議之一。OSPF(Open Shortest Path First)路由協議是由IETF(Internet Engineering Task Force)IGP工作小組提出的,是一種基於SPF演算法的路由協議,目前使用的OSPF協議是其第二版,定義於RFC1247和RFC1583。
1.概述
——OSPF路由協議是一種典型的鏈路狀態(Link-state)的路由協議,一般用於同一個路由域內。在這裡,路由域是指一個自治系統(Autonomous System),即AS,它是指一組通過統一的路由政策或路由協議互相交換路由資訊的網路。在這個AS中,所有的OSPF路由器都維護一個相同的描述這個AS結構的資料庫,該資料庫中存放的是路由域中相應鏈路的狀態資訊,OSPF路由器正是通過這個資料庫計算出其OSPF路由表的。
——作為一種鏈路狀態的路由協議,OSPF將鏈路狀態廣播資料包LSA(Link State Advertisement)傳送給在某一區域內的所有路由器,這一點與距離向量路由協議不同。執行距離向量路由協議的路由器是將部分或全部的路由表傳遞給與其相鄰的路由器。
2.資料包格式
——在OSPF路由協議的資料包中,其資料包頭長為24個位元組,包含如下8個欄位:
* Version number-定義所採用的OSPF路由協議的版本。
* Type-定義OSPF資料包型別。OSPF資料包共有五種:
* Hello-用於建立和維護相鄰的兩個OSPF路由器的關係,該資料包是週期性地傳送的。
* Database Description-用於描述整個資料庫,該資料包僅在OSPF初始化時傳送。
* Link state request-用於向相鄰的OSPF路由器請求部分或全部的資料,這種資料包是在當路由器發現其資料已經過期時才傳送的。
* Link state update-這是對link state請求資料包的響應,即通常所說的LSA資料包。
* Link state acknowledgment-是對LSA資料包的響應。
* Packet length-定義整個資料包的長度。
* Router ID-用於描述資料包的源地址,以IP地址來表示。
* Area ID-用於區分OSPF資料包屬於的區域號,所有的OSPF資料包都屬於一個特定的OSPF區域。
* Checksum-校驗位,用於標記資料包在傳遞時有無誤碼。
* Authentication type-定義OSPF驗證型別。
* Authentication-包含OSPF驗證資訊,長為8個位元組。
3.OSPF基本演算法
3.1 SPF演算法及最短路徑樹
——SPF演算法是OSPF路由協議的基礎。SPF演算法有時也被稱為Dijkstra演算法,這是因為最短路徑優先演算法SPF是Dijkstra發明的。SPF演算法將每一個路由器作為根(ROOT)來計算其到每一個目的地路由器的距離,每一個路由器根據一個統一的資料庫會計算出路由域的拓撲結構圖,該結構圖類似於一棵樹,在SPF演算法中,被稱為最短路徑樹。在OSPF路由協議中,最短路徑樹的樹幹長度,即OSPF路由器至每一個目的地路由器的距離,稱為OSPF的Cost,其演算法為:Cost = 100×106/鏈路頻寬
——在這裡,鏈路頻寬以bps來表示。也就是說,OSPF的Cost 與鏈路的頻寬成反比,頻寬越高,Cost越小,表示OSPF到目的地的距離越近。舉例來說,FDDI或快速乙太網的Cost為1,2M序列鏈路的Cost為48,10M乙太網的Cost為10等。
3.2 鏈路狀態演算法
——作為一種典型的鏈路狀態的路由協議,OSPF還得遵循鏈路狀態路由協議的統一演算法。鏈路狀態的演算法非常簡單,在這裡將鏈路狀態演算法概括為以下四個步驟:
當路由器初始化或當網路結構發生變化(例如增減路由器,鏈路狀態發生變化等)時,路由器會產生鏈路狀態廣播資料包LSA(Link-State Advertisement),該資料包裡包含路由器上所有相連鏈路,也即為所有埠的狀態資訊。
所有路由器會通過一種被稱為重新整理(Flooding)的方法來交換鏈路狀態資料。Flooding是指路由器將其LSA資料包傳送給所有與其相鄰的OSPF路由器,相鄰路由器根據其接收到的鏈路狀態資訊更新自己的資料庫,並將該鏈路狀態資訊轉送給與其相鄰的路由器,直至穩定的一個過程。 當網路重新穩定下來,也可以說OSPF路由協議收斂下來時,所有的路由器會根據其各自的鏈路狀態資訊資料庫計算出各自的路由表。該路由表中包含路由器到每一個可到達目的地的Cost以及到達該目的地所要轉發的下一個路由器(next-hop)。
第4個步驟實際上是指OSPF路由協議的一個特性。當網路狀態比較穩定時,網路中傳遞的鏈路狀態資訊是比較少的,或者可以說,當網路穩定時,網路中是比較安靜的。這也正是鏈路狀態路由協議區別與距離向量路由協議的一大特點。
4.OSPF路由協議的基本特徵
——前文已經說明了OSPF路由協議是一種鏈路狀態的路由協議,為了更好地說明OSPF路由協議的基本特徵,我們將OSPF路由協議與距離向量路由協議之一的RIP(Routing Information Protocol)作一比較,歸納為如下幾點:
——RIP路由協議中用於表示目的網路遠近的唯一引數為跳(HOP),也即到達目的網路所要經過的路由器個數。在RIP路由協議中,該引數被限制為最大15,也就是說RIP路由資訊最多能傳遞至第16個路由器;對於OSPF路由協議,路由表中表示目的網路的引數為Cost,該引數為一虛擬值,與網路中鏈路的頻寬等相關,也就是說OSPF路由資訊不受物理跳數的限制。並且,OSPF路由協議還支援TOS(Type of Service)路由,因此,OSPF比較適合應用於大型網路中。
——RIP路由協議不支援變長子網遮蔽碼(VLSM),這被認為是RIP路由協議不適用於大型網路的又一重要原因。採用變長子網遮蔽碼可以在最大限度上節約IP地址。OSPF路由協議對VLSM有良好的支援性。
——RIP路由協議路由收斂較慢。RIP路由協議週期性地將整個路由表作為路由資訊廣播至網路中,該廣播週期為30秒。在一個較為大型的網路中,RIP協議會產生很大的廣播資訊,佔用較多的網路頻寬資源;並且由於RIP協議30秒的廣播週期,影響了RIP路由協議的收斂,甚至出現不收斂的現象。而OSPF是一種鏈路狀態的路由協議,當網路比較穩定時,網路中的路由資訊是比較少的,並且其廣播也不是週期性的,因此OSPF路由協議即使是在大型網路中也能夠較快地收斂。
——在RIP協議中,網路是一個平面的概念,並無區域及邊界等的定義。隨著無級路由CIDR概念的出現,RIP協議就明顯落伍了。在OSPF路由協議中,一個網路,或者說是一個路由域可以劃分為很多個區域area,每一個區域通過OSPF邊界路由器相連,區域間可以通過路由總結(Summary)來減少路由資訊,減小路由表,提高路由器的運算速度。
——OSPF路由協議支援路由驗證,只有互相通過路由驗證的路由器之間才能交換路由資訊。並且OSPF可以對不同的區域定義不同的驗證方式,提高網路的安全性。
——OSPF路由協議對負載分擔的支援效能較好。OSPF路由協議支援多條Cost相同的鏈路上的負載分擔,目前一些廠家的路由器支援6條鏈路的負載分擔。
5.區域及域間路由
——前文已經提到過,在OSPF路由協議的定義中,可以將一個路由域或者一個自治系統AS劃分為幾個區域。在OSPF中,由按照一定的OSPF路由法則組合在一起的一組網路或路由器的集合稱為區域(AREA)。
——在OSPF路由協議中,每一個區域中的路由器都按照該區域中定義的鏈路狀態演算法來計算網路拓撲結構,這意味著每一個區域都有著該區域獨立的網路拓撲資料庫及網路拓撲圖。對於每一個區域,其網路拓撲結構在區域外是不可見的,同樣,在每一個區域中的路由器對其域外的其餘網路結構也不瞭解。這意味著OSPF路由域中的網路鏈路狀態資料廣播被區域的邊界擋住了,這樣做有利於減少網路中鏈路狀態資料包在全網範圍內的廣播,也是OSPF將其路由域或一個AS劃分成很多個區域的重要原因。
——隨著區域概念的引入,意味著不再是在同一個AS內的所有路由器都有一個相同的鏈路狀態資料庫,而是路由器具有與其相連的每一個區域的鏈路狀態資訊,即該區域的結構資料庫,當一個路由器與多個區域相連時,我們稱之為區域邊界路由器。一個區域邊界路由器有自身相連的所有區域的網路結構資料。在同一個區域中的兩個路由器有著對該區域相同的結構資料庫。
——我們可以根據IP資料包的目的地地址及源地址將OSPF路由域中的路由分成兩類,當目的地與源地址處於同一個區域中時,稱為區域內路由,當目的地與源地址處於不同的區域甚至處於不同的AS時,我們稱之為域間路由。
OSPF的骨幹區域及虛擬鏈路(Virtual-link)
——在OSPF路由協議中存在一個骨幹區域(Backbone),該區域包括屬於這個區域的網路及相應的路由器,骨幹區域必須是連續的,同時也要求其餘區域必須與骨幹區域直接相連。骨幹區域一般為區域0,其主要工作是在其餘區域間傳遞路由資訊。所有的區域,包括骨幹區域之間的網路結構情況是互不可見的,當一個區域的路由資訊對外廣播時,其路由資訊是先傳遞至區域0(骨幹區域),再由區域0將該路由資訊向其餘區域作廣播。
——在實際網路中,可能會存在backbone不連續的或者某一個區域與骨幹區域物理不相連的情況,在這兩種情況下,系統管理員可以通過設定虛擬鏈路的方法來解決。
——虛擬鏈路是設定在兩個路由器之間,這兩個路由器都有一個埠與同一個非骨幹區域相連。虛擬鏈路被認為是屬於骨幹區域的,在OSPF路由協議看來,虛擬鏈路兩端的兩個路由器被一個點對點的鏈路連在一起。在OSPF路由協議中,通過虛擬鏈路的路由資訊是作為域內路由來看待的。下面我們分兩種情況來說明虛擬鏈路在OSPF路由協議中的作用。
1.當一個區域與area0沒有物理鏈路相連時
——前文已經提到,一個骨幹區域Area 0必須位於所有區域的中心,其餘所有區域必須與骨幹區域直接相連。但是,也存在一個區域無法與骨幹區域建立物理鏈路的可能性,在這種情況下,我們可以採用虛擬鏈路。虛擬鏈路使該區域與骨幹區域間建立一個邏輯聯接點,該虛擬鏈路必須建立在兩個區域邊界路由器之間,並且其中一個區域邊界路由器必須屬於骨幹區域。
——在上面所示的例子中,區域1與區域0並無物理相連鏈路,我們可以在路由器A及路由器B之間建立虛擬鏈路,這樣,將區域2作為一個穿透網路(Transit-network),路由器B作為接入點,區域1就與區域0建立了邏輯聯接。
2.當骨幹區域不連續時
——OSPF路由協議要求骨幹區域area0必須是連續的,但是,骨幹區域也會出現不連續的情況,例如,當我們想把兩個OSPF路由域混合到一起,並且想要使用一個骨幹區域時,或者當某些路由器出現故障引起骨幹區域不連續的情況,在這些情況下,我們可以採用虛擬鏈路將兩個不連續的區域0連線到一起。這時,虛擬鏈路的兩端必須是兩個區域0的邊界路由器,並且這兩個路由器必須都有處於同一個區域的埠。
——在上面的例子中,穿過區域1的虛擬鏈路將兩個分為兩半的骨幹區域連線到一起,路由器A與B之間的路由資訊作為OSPF域內路由來處理。
——另外,當一個非骨幹區域的區域分裂成兩半時,不能採用虛擬鏈路的方法來解決。當出現這種情況時,分裂出的其中一個區域將被其餘的區域作為域間路由來處理。 殘域(Stub area)
——在OSPF路由協議的鏈路狀態資料庫中,可以包括AS外部鏈路狀態資訊,這些資訊會通過flooding傳遞到AS內的所有OSPF路由器上。但是,在OSPF路由協議中存在這樣一種區域,我們把它稱為殘域(stub area),AS外部資訊不允許廣播進/出這個區域。對於殘域來說,訪問AS外部的資料只能根據預設路由(default-route)來定址。這樣做有利於減小殘域內部路由器上的鏈路狀態資料庫的大小及儲存器的使用,提高路由器計算路由表的速度。
——當一個OSPF的區域只存在一個區域出口點時,我們可以將該區域配置成一個殘域,在這時,該區域的邊界路由器會對域內廣播預設路由資訊。需要注意的是,一個殘域中的所有路由器都必須知道自身屬於該殘域,否則殘域的設定沒有作用。另外,針對殘域還有兩點需要注意:一是殘域中不允許存在虛擬鏈路;二是殘域中不允許存在AS邊界路由器。
6.OSPF協議路由器及鏈路狀態資料包分類
6.1 OSPF路由器分類
——當一個AS劃分成幾個OSPF區域時,根據一個路由器在相應的區域之內的作用,可以將OSPF路由器作如下分類:
——內部路由器:當一個OSPF路由器上所有直聯的鏈路都處於同一個區域時,我們稱這種路由器為內部路由器。內部路由器上僅僅執行其所屬區域的OSPF運演算法則。
——區域邊界路由器:當一個路由器與多個區域相連時,我們稱之為區域邊界路由器。區域邊界路由器執行與其相連的所有區域定義的OSPF運演算法則,具有相連的每一個區域的網路結構資料,並且瞭解如何將該區域的鏈路狀態資訊廣播至骨幹區域,再由骨幹區域轉發至其餘區域。
——AS邊界路由器:AS邊界路
由器是與AS外部的路由器互相交換路由資訊的OSPF路由器,該路由器在AS內部廣播其所得到的AS外部路由資訊;這樣AS內部的所有路由器都知道至AS邊界路由器的路由資訊。AS邊界路由器的定義是與前面幾種路由器的定義相獨立的,一個AS邊界路由器可以是一個區域內部路由器或是一個區域邊界路由器。——指定路由器—DR:在一個廣播性的、多接入的網路(例如Ethernet、TokenRing及FDDI環境)中,存在一個指定路由器(Designated Router),指定路由器主要在OSPF協議中完成如下工作:
——指定路由器產生用於描述所處的網段的鏈路資料包—network link,該資料包裡包含在該網段上所有的路由器,包括指定路由器本身的狀態資訊。
——指定路由器與所有與其處於同一網段上的OSPF路由器建立相鄰關係。由於OSPF路由器之間通過建立相鄰關係及以後的flooding來進行鏈路狀態資料庫是同步的,因此,我們可以說指定路由器處於一個網段的中心地位。 ——需要說明的是,指定路由器DR的定義與前面所定義的幾種路由器是不同的。DR的選擇是通過OSPF的Hello資料包來完成的,在OSPF路由協議初始化的過程中,會通過Hello資料包在一個廣播性網段上選出一個ID最大的路由器作為指定路由器DR,並且選出ID次大的路由器作為備份指定路由器BDR,BDR在DR發生故障後能自動替代DR的所有工作。當一個網段上的DR和BDR選擇產生後,該網段上的其餘所有路由器都只與DR及BDR建立相鄰關係。在這裡,一個路由器的ID是指向該路由器的標識,一般是指該路由器的環回埠或是該路由器上的最小的IP地址。
6.2 OSPF鏈路狀態廣播資料包種類
——隨著OSPF路由器種類概念的引入,OSPF路由協議又對其鏈路狀態廣播資料包(LSA)作出了分類。OSPF將鏈路狀態廣播資料包共分成5類,分別為:
型別1:又被稱為路由器鏈路資訊資料包(Router Link),所有的OSPF路由器都會產生這種資料包,用於描述路由器上聯接到某一個區域的鏈路或是某一埠的狀態資訊。路由器鏈路資訊資料包只會在某一個特定的區域內廣播,而不會廣播至其它的區域。
——在型別1的鏈路資料包中,OSPF路由器通過對資料包中某些特定資料位的設定,告訴其餘的路由器自身是一個區域邊界路由器或是一個AS邊界路由器。並且,型別1的鏈路狀態資料包在描述其所聯接的鏈路時,會根據各鏈路所聯接的網路型別對各鏈路打上鍊路標識,Link ID。表一列出了常見的鏈路型別及鏈路標識。
鏈路型別 具體描述 鏈路標識
1 用於描述點對點的網路 相鄰路由器的路由器標識
2 用於描述至一個廣播性網路的鏈路 DR的埠地址
3 用於描述至非穿透網路,即stub網路的鏈路 stub網路的網路號碼
4 用於描述虛擬鏈路 相鄰路由器的路由器標識
——型別2:又被稱為網路鏈路資訊資料包(Network Link)。網路鏈路資訊資料包是由指定路由器產生的,在一個廣播性的、多點接入的網路,例如乙太網、令牌環網及FDDI網路環境中,這種鏈路狀態資料包用來描述該網段上所聯接的所有路由器的狀態資訊。
——指定路由器DR只有在與至少一個路由器建立相鄰關係後才會產生網路鏈路資訊資料包,在該資料包中含有對所有已經與DR建立相鄰關係的路由器的描述,包括DR路由器本身。型別2的鏈路資訊只會在包含DR所處的廣播性網路的區域中廣播,不會廣播至其餘的OSPF路由區域。
——型別3和型別4:型別3和型別4的鏈路狀態廣播在OSPF路由協議中又稱為總結鏈路資訊資料包(Summary Link),該鏈路狀態廣播是由區域邊界路由器或AS邊界路由器產生的。Summary Link描述的是到某一個區域外部的路由資訊,這一個目的地地址必須是同一個AS中。Summary Link也只會在某一個特定的區域內廣播。型別3與型別4兩種總結性鏈路資訊的區別在於,型別3是由區域邊界路由器產生的,用於描述到同一個AS中不同區域之間的鏈路狀態;而型別4是由AS邊界路由器產生的,用於描述不同AS的鏈路狀態資訊。
——值得一提的是,只有型別3的Summary Link才能廣播進一個殘域,因為在一個殘域中不允許存在AS邊界路由器。殘域的區域邊界路由器產生一條預設的Summary Link對域內廣播,從而在其餘路由器上產生一條預設路由資訊。採用Summary Link可以減小殘域中路由器的鏈路狀態資料庫的大小,進而減少對路由器資源的利用,提高路由器的運算速度。
——型別5:型別5的鏈路狀態廣播稱為AS外部鏈路狀態資訊資料包。型別5的鏈路資料包是由AS邊界路由器產生的,用於描述到AS外的目的地的路由資訊,該資料包會在AS中除殘域以外的所有區域中廣播。一般來說,這種鏈路狀態資訊描述的是到AS外部某一特定網路的路由資訊,在這種情況下,型別5的鏈路狀枋資料包的鏈路標識採用的是目的地網路的IP地址;在某些情況下,AS邊界路由器可以對AS內部廣播預設路由資訊,在這時,型別5的鏈路廣播資料包的鏈路標識採用的是預設網路號碼0.0.0.0。
7.OSPF協議工作過程
——OSPF路由協議針對每一個區域分別執行一套獨立的計演算法則,對於ABR來說,由於一個區域邊界路由器同時與幾個區域相聯,因此一個區域邊界路由器上會同時執行幾套OSPF計算方法,每一個方法針對一個OSPF區域。下面對OSPF協議運算的全過程作一概括性的描述。
7.1 區域內部路由
——當一個OSPF路由器初始化時,首先初始化路由器自身的協議資料庫,然後等待低層次協議(資料鏈路層)提示埠是否處於工作狀態。
——如果低層協議得知一個埠處於工作狀態時,OSPF會通過其Hello協議資料包與其餘的OSPF路由器建立互動關係。一個OSPF路由器向其相鄰路由器傳送Hello資料包,如果接收到某一路由器返回的Hello資料包,則在這兩個OSPF路由器之間建立起OSPF互動關係,這個過程在OSPF中被稱為adjacency。在廣播性網路或是在點對點的網路環境中,OSPF協議通過Hello資料包自動地發現其相鄰路由器,在這時,OSPF路由器將Hello資料包傳送至一特殊的多點廣播地址,該多點廣播地址為ALLSPFRouters。在一些非廣播性的網路環境中,我們需要經過某些設定來發現OSPF相鄰路由器。在多接入的環境中,例如乙太網的環境,Hello協議資料包還可以用於選擇該網路中的指定路由器DR。
——一個OSPF路由器會與其新發現的相鄰路由器建立OSPF的adjacency,並且在一對OSPF路由器之間作鏈路狀態資料庫的同步。在多接入的網路環增中,非DR的OSPF路由器只會與指定路由器DR建立adjacency,並且作資料庫的同步。OSPF協議資料包的接收及傳送正是在一對OSPF的adjacency間進行的。
