《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 動態(tài)路由協(xié)議OSPF原理和特性
動態(tài)路由協(xié)議OSPF原理和特性
摘要: 幾年來,隨著計算機網(wǎng)絡(luò)應(yīng)用蓬勃發(fā)展,,新的網(wǎng)絡(luò)產(chǎn)品和網(wǎng)絡(luò)技術(shù)得到了進一步的發(fā)展,,這些又使計算機網(wǎng)絡(luò)規(guī)模的擴展成為可能。OSPF(Open Shortest Path First)是一種廣泛使用的路由協(xié)議,,采用OSPF協(xié)議的自治系統(tǒng),,經(jīng)過合理的規(guī)劃可以有效地擴展計算機網(wǎng)絡(luò)的規(guī)模。 本文介紹了OSPF的原理和特性,。
Abstract:
Key words :

動態(tài)路由協(xié)議簡介

路由和路由協(xié)議

顧名思義,,動態(tài)路由協(xié)議是一些動態(tài)生成(或?qū)W習到)路由信息的協(xié)議。在計算機網(wǎng)絡(luò)互聯(lián)技術(shù)領(lǐng)域,,我們可以把路由定義如下,,路由是指導IP報文發(fā)送的一些路徑信息。動態(tài)路由協(xié)議是網(wǎng)絡(luò)設(shè)備如路由器" title="路由器">路由器(Router)學習網(wǎng)絡(luò)中路由信息的方法之一,,這些協(xié)議使路由器能動態(tài)地隨著網(wǎng)絡(luò)拓撲中產(chǎn)生(如某些路徑的失效或新路由的產(chǎn)生等)的變化,,更新其保存的路由表,使網(wǎng)絡(luò)中的路由器在較短的時間內(nèi),,無需網(wǎng)絡(luò)管理員介入自動地維持一致的路由信息,,使整個網(wǎng)絡(luò)達到路由收斂狀態(tài),從而保持網(wǎng)絡(luò)的快速收斂和高可用性,。

路由器學習路由信息,、生成并維護路由表的方法包括直連路由(Direct)、靜態(tài)路由(Static)和動態(tài)路由(Dynamic),。直連路由是由鏈路層協(xié)議發(fā)現(xiàn)的,,一般指去往路由器的接口地址所在網(wǎng)段的路徑,該路徑信息不需要網(wǎng)絡(luò)管理員維護,,也不需要路由器通過某種算法進行計算獲得,,只要該接口處于活動狀態(tài)(Active),路由器就會把通向該網(wǎng)段的路由信息填寫到路由表中去,,直連路由無法使路由器獲取與其不直接相連的路由信息,。靜態(tài)路由是由網(wǎng)絡(luò)規(guī)劃者根據(jù)網(wǎng)絡(luò)拓撲,,使用命令在路由器上配置的路由信息,這些靜態(tài)路由信息指導報文發(fā)送,,靜態(tài)路由方式也不需要路由器進行計算,,但是它完全依賴于網(wǎng)絡(luò)規(guī)劃者,當網(wǎng)絡(luò)規(guī)模較大或網(wǎng)絡(luò)拓撲經(jīng)常發(fā)生改變時,,網(wǎng)絡(luò)管理員需要做的工作將會非常復(fù)雜并且容易產(chǎn)生錯誤,。而動態(tài)路由的方式使路由器能夠按照特定的算法自動計算新的路由信息,適應(yīng)網(wǎng)絡(luò)拓撲結(jié)構(gòu)的變化,。

動態(tài)路由協(xié)議的分類

按照區(qū)域(指自治系統(tǒng)),,動態(tài)路由協(xié)議可分為內(nèi)部網(wǎng)關(guān)協(xié)議IGP(Interior Gateway Protocol)和外部網(wǎng)關(guān)協(xié)議EGP(Exterior Gateway Protocol),按照所執(zhí)行的算法,,動態(tài)路由協(xié)議可分為距離向量路由協(xié)議(Distance Vector),、鏈路狀態(tài)路由協(xié)議(Link State),以及思科公司開發(fā)的混合型路由協(xié)議,,如圖1所示,。

本文著重討論自治系統(tǒng)內(nèi)部的鏈路狀態(tài)協(xié)議OSPF的原理,并結(jié)合距離向量協(xié)議作一些簡單的比較,。

OSPF協(xié)議的特點

OSPF全稱為開放最短路徑優(yōu)先。“開放”表明它是一個公開的協(xié)議,,由標準協(xié)議組織制定,,各廠商都可以得到協(xié)議的細節(jié)。“最短路徑優(yōu)先”是該協(xié)議在進行路由計算時執(zhí)行的算法,。OSPF是目前內(nèi)部網(wǎng)關(guān)協(xié)議中使用最為廣泛,、性能最優(yōu)的一個協(xié)議,它具有以下特點:

◆ 可適應(yīng)大規(guī)模的網(wǎng)絡(luò),;

◆ 路由變化收斂速度快,;

◆ 無路由自環(huán);

◆ 支持變長子網(wǎng)掩碼(VLSM),;

◆ 支持等值路由,;

◆ 支持區(qū)域劃分;

◆ 提供路由分級管理,;

◆ 支持驗證,;

◆ 支持以組播地址發(fā)送協(xié)議報文。

采用OSPF協(xié)議的自治系統(tǒng),,經(jīng)過合理的規(guī)劃可支持超過1000臺路由器,,這一性能是距離向量協(xié)議如RIP等無法比擬的。距離向量路由協(xié)議采用周期性地發(fā)送整張路由表來使網(wǎng)絡(luò)中路由器的路由信息保持一致,,這個機制浪費了網(wǎng)絡(luò)帶寬并引發(fā)了一系列的問題,,下面對此將作簡單的介紹,。

路由變化收斂速度是衡量一個路由協(xié)議好壞的一個關(guān)鍵因素。在網(wǎng)絡(luò)拓撲發(fā)生變化時,,網(wǎng)絡(luò)中的路由器能否在很短的時間內(nèi)相互通告所產(chǎn)生的變化并進行路由的重新計算,,是網(wǎng)絡(luò)可用性的一個重要的表現(xiàn)方面。

OSPF采用一些技術(shù)手段(如SPF算法,、鄰接關(guān)系等)避免了路由自環(huán)的產(chǎn)生,。在網(wǎng)絡(luò)中,路由自環(huán)的產(chǎn)生將導致網(wǎng)絡(luò)帶寬資源的極大耗費,,甚至使網(wǎng)絡(luò)不可用,。OSPF協(xié)議從根本(算法本身)上避免了自環(huán)的產(chǎn)生。采用距離向量協(xié)議的RIP等協(xié)議,,路由自環(huán)是不可避免的,。為了完善這些協(xié)議,只能采取若干措施,,在自環(huán)發(fā)生前,,降低其發(fā)生的概率,在自環(huán)發(fā)生后,,減小其影響范圍和時間,。

在IP(IPV4)地址日益匱乏的今天,能否支持變長子網(wǎng)掩碼(VLSM)來節(jié)省IP地址資源,,對一個路由協(xié)議來說是非常重要的,,OSPF能夠滿足這一要求。

在采用OSPF協(xié)議的網(wǎng)絡(luò)中,,如果通過OSPF計算出到同一目的地有兩條以上代價(Metric)相等的路由,,該協(xié)議可以將這些等值路由同時添加到路由表中。這樣,,在進行轉(zhuǎn)發(fā)時可以實現(xiàn)負載分擔或負載均衡,。

在支持區(qū)域劃分和路由分級管理上,OSPF協(xié)議能夠適合在大規(guī)模的網(wǎng)絡(luò)中使用,。

在協(xié)議本身的安全性上,,OSPF使用驗證,在鄰接路由器間進行路由信息通告時可以指定密碼,,從而確定鄰接路由器的合法性,。

與廣播方式相比,用組播地址來發(fā)送協(xié)議報文可以節(jié)省網(wǎng)絡(luò)帶寬資源,。

從衡量路由協(xié)議性能的角度,,我們可以看出,OSPF協(xié)議確實是一個比較先進的動態(tài)路由協(xié)議,,這也是它得到廣泛采用的主要原因,。

OSPF協(xié)議的工作原理

網(wǎng)絡(luò)拓撲結(jié)構(gòu)

上文提到,,OSPF協(xié)議是一種鏈路狀態(tài)協(xié)議,那么OSPF是如何來描述鏈路連接狀況呢,?

抽象模型Model 1表示路由器的一個以太網(wǎng)接口不連接其他路由器,,只連接了一個以太網(wǎng)段。此時,,對于運行 OSPF的路由器R1,,只能識別本身,無法識別該網(wǎng)段上的設(shè)備(主機等),;抽象模型Model 2表示路由器R1通過點對點鏈路(如PPP,、HDLC等)連接一臺路由器R2;抽象模型Model 3表示路由器R1通過點對多點(如Frame Relay,、X.25等)鏈路連接多臺路由器R3,、R4等,此時路由器R5,、R6之間不進行互聯(lián),;抽象模型Model 4表示路由器R1通過點對多點(如Frame Relay、X.25等)鏈路連接多臺路由器R5,、R6等,,此時路由器R5、R6之間互聯(lián),。以上抽象模型著重于各類鏈路層協(xié)議的特點,,而不涉及具體的鏈路層協(xié)議細節(jié)。該模型基本表達了當前網(wǎng)絡(luò)鏈路的連接種類,。

在OSPF協(xié)議中,分別對以上四種鏈路狀態(tài)類型作了描述:

對于抽象模型Model 1(以太網(wǎng)鏈路),,使用Link ID(連接的網(wǎng)段),、Data(掩碼)、Type(類型)和Metric(代價)來描述,。此時的Link ID即為路由器R1接口所在網(wǎng)段,,Data為所用掩碼,Type為3(Stubnet),,Metric為代價值,。

對于抽象模型Model 2(點對點鏈路),先使用Link ID(連接的網(wǎng)段),、Data(掩碼),、Type(類型)和Metric(代價)來描述接口路由,以上各參數(shù)與Model 1相似,。接下來描述對端路由器R2,,四個參數(shù)名不變,,但其含義有所不同。此時Link ID為路由器R2的Router ID,,Data為路由器R2的接口地址,,Type為1(Router),Metric仍為代價值,。

對于抽象模型Model 3(點對多點鏈路,,不全連通),先使用Link ID(連接的網(wǎng)段),、Data(掩碼),、Type(類型)和Metric(代價)來描述接口路由,以上各參數(shù)與Model 1相似,。接下來分別描述對端路由器R3,、R4的方法,與在Model 2中描述R2類似,。

對于抽象模型Model 4(點對多點鏈路,,全連通),先使用Link ID(網(wǎng)段中DR的接口地址),、Data(本接口的地址),、Type(類型)和Metric(代價)來描述接口路由。此時Type值為2(Transnet),,然后是本網(wǎng)段中DR(指定路由器)描述的連接通告,。

路由器在通報其獲知的鏈路狀態(tài)(即上面所述的參數(shù))前,加上LSA頭(Link State Advertisement Head),,從而生成LSA(鏈路狀態(tài)廣播),。到此,路由器通過LSA完成周邊網(wǎng)絡(luò)的拓撲結(jié)構(gòu)描述,,并發(fā)送給網(wǎng)絡(luò)中的其他路由器,。

計算路由

路由器完成周邊網(wǎng)絡(luò)的拓撲結(jié)構(gòu)的描述(生成LSA)后,發(fā)送給網(wǎng)絡(luò)中的其他路由器,,每臺路由器生成鏈路狀態(tài)數(shù)據(jù)庫(LSDB),。路由器開始執(zhí)行SPF(最短路徑優(yōu)先)算法計算路由,路由器以自己為根節(jié)點,,把LSDB中的條目與LSA進行對比,,經(jīng)過若干次的遞歸和回溯,直至路由器把所有LSA中包含的網(wǎng)段都找到路徑(把該路由填入路由表中),,此時意味著所到達的該段鏈路的類型標識為3(Stubnet),。

確保LSA在路由器間傳送的可靠性

從上文可以知道,作為鏈路狀態(tài)協(xié)議的OSPF的工作機制,與RIP等距離向量的路由協(xié)議是不一樣的,。距離向量路由協(xié)議是通過周期性地發(fā)送整張路由表,,來使網(wǎng)絡(luò)中的路由器的路由信息保持一致。這種機制存在著上文提到的一些弊病,。而OSPF協(xié)議將包含路由信息的部分與只包含路由器間鄰接關(guān)系的部分分開,,它使用一種被稱作Hello的數(shù)據(jù)包來確認鄰接關(guān)系,這個數(shù)據(jù)包非常小,,它僅被用來發(fā)現(xiàn)和維持鄰接關(guān)系,。

在路由器R1初始化完成后,它將向路由器R2發(fā)送Hello數(shù)據(jù)包,。此時R1并不知道R2的存在,,因此在數(shù)據(jù)包中不包含R2的信息(參數(shù)seen=0)。而R2在接收到該數(shù)據(jù)包后,,將向R1發(fā)送Hello包,。此時,Hello包中將表明它已知道存在R1這個鄰居,。R1收到這個回應(yīng)包后就會知道鄰居R2的存在,,并且鄰居R2也知道了自己的存在(參數(shù)seen=R1)。此時在路由器R1和R2之間就建立了鄰接關(guān)系,,它們就可以把LSA發(fā)送給對方,。當然,在發(fā)送時OSPF考慮到要盡量減少占用的帶寬,,它采用了一些技巧,,我們將在下一節(jié)簡單介紹這些內(nèi)容。

眾所周知,,IP協(xié)議是一種不可靠的,、面向無連接的協(xié)議,它本身沒有確認和錯誤重傳機制,。那么,,在這種協(xié)議基礎(chǔ)之上,要做到數(shù)據(jù)包丟失或出錯后進行重傳,,上層協(xié)議必須本身具備這種可靠的機制。OSPF采取了與TCP類似的確認和超時重傳機制,。在機制中,,R1和R2將進行一種被稱作鏈路狀態(tài)數(shù)據(jù)庫描述(DD)的數(shù)據(jù)包的互傳。首先進行協(xié)商,,從而確定兩者之間的主從關(guān)系(根據(jù)路由器ID號,,ID號大的將作為Master)。鏈路狀態(tài)數(shù)據(jù)庫描述(DD)數(shù)據(jù)包中包含了一些參數(shù),序列號(seq),、報文號(I),、結(jié)尾標識(M)及主從標志(MS)。從屬路由器將使用主路由器發(fā)出的DD包中的序列號(seq),,作為自己的第一個DD包的序列號,。當主路由器收到從屬路由器的DD包時,就能確認鄰接路由器已收到自己的數(shù)據(jù)包(如果沒有收到或收到的DD包的序列號不是自己一個DD包的序列號,,主路由器將重傳上一個DD包),,主路由器將序列號加1(只有主路由器才有權(quán)改變序列號,而從屬路由器沒有),,并發(fā)送下一個DD包,,該過程的重復(fù)保證了在OSPF協(xié)議中數(shù)據(jù)包傳輸?shù)臏蚀_性,從而為OSPF協(xié)議成為一個準確的路由協(xié)議打下了基礎(chǔ),。

高效率地進行LSA的交換

 

在RIP等距離向量路由協(xié)議中,,路由信息的交互是通過周期性地傳送整張路由表的機制來完成的,該機制使距離向量路由協(xié)議無法高效地進行路由信息的交換,。在OSPF協(xié)議中,,為了提高傳輸效率,在進行鏈路狀態(tài)通告(LSA)數(shù)據(jù)包傳輸時,,使用包含LSA頭(Head)的鏈路狀態(tài)數(shù)據(jù)庫描述數(shù)據(jù)包進行傳輸,,因為每個LSA頭中不包含具體的鏈路狀態(tài)信息,它只含有各LSA的標識(該標識唯一代表一個LSA),,所以,,該報文非常小。鄰接路由器間使用這種字節(jié)數(shù)很小的數(shù)據(jù)包,,首先確認在相互之間哪些LSA是對方?jīng)]有的,,而哪些LSA在對方路由器中也存在,鄰接路由器間只會傳輸對方?jīng)]有的LSA,。對于自己沒有的LSA,,路由器會發(fā)送一個LS Request報文給鄰接路由器來請求對方發(fā)送該LSA,鄰接路由器在收到LS Request報文后,,回應(yīng)一個LS Update報文(包含該整條LSA信息),,在得到對方確認后(接收到對方發(fā)出的LS ACK報文),這兩臺路由器完成了本條LSA信息的同步,。

由此可見,,OSPF協(xié)議采用增量傳輸?shù)姆椒▉硎灌徑勇酚善鞅3忠恢碌逆溌窢顟B(tài)數(shù)據(jù)庫(LSDB)。

小結(jié)

綜上所述,,我們可以歸納出在OSPF協(xié)議中使用到的五種協(xié)議報文,,并簡單介紹了它們的作用,我們作個簡單的小結(jié):

◆ Hello報文,通過周期性地發(fā)送來發(fā)現(xiàn)和維護鄰接關(guān)系,;

◆ DD(鏈路狀態(tài)數(shù)據(jù)庫描述)報文,,描述本地路由器保存的LSDB(鏈路狀態(tài)數(shù)據(jù)庫);

◆ LSR(LS Request)報文,,向鄰居請求本地沒有的LSA,;

◆ LSU(LS Update)報文,向鄰居發(fā)送其請求或更新的LSA,;

◆ LSAck(LS ACK)報文,,收到鄰居發(fā)送的LSA后發(fā)送的確認報文。

OSPF協(xié)議采用的特殊機制

指定路由器和備份指定路由器

在OSPF協(xié)議中,,路由器通過發(fā)送Hello報文來確定鄰接關(guān)系,,每一臺路由器都會與其他路由器建立鄰接關(guān)系,這就要求路由器之間兩兩建立鄰接關(guān)系,,每臺路由器都必須與其他路由器建立鄰接關(guān)系,,以達到同步鏈路狀態(tài)數(shù)據(jù)庫的目的,在網(wǎng)絡(luò)中就會建立起n×(n-1)/2條鄰接關(guān)系(n為網(wǎng)絡(luò)中OSPF路由器的數(shù)量),,這樣,,在進行數(shù)據(jù)庫同步時需要占用一定的帶寬。

為了解決這個問題,,OSPF采用了一個特殊的機制:選舉一臺指定路由器(DR),,使網(wǎng)絡(luò)中的其他路由器都和它建立鄰接關(guān)系,而其他路由器彼此之間不用保持鄰接,。路由器間鏈路狀態(tài)數(shù)據(jù)庫的同步,,都通過與指定路由器交互信息完成。這樣,,在網(wǎng)絡(luò)中僅需建立n-1條鄰接關(guān)系,。備份指定路由器(BDR)是指定路由器在網(wǎng)絡(luò)中的備份路由器,它會在指定路由器關(guān)機或產(chǎn)生問題后自動接替它的工作,。這時,,網(wǎng)絡(luò)中的其他路由器就會和備份指定路由器交互信息來實現(xiàn)數(shù)據(jù)庫的同步。

要被選舉為指定路由器,,該路由器應(yīng)符合以下要求:

◆ 該路由器是本網(wǎng)段內(nèi)的OSPF路由器,;

◆ 該OSPF路由器在本網(wǎng)段內(nèi)的優(yōu)先級(Priority)>0;

◆ 該OSPF路由器的優(yōu)先級最大,,如果所有路由器的優(yōu)先級相等,,路由器號(Router ID)最大的路由器(每臺路由器的Router ID是唯一的)被選舉為指定路由器。

滿足以上條件的路由器被選舉為指定路由器,,而第二個滿足條件的路由器則當選為備份指定路由器。

指定路由器和備份指定路由器的選舉,是由路由器通過發(fā)送Hello數(shù)據(jù)報文來完成的,。

OSPF協(xié)議中的區(qū)域劃分

OSPF協(xié)議在大規(guī)模網(wǎng)絡(luò)的使用中,,鏈路狀態(tài)數(shù)據(jù)庫比較龐大,它占用了很大的存儲空間,。在執(zhí)行最小生成數(shù)算法時,,要耗費較長的時間和很大的CPU資源,網(wǎng)絡(luò)拓撲變化的概率也大大增加,。這些因素的存在,,不僅耗費了路由器大量的存儲空間,加重了路由器CPU的負擔,,而且,,整個網(wǎng)絡(luò)會因為拓撲結(jié)構(gòu)的經(jīng)常變化,長期處于“動蕩”的不可用的狀態(tài),。

OSPF協(xié)議之所以能夠支持大規(guī)模的網(wǎng)絡(luò),,進行區(qū)域劃分是一個重要的原因。

OSPF協(xié)議允許網(wǎng)絡(luò)方案設(shè)計人員根據(jù)需要把路由器放在不同的區(qū)域(Area)中,,兩個不同的區(qū)域通過區(qū)域邊界路由器(ABR)相連,。在區(qū)域內(nèi)部的路由信息同步,采取的方法與上文提到的方法相同,。在兩個不同區(qū)域之間的路由信息傳遞,,由區(qū)域邊界路由器(ABR)完成。它把相連兩個區(qū)域內(nèi)生成的路由,,以類型3的LSA向?qū)Ψ絽^(qū)域發(fā)送,。此時,一個區(qū)域內(nèi)的OSPF路由器只保留本區(qū)域內(nèi)的鏈路狀態(tài)信息,,沒有其他區(qū)域的鏈路狀態(tài)信息,。這樣,在兩個區(qū)域之間減小了鏈路狀態(tài)數(shù)據(jù)庫,,降低了生成數(shù)算法的計算量,。同時,當一個區(qū)域中的拓撲結(jié)構(gòu)發(fā)生變化時,,其他區(qū)域中的路由器不需要重新進行計算,。OSPF協(xié)議中的區(qū)域劃分機制,有效地解決了OSPF在大規(guī)模網(wǎng)絡(luò)中應(yīng)用時產(chǎn)生的問題,。

OSPF協(xié)議使用區(qū)域號(Area ID)來區(qū)分不同的區(qū)域,,其中,區(qū)域0為骨干區(qū)域(根區(qū)域),。因為在區(qū)域間不再進行鏈路狀態(tài)信息的交互(實際上,,在區(qū)域間傳遞路由信息采用了可能導致路由自環(huán)的遞歸算法),,OSPF協(xié)議依靠維護整個網(wǎng)絡(luò)鏈路狀態(tài)來實現(xiàn)無路由自環(huán)的能力,在區(qū)域間無法實現(xiàn),。所以,,路由自環(huán)可能會發(fā)生在OSPF的區(qū)域之間。解決這一問題的辦法是,,使所有其他的區(qū)域都連接在骨干區(qū)域(Area 0)周圍,,即所有非骨干區(qū)域都與骨干區(qū)域鄰接。對于一些無法與骨干區(qū)域鄰接的區(qū)域,,在它們與骨干區(qū)域之間建立虛連接,。

結(jié)束語

本文對OSPF動態(tài)路由協(xié)議" title="OSPF動態(tài)路由協(xié)議">OSPF動態(tài)路由協(xié)議的主要原理和特性作了簡單的介紹,沒有涉及到自治系統(tǒng)(AS)以外的路由及路由聚合,。

OSPF協(xié)議采用路由器間建立和維護鄰接關(guān)系,,維護鏈路狀態(tài)信息數(shù)據(jù)庫,采用最短生成樹算法,,避免了路由自環(huán),。同時,又采用了一些特殊的機制,,保證了它在大規(guī)模網(wǎng)絡(luò)中的可用性,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。