動(dòng)態(tài)路由協(xié)議OSPF原理和特性
動(dòng)態(tài)路由協(xié)議簡(jiǎn)介
本文引用地址:http://dyxdggzs.com/article/201706/357780.htm路由和路由協(xié)議
顧名思義,動(dòng)態(tài)路由協(xié)議是一些動(dòng)態(tài)生成(或學(xué)習到)路由信息的協(xié)議。在計算機網(wǎng)絡(luò )互聯(lián)技術(shù)領(lǐng)域,我們可以把路由定義如下,路由是指導IP報文發(fā)送的一些路徑信息。動(dòng)態(tài)路由協(xié)議是網(wǎng)絡(luò )設備如路由器(Router)學(xué)習網(wǎng)絡(luò )中路由信息的方法之一,這些協(xié)議使路由器能動(dòng)態(tài)地隨著(zhù)網(wǎng)絡(luò )拓撲中產(chǎn)生(如某些路徑的失效或新路由的產(chǎn)生等)的變化,更新其保存的路由表,使網(wǎng)絡(luò )中的路由器在較短的時(shí)間內,無(wú)需網(wǎng)絡(luò )管理員介入自動(dòng)地維持一致的路由信息,使整個(gè)網(wǎng)絡(luò )達到路由收斂狀態(tài),從而保持網(wǎng)絡(luò )的快速收斂和高可用性。
路由器學(xué)習路由信息、生成并維護路由表的方法包括直連路由(Direct)、靜態(tài)路由(Static)和動(dòng)態(tài)路由(Dynamic)。直連路由是由鏈路層協(xié)議發(fā)現的,一般指去往路由器的接口地址所在網(wǎng)段的路徑,該路徑信息不需要網(wǎng)絡(luò )管理員維護,也不需要路由器通過(guò)某種算法進(jìn)行計算獲得,只要該接口處于活動(dòng)狀態(tài)(Active),路由器就會(huì )把通向該網(wǎng)段的路由信息填寫(xiě)到路由表中去,直連路由無(wú)法使路由器獲取與其不直接相連的路由信息。靜態(tài)路由是由網(wǎng)絡(luò )規劃者根據網(wǎng)絡(luò )拓撲,使用命令在路由器上配置的路由信息,這些靜態(tài)路由信息指導報文發(fā)送,靜態(tài)路由方式也不需要路由器進(jìn)行計算,但是它完全依賴(lài)于網(wǎng)絡(luò )規劃者,當網(wǎng)絡(luò )規模較大或網(wǎng)絡(luò )拓撲經(jīng)常發(fā)生改變時(shí),網(wǎng)絡(luò )管理員需要做的工作將會(huì )非常復雜并且容易產(chǎn)生錯誤。而動(dòng)態(tài)路由的方式使路由器能夠按照特定的算法自動(dòng)計算新的路由信息,適應網(wǎng)絡(luò )拓撲結構的變化。
動(dòng)態(tài)路由協(xié)議的分類(lèi)
按照區域(指自治系統),動(dòng)態(tài)路由協(xié)議可分為內部網(wǎng)關(guān)協(xié)議IGP(Interior Gateway Protocol)和外部網(wǎng)關(guān)協(xié)議EGP(Exterior Gateway Protocol),按照所執行的算法,動(dòng)態(tài)路由協(xié)議可分為距離向量路由協(xié)議(Distance Vector)、鏈路狀態(tài)路由協(xié)議(Link State),以及思科公司開(kāi)發(fā)的混合型路由協(xié)議,如圖1所示。
本文著(zhù)重討論自治系統內部的鏈路狀態(tài)協(xié)議OSPF的原理,并結合距離向量協(xié)議作一些簡(jiǎn)單的比較。
OSPF協(xié)議的特點(diǎn)
OSPF全稱(chēng)為開(kāi)放最短路徑優(yōu)先。“開(kāi)放”表明它是一個(gè)公開(kāi)的協(xié)議,由標準協(xié)議組織制定,各廠(chǎng)商都可以得到協(xié)議的細節。“最短路徑優(yōu)先”是該協(xié)議在進(jìn)行路由計算時(shí)執行的算法。OSPF是目前內部網(wǎng)關(guān)協(xié)議中使用最為廣泛、性能最優(yōu)的一個(gè)協(xié)議,它具有以下特點(diǎn):
◆ 可適應大規模的網(wǎng)絡(luò );
◆ 路由變化收斂速度快;
◆ 無(wú)路由自環(huán);
◆ 支持變長(cháng)子網(wǎng)掩碼(VLSM);
◆ 支持等值路由;
◆ 支持區域劃分;
◆ 提供路由分級管理;
◆ 支持驗證;
◆ 支持以組播地址發(fā)送協(xié)議報文。
采用OSPF協(xié)議的自治系統,經(jīng)過(guò)合理的規劃可支持超過(guò)1000臺路由器,這一性能是距離向量協(xié)議如RIP等無(wú)法比擬的。距離向量路由協(xié)議采用周期性地發(fā)送整張路由表來(lái)使網(wǎng)絡(luò )中路由器的路由信息保持一致,這個(gè)機制浪費了網(wǎng)絡(luò )帶寬并引發(fā)了一系列的問(wèn)題,下面對此將作簡(jiǎn)單的介紹。
路由變化收斂速度是衡量一個(gè)路由協(xié)議好壞的一個(gè)關(guān)鍵因素。在網(wǎng)絡(luò )拓撲發(fā)生變化時(shí),網(wǎng)絡(luò )中的路由器能否在很短的時(shí)間內相互通告所產(chǎn)生的變化并進(jìn)行路由的重新計算,是網(wǎng)絡(luò )可用性的一個(gè)重要的表現方面。
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ā)生后,減小其影響范圍和時(shí)間。
在IP(IPV4)地址日益匱乏的今天,能否支持變長(cháng)子網(wǎng)掩碼(VLSM)來(lái)節省IP地址資源,對一個(gè)路由協(xié)議來(lái)說(shuō)是非常重要的,OSPF能夠滿(mǎn)足這一要求。
在采用OSPF協(xié)議的網(wǎng)絡(luò )中,如果通過(guò)OSPF計算出到同一目的地有兩條以上代價(jià)(Metric)相等的路由,該協(xié)議可以將這些等值路由同時(shí)添加到路由表中。這樣,在進(jìn)行轉發(fā)時(shí)可以實(shí)現負載分擔或負載均衡。
在支持區域劃分和路由分級管理上,OSPF協(xié)議能夠適合在大規模的網(wǎng)絡(luò )中使用。
在協(xié)議本身的安全性上,OSPF使用驗證,在鄰接路由器間進(jìn)行路由信息通告時(shí)可以指定密碼,從而確定鄰接路由器的合法性。
與廣播方式相比,用組播地址來(lái)發(fā)送協(xié)議報文可以節省網(wǎng)絡(luò )帶寬資源。
從衡量路由協(xié)議性能的角度,我們可以看出,OSPF協(xié)議確實(shí)是一個(gè)比較先進(jìn)的動(dòng)態(tài)路由協(xié)議,這也是它得到廣泛采用的主要原因。
OSPF協(xié)議的工作原理
網(wǎng)絡(luò )拓撲結構
上文提到,OSPF協(xié)議是一種鏈路狀態(tài)協(xié)議,那么OSPF是如何來(lái)描述鏈路連接狀況呢?
抽象模型Model 1表示路由器的一個(gè)以太網(wǎng)接口不連接其他路由器,只連接了一個(gè)以太網(wǎng)段。此時(shí),對于運行 OSPF的路由器R1,只能識別本身,無(wú)法識別該網(wǎng)段上的設備(主機等);抽象模型Model 2表示路由器R1通過(guò)點(diǎn)對點(diǎn)鏈路(如PPP、HDLC等)連接一臺路由器R2;抽象模型Model 3表示路由器R1通過(guò)點(diǎn)對多點(diǎn)(如Frame Relay、X.25等)鏈路連接多臺路由器R3、R4等,此時(shí)路由器R5、R6之間不進(jìn)行互聯(lián);抽象模型Model 4表示路由器R1通過(guò)點(diǎn)對多點(diǎn)(如Frame Relay、X.25等)鏈路連接多臺路由器R5、R6等,此時(shí)路由器R5、R6之間互聯(lián)。以上抽象模型著(zhù)重于各類(lèi)鏈路層協(xié)議的特點(diǎn),而不涉及具體的鏈路層協(xié)議細節。該模型基本表達了當前網(wǎng)絡(luò )鏈路的連接種類(lèi)。
在OSPF協(xié)議中,分別對以上四種鏈路狀態(tài)類(lèi)型作了描述:
對于抽象模型Model 1(以太網(wǎng)鏈路),使用Link ID(連接的網(wǎng)段)、Data(掩碼)、Type(類(lèi)型)和Metric(代價(jià))來(lái)描述。此時(shí)的Link ID即為路由器R1接口所在網(wǎng)段,Data為所用掩碼,Type為3(Stubnet),Metric為代價(jià)值。
對于抽象模型Model 2(點(diǎn)對點(diǎn)鏈路),先使用Link ID(連接的網(wǎng)段)、Data(掩碼)、Type(類(lèi)型)和Metric(代價(jià))來(lái)描述接口路由,以上各參數與Model 1相似。接下來(lái)描述對端路由器R2,四個(gè)參數名不變,但其含義有所不同。此時(shí)Link ID為路由器R2的Router ID,Data為路由器R2的接口地址,Type為1(Router),Metric仍為代價(jià)值。
對于抽象模型Model 3(點(diǎn)對多點(diǎn)鏈路,不全連通),先使用Link ID(連接的網(wǎng)段)、Data(掩碼)、Type(類(lèi)型)和Metric(代價(jià))來(lái)描述接口路由,以上各參數與Model 1相似。接下來(lái)分別描述對端路由器R3、R4的方法,與在Model 2中描述R2類(lèi)似。
對于抽象模型Model 4(點(diǎn)對多點(diǎn)鏈路,全連通),先使用Link ID(網(wǎng)段中DR的接口地址)、Data(本接口的地址)、Type(類(lèi)型)和Metric(代價(jià))來(lái)描述接口路由。此時(shí)Type值為2(Transnet),然后是本網(wǎng)段中DR(指定路由器)描述的連接通告。
路由器在通報其獲知的鏈路狀態(tài)(即上面所述的參數)前,加上LSA頭(Link State Advertisement Head),從而生成LSA(鏈路狀態(tài)廣播)。到此,路由器通過(guò)LSA完成周邊網(wǎng)絡(luò )的拓撲結構描述,并發(fā)送給網(wǎng)絡(luò )中的其他路由器。
計算路由
路由器完成周邊網(wǎng)絡(luò )的拓撲結構的描述(生成LSA)后,發(fā)送給網(wǎng)絡(luò )中的其他路由器,每臺路由器生成鏈路狀態(tài)數據庫(LSDB)。路由器開(kāi)始執行SPF(最短路徑優(yōu)先)算法計算路由,路由器以自己為根節點(diǎn),把LSDB中的條目與LSA進(jìn)行對比,經(jīng)過(guò)若干次的遞歸和回溯,直至路由器把所有LSA中包含的網(wǎng)段都找到路徑(把該路由填入路由表中),此時(shí)意味著(zhù)所到達的該段鏈路的類(lèi)型標識為3(Stubnet)。
確保LSA在路由器間傳送的可靠性
從上文可以知道,作為鏈路狀態(tài)協(xié)議的OSPF的工作機制,與RIP等距離向量的路由協(xié)議是不一樣的。距離向量路由協(xié)議是通過(guò)周期性地發(fā)送整張路由表,來(lái)使網(wǎng)絡(luò )中的路由器的路由信息保持一致。這種機制存在著(zhù)上文提到的一些弊病。而OSPF協(xié)議將包含路由信息的部分與只包含路由器間鄰接關(guān)系的部分分開(kāi),它使用一種被稱(chēng)作Hello的數據包來(lái)確認鄰接關(guān)系,這個(gè)數據包非常小,它僅被用來(lái)發(fā)現和維持鄰接關(guān)系。
在路由器R1初始化完成后,它將向路由器R2發(fā)送Hello數據包。此時(shí)R1并不知道R2的存在,因此在數據包中不包含R2的信息(參數seen=0)。而R2在接收到該數據包后,將向R1發(fā)送Hello包。此時(shí),Hello包中將表明它已知道存在R1這個(gè)鄰居。R1收到這個(gè)回應包后就會(huì )知道鄰居R2的存在,并且鄰居R2也知道了自己的存在(參數seen=R1)。此時(shí)在路由器R1和R2之間就建立了鄰接關(guān)系,它們就可以把LSA發(fā)送給對方。當然,在發(fā)送時(shí)OSPF考慮到要盡量減少占用的帶寬,它采用了一些技巧,我們將在下一節簡(jiǎn)單介紹這些內容。
眾所周知,IP協(xié)議是一種不可靠的、面向無(wú)連接的協(xié)議,它本身沒(méi)有確認和錯誤重傳機制。那么,在這種協(xié)議基礎之上,要做到數據包丟失或出錯后進(jìn)行重傳,上層協(xié)議必須本身具備這種可靠的機制。OSPF采取了與TCP類(lèi)似的確認和超時(shí)重傳機制。在機制中,R1和R2將進(jìn)行一種被稱(chēng)作鏈路狀態(tài)數據庫描述(DD)的數據包的互傳。首先進(jìn)行協(xié)商,從而確定兩者之間的主從關(guān)系(根據路由器ID號,ID號大的將作為Master)。鏈路狀態(tài)數據庫描述(DD)數據包中包含了一些參數,序列號(seq)、報文號(I)、結尾標識(M)及主從標志(MS)。從屬路由器將使用主路由器發(fā)出的DD包中的序列號(seq),作為自己的第一個(gè)DD包的序列號。當主路由器收到從屬路由器的DD包時(shí),就能確認鄰接路由器已收到自己的數據包(如果沒(méi)有收到或收到的DD包的序列號不是自己一個(gè)DD包的序列號,主路由器將重傳上一個(gè)DD包),主路由器將序列號加1(只有主路由器才有權改變序列號,而從屬路由器沒(méi)有),并發(fā)送下一個(gè)DD包,該過(guò)程的重復保證了在OSPF協(xié)議中數據包傳輸的準確性,從而為OSPF協(xié)議成為一個(gè)準確的路由協(xié)議打下了基礎。
高效率地進(jìn)行LSA的交換
由此可見(jiàn),OSPF協(xié)議采用增量傳輸的方法來(lái)使鄰接路由器保持一致的鏈路狀態(tài)數據庫(LSDB)。
小結
綜上所述,我們可以歸納出在OSPF協(xié)議中使用到的五種協(xié)議報文,并簡(jiǎn)單介紹了它們的作用,我們作個(gè)簡(jiǎn)單的小結:
◆ Hello報文,通過(guò)周期性地發(fā)送來(lái)發(fā)現和維護鄰接關(guān)系;
◆ DD(鏈路狀態(tài)數據庫描述)報文,描述本地路由器保存的LSDB(鏈路狀態(tài)數據庫);
◆ LSR(LS Request)報文,向鄰居請求本地沒(méi)有的LSA;
◆ LSU(LS Update)報文,向鄰居發(fā)送其請求或更新的LSA;
◆ LSAck(LS ACK)報文,收到鄰居發(fā)送的LSA后發(fā)送的確認報文。
OSPF協(xié)議采用的特殊機制
指定路由器和備份指定路由器
在OSPF協(xié)議中,路由器通過(guò)發(fā)送Hello報文來(lái)確定鄰接關(guān)系,每一臺路由器都會(huì )與其他路由器建立鄰接關(guān)系,這就要求路由器之間兩兩建立鄰接關(guān)系,每臺路由器都必須與其他路由器建立鄰接關(guān)系,以達到同步鏈路狀態(tài)數據庫的目的,在網(wǎng)絡(luò )中就會(huì )建立起n×(n-1)/2條鄰接關(guān)系(n為網(wǎng)絡(luò )中OSPF路由器的數量),這樣,在進(jìn)行數據庫同步時(shí)需要占用一定的帶寬。
為了解決這個(gè)問(wèn)題,OSPF采用了一個(gè)特殊的機制:選舉一臺指定路由器(DR),使網(wǎng)絡(luò )中的其他路由器都和它建立鄰接關(guān)系,而其他路由器彼此之間不用保持鄰接。路由器間鏈路狀態(tài)數據庫的同步,都通過(guò)與指定路由器交互信息完成。這樣,在網(wǎng)絡(luò )中僅需建立n-1條鄰接關(guān)系。備份指定路由器(BDR)是指定路由器在網(wǎng)絡(luò )中的備份路由器,它會(huì )在指定路由器關(guān)機或產(chǎn)生問(wèn)題后自動(dòng)接替它的工作。這時(shí),網(wǎng)絡(luò )中的其他路由器就會(huì )和備份指定路由器交互信息來(lái)實(shí)現數據庫的同步。
要被選舉為指定路由器,該路由器應符合以下要求:
◆ 該路由器是本網(wǎng)段內的OSPF路由器;
◆ 該OSPF路由器在本網(wǎng)段內的優(yōu)先級(Priority)>0;
◆ 該OSPF路由器的優(yōu)先級最大,如果所有路由器的優(yōu)先級相等,路由器號(Router ID)最大的路由器(每臺路由器的Router ID是唯一的)被選舉為指定路由器。
滿(mǎn)足以上條件的路由器被選舉為指定路由器,而第二個(gè)滿(mǎn)足條件的路由器則當選為備份指定路由器。
指定路由器和備份指定路由器的選舉,是由路由器通過(guò)發(fā)送Hello數據報文來(lái)完成的。
OSPF協(xié)議中的區域劃分
OSPF協(xié)議在大規模網(wǎng)絡(luò )的使用中,鏈路狀態(tài)數據庫比較龐大,它占用了很大的存儲空間。在執行最小生成數算法時(shí),要耗費較長(cháng)的時(shí)間和很大的CPU資源,網(wǎng)絡(luò )拓撲變化的概率也大大增加。這些因素的存在,不僅耗費了路由器大量的存儲空間,加重了路由器CPU的負擔,而且,整個(gè)網(wǎng)絡(luò )會(huì )因為拓撲結構的經(jīng)常變化,長(cháng)期處于“動(dòng)蕩”的不可用的狀態(tài)。
OSPF協(xié)議之所以能夠支持大規模的網(wǎng)絡(luò ),進(jìn)行區域劃分是一個(gè)重要的原因。
OSPF協(xié)議允許網(wǎng)絡(luò )方案設計人員根據需要把路由器放在不同的區域(Area)中,兩個(gè)不同的區域通過(guò)區域邊界路由器(ABR)相連。在區域內部的路由信息同步,采取的方法與上文提到的方法相同。在兩個(gè)不同區域之間的路由信息傳遞,由區域邊界路由器(ABR)完成。它把相連兩個(gè)區域內生成的路由,以類(lèi)型3的LSA向對方區域發(fā)送。此時(shí),一個(gè)區域內的OSPF路由器只保留本區域內的鏈路狀態(tài)信息,沒(méi)有其他區域的鏈路狀態(tài)信息。這樣,在兩個(gè)區域之間減小了鏈路狀態(tài)數據庫,降低了生成數算法的計算量。同時(shí),當一個(gè)區域中的拓撲結構發(fā)生變化時(shí),其他區域中的路由器不需要重新進(jìn)行計算。OSPF協(xié)議中的區域劃分機制,有效地解決了OSPF在大規模網(wǎng)絡(luò )中應用時(shí)產(chǎn)生的問(wèn)題。
OSPF協(xié)議使用區域號(Area ID)來(lái)區分不同的區域,其中,區域0為骨干區域(根區域)。因為在區域間不再進(jìn)行鏈路狀態(tài)信息的交互(實(shí)際上,在區域間傳遞路由信息采用了可能導致路由自環(huán)的遞歸算法),OSPF協(xié)議依靠維護整個(gè)網(wǎng)絡(luò )鏈路狀態(tài)來(lái)實(shí)現無(wú)路由自環(huán)的能力,在區域間無(wú)法實(shí)現。所以,路由自環(huán)可能會(huì )發(fā)生在OSPF的區域之間。解決這一問(wèn)題的辦法是,使所有其他的區域都連接在骨干區域(Area 0)周?chē)?,即所有非骨干區域都與骨干區域鄰接。對于一些無(wú)法與骨干區域鄰接的區域,在它們與骨干區域之間建立虛連接。
結束語(yǔ)
本文對OSPF動(dòng)態(tài)路由協(xié)議的主要原理和特性作了簡(jiǎn)單的介紹,沒(méi)有涉及到自治系統(AS)以外的路由及路由聚合。
OSPF協(xié)議采用路由器間建立和維護鄰接關(guān)系,維護鏈路狀態(tài)信息數據庫,采用最短生成樹(shù)算法,避免了路由自環(huán)。同時(shí),又采用了一些特殊的機制,保證了它在大規模網(wǎng)絡(luò )中的可用性。
評論