OSPF路由協議

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)來減少路由信息,減小路由表, 提高路由器的運算速度。
附圖2:OSPF典型結構
  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路由協議中的作用。
 5.1.當一個區域與area0沒有物理鏈路相連時
  前文已經提到,一個骨幹區域Area 0必須位於所有區域的中心,其餘所有區域必須與骨幹區域直接相連。 但是,也存在一個區域無法與骨幹區域建立物理鏈路的可能性,在這種情況下,我們可以採用虛擬鏈路。 虛擬鏈路使該區域與骨幹區域間建立一個邏輯聯接點,該虛擬鏈路必須建立在兩個區域邊界路由器之間, 並且其中一個區域邊界路由器必須屬於骨幹區域。
  在上圖所示的例子中,區域1與區域0並無物理相連鏈路,我們可以在路由器A及路由器B之間建立虛擬鏈路, 這樣,將區域2作爲一個穿透網絡(Transit-network),路由器B作爲接入點,區域1就與區域0建立了邏輯聯接。
 5.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 用於描述虛擬鏈路 相鄰路由器的路由器標識
表格1: 鏈路類型及鏈路標識
類型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間進行的。
OSPF路由器週期性地產生與其相聯的所有鏈路的狀態信息,有時這些信息也被稱爲鏈路狀態廣播LSA (Link State Advertisement)。當路由器相聯接的鏈路狀態發生改變時,路由器也會產生鏈路狀態廣播信息, 所有這些廣播數據是通過Flood的方式在某一個OSPF區域內進行的。Flooding算法是一個非常可靠的計算過程, 它保證在同一個OSPF區域內的所有路由器都具有一個相同的OSPF數據庫。根據這個數據庫, OSPF路由器會將自身作爲根,計算出一個最短路徑樹,然後,該路由器會根據最短路徑樹產生自己的OSPF路由表。
7.2 建立OSPF交互關係adjacency
OSPF路由協議通過建立交互關係來交換路由信息,但是並不是所有相鄰的路由器會建立OSPF交互關係。 下面將OSPF建立adjacency的過程簡要介紹一下。
OSPF協議是通過Hello協議數據包來建立及維護相鄰關係的,同時也用其來保證相鄰路由器之間的雙向通信。 OSPF路由器會週期性地發送Hello數據包,當這個路由器看到自身被列於其它路由器的Hello數據包裏時, 這兩個路由器之間會建立起雙向通信。在多接入的環境中,Hello數據包還用於發現指定路由器DR, 通過DR來控制與哪些路由器建立交互關係。
兩個OSPF路由器建立雙向通信這後的第二個步驟是進行數據庫的同步, 數據庫同步是所有鏈路狀態路由協議的最大的共性。在OSPF路由協議中, 數據庫同步關係僅僅在建立交互關係的路由器之間保持。
OSPF的數據庫同步是通過OSPF數據庫描述數據包(Database Description Packets)來進行的。 OSPF路由器週期性地產生數據庫描述數據包,該數據包是有序的,即附帶有序列號, 並將這些數據包對相鄰路由器廣播。相鄰路由器可以根據數據庫描述數據包的序列號與自身數據庫的數據作比較, 若發現接收到的數據比數據庫內的數據序列號大,則相鄰路由器會針對序列號較大的數據發出請求, 並用請求得到的數據來更新其鏈路狀態數據庫。
我們可以將OSPF相鄰路由器從發送Hello數據包, 建立數據庫同步至建立完全的OSPF交互關係的過程分成幾個不同的狀態,分別爲:
Down:這是OSPF建立交互關係的初始化狀態, 表示在一定時間之內沒有接收到從某一相鄰路由器發送來的信息。在非廣播性的網絡環境內, OSPF路由器還可能對處於Down狀態的路由器發送Hello數據包。
Attempt:該狀態僅在NBMA環境,例如幀中繼、X.25或ATM環境中有效, 表示在一定時間內沒有接收到某一相鄰路由器的信息, 但是OSPF路由器仍必須通過以一個較低的頻率向該相鄰路由器發送Hello數據包來保持聯繫。
Init:在該狀態時,OSPF路由器已經接收到相鄰路由器發送來的Hello數據包, 但自身的IP地址並沒有出現在該Hello數據包內,也就是說,雙方的雙向通信還沒有建立起來。
2-Way:這個狀態可以說是建立交互方式真正的開始步驟。在這個狀態, 路由器看到自身已經處於相鄰路由器的Hello數據包內,雙向通信已經建立。 指定路由器及備份指定路由器的選擇正是在這個狀態完成的。在這個狀態, OSPF路由器還可以根據其中的一個路由器是否指定路由器或是根據鏈路是否點對點 或虛擬鏈路來決定是否建立交互關係。
Exstart:這個狀態是建立交互狀態的第一個步驟。在這個狀態, 路由器要決定用於數據交換的初始的數據庫描述數據包的序列號, 以保證路由器得到的永遠是最新的鏈路狀態信息。同時,在這個狀態路由器還必須決定路由器之間的主備關係, 處於主控地位的路由器會向處於備份地位的路由器請求鏈路狀態信息。
Exchange:在這個狀態,路由器向相鄰的OSPF路由器發送數據庫描述數據包來交換鏈路狀態信息, 每一個數據包都有一個數據包序列號。在這個狀態, 路由器還有可能向相鄰路由器發送鏈路狀態請求數據包來請求其相應數據。從這個狀態開始, 我們說OSPF處於Flood狀態。
Loading:在loading狀態,OSPF路由器會就其發現的相鄰路由器的新的鏈路狀態數據及自身的 已經過期的數據向相鄰路由器提出請求,並等待相鄰路由器的回答。
Full:這是兩個OSPF路由器建立交互關係的最後一個狀態,在這時,建立起交互關係的路由器之間 已經完成了數據庫同步的工作,它們的鏈路狀態數據庫已經一致。
7.3 域間路由
前面一節描述了OSPF路由協議的單個區域中的計算過程。在單個OSPF區域中, OSPF路由協議不會產生更多的路由信息。爲了與其餘區域中的OSPF路由器通訊, 該區域的邊界路由器會產生一些其它的信息對域內廣播, 這些附加信息描繪了在同一個AS中的其它區域的路由信息。具體路由信息交換過程如下:
在OSPF的定義中,所有的區域都必須與區域0相聯, 因此每一個區域都必須有一個區域邊界路由器與區域0相聯, 這一個區域邊界路由器會將其相聯接的區域內部結構數據通過Summary Link廣播至區域0, 也就是廣播至所有其它區域的邊界路由器。在這時, 與區域0相聯的邊界路由器上有區域0及其它所有區域的鏈路狀態信息,通過這些信息, 這些邊界路由器能夠計算出至相應目的地的路由,並將這些路由信息廣播至與其相聯接的區域, 以便讓該區域內部的路由器找到與區域外部通信的最佳路由。
7.4 AS外部路由
一個自治域AS的邊界路由器會將AS外部路由信息廣播至整個AS中除了殘域的所有區域。 爲了使這些AS外部路由信息生效,AS內部的所有的路由器(除殘域內的路由器) 都必須知道AS邊界路由器的位置,該路由信息是由非殘域的區域邊界路由器對域內廣播的, 其鏈路廣播數據包的類型爲類型4。
8.OSPF路由協議驗證
在OSPF路由協議中,所有的路由信息交換都必須經過驗證。在前文所描述的OSPF協議數據包結構中, 包含有一個驗證域及一個64位長度的驗證數據域,用於特定的驗證方式的計算。
OSPF數據交換的驗證是基於每一個區域來定義的,也就是說, 當在某一個區域的一個路由器上定義了一種驗證方式時, 必須在該區域的所有路由器上定義相同的協議驗證方式。 另外一些與驗證相關的參數也可以基於每一個端口來定義,例如當採用單一口令驗證時, 我們可以對某一區域內部的每一個網絡設置不同的口令字。 --在OSPF路由協議的定義中, 初始定義了兩種協議驗證方式,方式0及方式1,分別介紹如下:
驗證方式0:採用驗證方式0表示OSPF對所交換的路由信息不驗證。 在OSPF的數據包頭內64位的驗證數據位可以包含任何數據, OSPF接收到路由數據後對數據包頭內的驗證數據位不作任何處理。
驗證方式1:驗證方式1爲簡單口令字驗證。這種驗證方式是基於一個區域內的每一個網絡來定義的, 每一個發送至該網絡的數據包的包頭內都必須具有相同的64位長度的驗證數據位, 也就是說驗證方式1的口令字長度爲64bits,或者爲8個字符。
9.小結
  前文介紹了OSPF路由協議的概念及該協議的工作原理。OSPF路由協議定義於RFC1247及RFC1583, 該協議提供了一個不同的網絡通過同一種TCP/IP協議交換網絡信息的途徑。作爲一種鏈路狀態的路由協議, OSPF具備許多優點:快速收斂,支持變長網絡屏蔽碼,支持CIDR以及地址summary,具有層次化的網絡結構, 支持路由信息驗證等。所有這些特點保證了OSPF路由協議能夠被應用到大型的、複雜的網絡環境中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章