OSPF路由協議算法
OSPF的基本概念和工做過程數據庫
開放式最短路徑優先協議(OSFP)是基於開放標準的鏈路狀態路由選擇協議,它完成各路由選擇協議算法的兩大主要功能:路徑選擇和路徑交換。Internet工程任務協會(IETF)於1988年開發了OSPF,其最近版本是OSPF版本2,在RFC 2328中進行了描述。網絡
OSPF路由協議概述併發
OSPF是內部網關路由協議app
在共同管理域下的一組運行相同路由選擇協議的路由器的集合爲一個自治系統(Autonomous System,AS)。在互聯網中,一個自制系統是一個有權決定本系統使用哪一種路由協議的單位,它能夠是一個企業、一座城市或一個電信運營商。隨着網絡的發展,上述對AS的定義已經不是十分準確了,網絡的發展使得網絡之間常常出現網絡合並狀況,致使同一個自治系統中使用的路由協議也愈來愈多,因此自治系統的定義應該是在共同管理下的互聯網絡。分佈式
內部網關路由協議(IGP):用於在單一自治系統(Autonomous System,AS)內決策路由。內部網關路由協議包括RIP、OSPF等。ide
與內部網關路由協議相對應的叫作外部網關路由協議(EGP),外部網關路由協議用於在多個自治系統之間執行路由。BGP協議就是外部網關路由協議。oop
IGP是用來解決AS內部通訊的,而EGP是解決AS間通訊的。性能
OSPF是鏈路狀態路由協議學習
鏈路狀態路由協議經過與鄰居路由器創建鄰接關係,互相傳遞鏈路狀態信息,來了解整個網絡的拓撲結構。在鏈路狀態信息中,包括有哪些鏈路,這些鏈路與哪一個路由器相連,鏈接的路徑成本是多少等信息,所以,在鏈路狀態路由協議收斂後,一臺路由器能夠了解本區域完整的鏈路信息。
運行鏈路狀態路由協議的路由器就好像各自「繪製」本身所瞭解的網段信息,而後經過與鄰居路由器創建鄰接關係,互相「交流」鏈路信息,學習整個區域內鏈路信息,來「繪製」出整個區域內的鏈路圖。在一個區域內的全部路由器都保存着徹底相同的鏈路狀態數據庫。
名詞解釋:
鄰居路由器:位於同一條物理鏈路或物理網段上的路由器。
鏈路狀態數據庫:也稱爲拓撲數據庫,它包含全部路由器、路由器的鏈路以及這些鏈路的狀態,還包含全部網路以及到這些網絡的全部路徑。
鄰接關係:當兩臺運行OSPF協議的鄰居路由器的鏈路狀態數據庫達到一致(同步)時,它們就是徹底鄰接的。
OSPF的工做過程
運行RIP的路由器只須要保存一張路由器,而使用OSPF路由協議的路由器須要保存三張表。
鄰居表:列出每臺路由器已經創建鄰接關係的所有鄰居路由器。
鏈路狀態數據庫(LSDB):列出網絡中其餘路由器的信息,由此顯示了全網的網絡拓撲。
路由表:列出經過SPF算法計算出的到達每一個相連網絡的最佳路徑。
運行OSPF的路由器試圖與鄰居路由器創建鄰接關係,在鄰居之間互相同步鏈路狀態數據庫。使用最短路徑算法(OSPF依據的算法是Dijkstra算法),從鏈路狀態信息計算獲得一個以本身爲樹根的「最短路徑樹」。到最後,每一臺路由器都將從最短路徑樹中構建出本身的路由表。OSPF的路由器也仍然是依據路由表進行數據轉發的。
OSPF的基本概念
OSPF區域
OSPF是一種鏈路狀態型的路由協議,不會產生環路問題,所以不須要使用最大跳數等限制來防止環路的產生。
OSPF將自治系統分割成多個小的區域,OSPF的路由器只在區域內部學習完整的鏈路狀態信息,而沒必要了解整個自治系統內部全部的鏈路狀態。
區域0爲骨幹區域,它用來鏈接自治系統內部的全部其餘區域。用來鏈接骨幹區域和其餘區域的路由器叫作區域邊界路由器,它瞭解所鏈接的兩個區域的完整的鏈路狀態信息,並將鏈路狀態信息彙總後發給區域內的其餘路由器。這樣,減少了路由器保存的鏈路狀態數據庫的大小,能夠解決路由器內存容量有限的問題。
區域是經過一個32位的區域ID(Area ID)來標識的。
區域ID能夠表示成一個十進制的數字,也能夠表示成一個點分十進制的數字。在Cisco的路由器中這兩種表示方式均可以使用。
區域0(或者區域0.0.0.0)是爲骨幹區域保留的區域ID號。OSPF的骨幹區域(Backbone Area)是一個特殊的OSPF區域,它擔負着區域間路由信息傳播的重任。
Router ID
由於運行OSPF的路由器要了解每條鏈路是鏈接在哪一個路由器上的,所以,就須要有一個惟一的標識來標記OSPF網絡中的路由器,這個標識稱爲Router ID。
Router ID是在OSPF區域內惟一標識路由器的IP地址。Cisco路由器經過下面的方法獲得它們的Router ID。
首先,路由器選取它全部Loopback接口上數值最高的IP地址。
若是路由器沒有配置Loopback接口的IP地址,那麼路由器就在全部活動物理端口中選取一個數值最高的IP地址做爲路由器的Router ID。用做Router ID的路由器接口不必定非要運行OSPF協議。
使用Loopback接口做爲Router ID的主要好處是Loopback接口比任何其餘的物理端口都更穩定。一旦路由器啓動成功,這個迴環接口就會處於活動狀態,只有整個路由器失效時它纔會失效。
在OSPF協議中能夠經過router-id命令指定路由器的Router ID,因此網絡管理員能夠配置便於識別和記憶的Router ID值。
在實際工程中配置OSPF時都須要手工指定路由器的Router ID,這已經成爲了一種標準配置。
四類路由器:
(1)區域內路由器(DR):
該類路由器的全部接口都屬於同一個OSPF區域。
(2)骨幹路由器(BDR)
該類路由器至少一個接口屬於骨幹區域。
所以,全部的ABR和位於Area0的內部路由器都是骨幹路由器。
(3)區域邊界路由器ABR(Area Border Routers):
該類路由器能夠同時屬於兩個以上的區域,但其中一個必須是骨幹區域。
ABR用來鏈接骨幹區域和非骨幹區域,能夠是實際鏈接,也能夠是虛鏈接。
(4)自治系統邊界路由器ASBR(AS Boundary Routers)
與其餘AS交換路由信息的路由器稱爲ASBR。 只要一臺OSPF路由器引入了外部路由的信息,他就稱爲了ASBR,它有多是ABR,區域路由器,不必定位於AS邊界。
DR和BDR
DR和BDR的概念
運行OSPF的路由器經過與鄰居路由器創建鄰接關係,互相傳遞鏈路狀態信息。若是每兩個路由器之間都要創建鄰接關係,那麼,就會構成n(n-1)/2個鄰接關係。每臺路由器都要與其餘全部的鄰居路由器互相傳遞鏈路狀態信息。
那麼這種狀況就會顯得比較混亂,並且也會浪費許多沒必要要的網絡資源。
爲了不這些問題的發生,能夠在這個網段上選舉一個指定路由器(Designated Router,DR)。由DR同網絡中的其餘路由器創建鄰接關係,並負責將網段上的變化告知它們。
網絡上的每一臺路由器都和DR構成一個鄰接關係,那麼只須要創建n-1個鄰接關係就能夠了。
爲了實現冗餘,當DR失效時,須要有一個新的指定路由器來接替它,這個路由器就是備份指定路由器(Backup Designated Router,BDR)。網絡上全部的路由器將和DR、BDR同時造成鄰接關係,DB和BDR之間也將造成鄰接關係。若是DR失效了,BDR將成爲新的DR。
DR和BDR的選舉
能夠由OSPF自動選擇DR和BDR,也能夠手工選擇。
自動選擇DR和BDR
網段上Router ID最大的路由器將被選舉爲DR,第二大的將被選舉爲BDR。這樣的選舉結果可能不是最佳的,例如:若是網段中有Cisco7200和3800系列路由器,那麼3600路由器可能因爲Router ID較大而被選舉爲DR。
手工選舉DR和BDR。
要手工選擇DR和BDR,須要設置路由器的優先級。每臺路由器的接口都有一個路由器優先級(Router Priority),用一個八位的無符號整數來表示,大小範圍是0-255,數值越大,優先級越高。Cisco路由器上默認的優先級是1。接口優先級能夠經過命令ip ospf priority來更改。若是路由器的優先級被設置爲0,它將不參與DR和BDR的選舉。
優先級越高,贏得選舉的可能性越大。若是優先級相同,則須要比較Router ID。
DB和BDR的選舉過程
當一臺OSPF路由器啓動並發現它的鄰居路由器時,它將去檢查有效的DB和BDR路由器。
若是DR和BDR路由器存在的話,這臺路由器將接受已經存在的DR和BDR路由器。
若是BDR路由器不存在,將執行一個選舉過程,選出具備最高優先級的路由器做爲BDR路由器。若是存在多個路由器具備相同的優先級,那麼Router ID最大的路由器將被選中。
若是沒有有效的DR路由存在,那麼BDR路由器將被提高爲DR路由器,而後再執行一個選舉過程選舉BDR路由器。
這裏須要注意的是,路由器的優先級能夠影響一個選舉過程,可是它不能強制更換已經存在的DR或BDR路由器。也就是說,在已經選舉了DR和BDR路由器後,若是一臺具備更高優先級的路由器接入網絡,這臺新的路由器並不會立刻替換DR或BDR路由器中的任何一個。所以,在一個廣播多路訪問網絡上,最早初始化啓動的兩臺具備選舉資格的路由器將成爲DR和BDR路由器。
OSPF的組播地址
一旦DR和BDR路由器選舉成功,其餘路由器(成爲DRother)將只與DR與BDR路由器造成鄰接關係。組播地址224.0.0.5表明全部參與OSPF的路由器(AIISPFRouter),而組播地址224.0.0.6只有DR和BDR路由器去偵聽這個地址,但BDR只偵聽不響應。在廣播多路訪問網絡上,鏈路更新信息先發送到244.0.0.6,再由DR路由器使用組播地址244.0.0.5泛洪更新報文到其餘全部路由器。
OSPF的度量值
OSPF的用來度量路徑優劣的度量值稱爲Cost(開銷),是指從該接口發送出去的數據包的出站接口開銷。鏈路開銷使用16位的無符號的整數表示,大小範圍是1-65535。
Cisco公司使用的默認代價是108/BW,表示爲一個整數,在這裏BW是指在接口上配置的帶寬,而108是Cisco路由器使用的參考帶寬。
路由器接口的開銷值能夠經過命令ip ospf cost來改變,當在一個有多家廠商產品的網絡環境中配置Cisco的路由器時,這個命令變得十分重要。例如:有些廠商的路由器在其全部的接口上使用的默認開銷值是1。若是網絡中全部的路由器沒有使用同一種計算開銷的方式來指定OSPF的開銷,那麼OSPF協議將不能正確的進行路由選擇。
使用108做爲接口的參考帶寬在現代一些帶寬高於100Mb/s的網絡介質中會產生一個問題。108/110Mb/s=1,這就意味着更高帶寬的傳輸介質在OSPF協議中將會計算出一個小於1的數,這在OSPF協議中是不容許的。所以,從IOS 11.2版開始,Cisco能夠在OSPF進程模式下使用命令auto-costreference-bandwidth修正這個問題,這個命令容許管理者更改默認的參考帶寬。
接口類型開銷(108/BW)
Fast Ethernet1
Ethernet10
56K1785
OSPF鄰接關係的創建
OSPF的數據包類型
OSPF信息不使用TCP或UDP,它承載在IP數據包內,使用協議號89(十進制)。
OSPF路由協議依靠五種不一樣類型的包來標識它們的鄰居以及更新鏈路狀態信息。這五種類型的包使得OSPF具有了高級和複雜的通訊能力,以下表所示列出了OSPF經常使用的包類型。
OSPF的包類型描述
Hello包用於發現和維持鄰居關係,選舉DR和BDR
數據庫描述包(DBD)用於向鄰居發送摘要信息以同步鏈路狀態數據庫
鏈路狀態請求包(LSR)在路由器收到包含新信息的DBD後發送,用於請求更詳細的信息
鏈路狀態更新包(LSU)收到LSR後發送鏈路狀態通告(LSA),一個LSU數據包可能包含幾個LSA
鏈路狀態確認包(LSAck)確認已經收到LSU,每一個LSA須要被分別確認
OSPF 6 類 LSA 類型
1 類 LSA(Router Link):每臺路由都只產生一條 1 類 LSA,只在區域內傳遞;
2 類 LSA(Router Link):只在有 DR/BDR 選舉的多路訪問網絡中產生,點到點或幀中繼等沒 有 DR/BDR 選舉的網絡不產生 2 類;
3 類 LSA(Router Link):將區域內的 LSA 彙總和簡化,併發往另外一個區域,由 ABR 始發; 4 類 LSA(Router Link) :外部路由重分佈進來後,因爲 LSA 的 Router-id 仍是 ASBR 的,這 個時候就須要由 ABR 告知非 ASBR 區域的路由器一條 LSA,怎樣到達 ASBR 的 Router-id,由 ABR 始發;
5 類 LSA(Router Link):從外部路由重分佈進 OSPF,攜帶了 ASBR 的 Router-id,會在全部 ospf 區域中傳遞,任何路由器都不能更改它的 router-id,由 ASBR 始發;
7 類 LSA(Router Link):NSSA 區域容許有 ASBR 存在,在把外部路由重分佈進 NSSA 區域後,將產生 7 類 LSA,7 類只會在 NSSA 區域中傳遞,當要傳遞到其餘區域時,ABR 將把 7 類 LSA 轉換成 5 類 LSA
OSPF鄰接關係的創建
當兩臺或多臺路由器同時啓動運行OSPF路由協議時將開始創建鄰接關係的過程,此過程將經歷七種狀態:
失效(Down)狀態
這是OSPF創建交互關係的初始化狀態,路由器沒有與任何鄰居交換信息。
初始(Init)狀態
路由器的各個接口經過224.0.0.5發送Hello報文,這裏以R1發送Hello報文爲例。當鄰居路由器R2收到第一個Hello報文,這時就進入Init狀態。在該狀態時,路由器R2已經接收到Hello報文,但自身的ID並無出如今該Hello報文內。
雙向(2-Way)狀態
路由器R2向路由器R1發送一個Hello迴應報文,該Hello迴應報文含有路由器R1的ID。當路由器R1收到該Hello迴應報文,發現含有自身的ID,這是就進入2-Way狀態,雙向通訊已經創建。DR和BDR的選舉正是在這個狀態完成的。
準啓動(ExStart)狀態
在選舉出DR和BDR以後,路由器就被認爲是處於ExStart狀態。在該狀態中,DR和BDR與網路中其餘各路由器創建鄰接關係。在這個過程當中,兩個鄰接路由器之間創建起一個主/從(Master/Slave)關係,路由器ID大的做爲主路由器,用來發起通訊。
交換(Exchange)狀態
主/從路由器之間交換一個或多個數據庫描述包(DBD),路由器進入Exchange狀態。DBD包含的是鏈路狀態數據庫中的LSA條目的摘要信息,主/從路由器之間交換DBD時要確保雙方都接收到。
加載(Loading)狀態
若是收到的DBD有更新的LSA條目的摘要信息,路由器將向對方發送鏈路狀態請求包(LSR)請求更詳細的信息,對方路由器用鏈路狀態更新(LSU)迴應該LSR,此過程稱爲Loading狀態。鏈路狀態更新包(LSU)須要對方確認收到。
徹底鄰接(Full)狀態
當路由器之間完成了數據庫同步,它們的鏈路狀態數據庫已經徹底一致,此時就達到了Full狀態。
到此,路由器中的鏈路狀態數據庫已經徹底一致了,路由器能夠根據這個一致的鏈路狀態數據庫經過最短路徑優先算法(SPF)來計算到目的網絡的最佳路徑並造成路由表。
OSPF的網絡類型
根據路由器所鏈接的物理網絡不一樣,OSPF將網絡劃分爲如下四種類型:
點到點網絡(Point-to-Point)
點到點網絡鏈接單獨的一對路由器。在點到點網絡上的有效鄰居老是能夠造成鄰接關係,不須要DR和BDR。在這些網絡上的OSPF報文的目的地址也老是224.0.0.5。(s接口)
點到點網絡通常採用PPP協議、HDLC協議等。
廣播多路訪問網絡(BMA)
廣播多路訪問網絡,像以太網和光纖分佈式數字網(FDDI)等,它們能夠鏈接多於兩臺的設備。並且因爲它們是廣播型的,於是鏈接在這種網絡上的全部設備均可以接收到傳送的報文。在廣播型網絡上的OSPF路由器會選擇DR和BDR。OSPF報文采用組播方式發送。(單播)
非廣播多路訪問網絡(NBMA)
NBMA網絡,像X.25和幀中繼等,能夠鏈接兩臺以上的路由器,可是它們沒有廣播數據包的能力。在NBMA網絡上的OSPF路由器須要手工配置鄰居,選舉DR和BDR,而且全部的OSPF報文都是單播的。(組播)
點到多點網絡(Point-to-MultiPoint)
點到多點網絡是NBMA網絡的一個特殊配置,能夠被看做是一羣點到點鏈路的集合。在這些網絡上的OSPF路由器不須要選舉DR和BDR,OSPF報文時組播的。
名詞解釋
HDLC(High Level Data Link Control,高級數據鏈路控制):是經常使用的數據鏈路層協議之一。許多經常使用的數據鏈路層協議的封裝方式都是基於HDLC的封裝格式。HDLC是ISO組織制定的一個標準化規程,它適用於點到點和點到多點的數據鏈路。因爲各個廠家對DHLC標準的實現不盡相同,因此通常不一樣廠家設備之間互連不能採用HDLC協議進行封裝。Cisco路由器串口使用的默認協議時HDLC。
PPP(Point to Point Protocol,點對點協議):是應用最普遍的廣域網鏈接時使用的數據鏈路層協議。它支持多種網絡層協議,而且支持用戶認證。
OSPF的應用環境
使用OSPF的緣由
OSPF與RIP相比雖然有點很明顯,可是通常狀況下,並非全部的網絡都須要都須要使用OSPF,一些簡單的,路由器配置較低的環境,仍然須要使用靜態路由。當考慮如下幾個方面的因素時,通常須要使用OSPF來搭建:
1)網絡的規模
當網絡中的路由器在十臺以上或大中型規模的網絡。
2)網絡的拓撲結構
網絡的拓撲結構爲網狀,而且任意兩臺路由器之間都有互通的需求。
3)其餘特殊的需求
要求路由器變化時可以快速收斂,路由協議自身的網絡開銷儘可能下降。
4)路由器自身的要求
運行OSPF協議時對路由器CPU的處理能力及內存的大小都有必定的要求,性能很低的路由器不推薦使用OSPF協議。
OSPF的特色
OSPF主要具備如下幾個特色:
可適應大規模網絡
路由變化收斂速度快
無路由環路
支持可變長子網掩碼VLSM
支持區域劃分
支持以組播地址發送協議報文
OSPF與RIP的比較
從網絡結構看
RIP的拓撲簡單,適用於中小型網絡,沒有區域、邊界等概念。最大跳數爲15跳,路由是依靠下一跳的個數來描述,沒法體現帶寬與網絡延遲。
OSPF適用於較大規模的網絡。它把自治系統(AS)分紅若干個區域,經過對系統內部路由的不一樣處理,對區域內和區域間路由的不一樣處理,減小網絡數據量的傳輸。OSPF對應RIP的「跳數」,引入了「開銷(Cost)」的概念。OSPF還把其餘路由協議或者靜態路由做爲AS的外部路由引入,處理能力至關強。
RIP的原始版本不支持變長子網掩碼VLSM(RIP v2支持),OSPF支持可變長子網掩碼(VLSM)。
協議運行有差異
運行RIP時,首先向鄰居發送請求報文,其餘運行RIP的路由器收到請求報文後,立刻把本身的路由表發送過去;在沒收到請求報文時,按期(30s)廣播本身的路由表。
運行OSPF時,用Hello報文同鄰居創建鏈接,而後迅速創建鄰接關係,只在創建了鄰接關係的路由器中發送路由信息;之後靠按期發送Hello報文來維持鏈接,相對RIP的路由表報文來講這個Hello報文要小得多,網絡擁塞也就少了。Hello報文在廣播網上通常每10s發送一次,若在必定時間內(4倍於Hello間隔)沒有收到Hello報文,便認爲對方已經死掉,從路由表中去掉,但在鏈路狀態數據庫中並無真正的去掉,以備它在啓用時減小數據傳輸量。但在它達到3600s(60分鐘)時便真正去掉它。OSPF的LSA也會重發,重發間隔爲1800s(30分鐘)。
使用狀況不一樣
通常來講,OSPF佔用的實際鏈路帶寬比RIP少,由於它的路由表是有選擇的廣播(只在創建鄰接的路由器間),而RIP是鄰居之間的廣播。OSPF使用CPU的時間比RIP少,由於OSPF達到平衡後的主要工做是發送Hello報文,而RIP發送的是路由表(Hello報文比路由表小得多)。OSPF使用的內存比RIP大,由於OSPF有一個相對大的路由表。OSPF使用了鄰接關係,其收斂速度快。
概括二者的比較狀況,以下表所示:
OSPFRIP v1RIP v2
鏈路狀態路由協議距離矢量路由協議
沒有跳數的限制RIP的15跳限制,超過15跳的路由被認爲不可達
支持可變長子網掩碼(VLSM)不支持可變長子網支持可變長子網掩掩碼(VLSM)碼(VLSM)
收斂速度快收斂速度慢使用組播發送鏈路狀態更新,週期性廣播整個路由表,在低速鏈路及廣
在鏈路狀態變化時使用觸發更新,域網中應用將產生很大問題提供了帶寬的利用率