不同廠商管理距離不同,思科OSPF的協議管理距離(AD)是110,華為OSPF的協議管理距離是10。
基本信息
中文名稱
開放最短路徑優先
外文名稱
OSPF(Open Shortest Path First)
類 型
路由器選擇協議
目錄
1OSPF起源
2術語與協議
3網絡類型
4DR、BDR
5泛洪與區域
6兩種類型
7OSPF度量值
8特殊區域
9數據包類型和格式
10OSPF基本配置命令
折疊編輯本段OSPF起源
IETF為了滿足建造越來越大基於IP網絡的需要,形成了壹個工作組,專門用於開發開放式的鏈路狀態路由協議,以便用在大型、異構的I P網絡中。新的路由協議已經取得壹些成功的壹系列私人的、和生產商相關的、最短路徑優先(SPF )路由協議為基礎, 在市場上廣泛使用。包括OSPF在內,所有的S P F路由協議基於壹個數學算法-Dijkstra算法。這個算法能使路由選擇基於鏈路狀態,而不是距離向量。OSPF由IETF在20世紀80年代末期開發,OSPF是SPF類路由協議中的開放式版本。最初的OSPF規範體如今RFC1131中。這個第1版( OSPF版本1 )很快被進行了重大改進的版本所代替,這個新版本體如今RFC1247文檔中。RFC 1247OSPF稱為OSPF版本2是為了明確指出其在穩定性和功能性方面的實質性改進。這個OSPF版本有許多更新文檔,每壹個更新都是對開放標準的精心改進。接下來的壹些規範出如今RFC 1583、2178和2328中。OSPF版本2的最新版體如今RFC 2328中。最新版只會和由RFC 2138、1583和1247所規範的版本進行互操作。
鏈路是路由器接口的另壹種說法,因此OSPF也稱為接口狀態路由協議。OSPF通過路由器之間通告網絡接口的狀態來建立鏈路狀態數據庫,生成最短路徑樹,每個OSPF路由器使用這些最短路徑構造路由表。
OSPF路由協議是壹種典型的鏈路狀態(Link-state)的路由協議,壹般用於同壹個路由域內。在這裏,路由域是指壹個自治系統(Autonomous System),即AS,它是指壹組通過統壹的路由政策或路由協議互相交換路由信息的網絡。在這個AS中,所有的OSPF路由器都維護壹個相同的描述這個AS結構的數據庫,該數據庫中存放的是路由域中相應鏈路的狀態信息,OSPF路由器正是通過這個數據庫計算出其OSPF路由表的。
作為壹種鏈路狀態的路由協議,OSPF將鏈路狀態組播數據LSA(Link State Advertisement)傳送給在某壹區域內的所有路由器,這壹點與距離矢量路由協議不同。運行距離矢量路由協議的路由器是將部分或全部的路由表傳遞給與其相鄰的路由器。
折疊編輯本段術語與協議
折疊OSPF術語
Router-ID
假設這個世界上的人名字是沒有重復的,每個人的名字都不相同,當有壹天,遇上個陌生人告訴妳,有任何麻煩可以找他,他壹定能夠幫妳解決;等到妳有麻煩的時候,妳想找那個人幫忙,可是如果妳連那個人的名字都不知道,那麽也就不可能找到那個人幫忙了。OSPF就類似於上述情況,網絡中每臺OSPF路由器都相當於壹個人,OSPF路由器之間相互通告鏈路狀態,就等於是告訴別人可以幫別人的忙,如此壹來,如果路由器之間分不清誰是誰,沒有辦法確定各自的身份,那麽通告的鏈路狀態就是毫無意義的,所以必須給每壹個OSPF路由器定義壹個身份,就相當於人的名字,這就是Router-ID,並且Router-ID在網絡中絕對不可以有重名,否則路由器收到的鏈路狀態,就無法確定發起者的身份,也就無法通過鏈路狀態信息確定網絡位置,OSPF路由器發出的鏈路狀態都會寫上自己的Router-ID,可以理解為該鏈路狀態的簽名,不同路由器產生的鏈路狀態,簽名絕不會相同。
每壹臺OSPF路由器只有壹個Router-ID,Router-ID使用IP地址的形式來表示,確定Router-ID的方法為:
★1 .手工指定Router-ID。
★2 .路由器上活動Loopback接口中IP地址最大的,也就是數字最大的,如C類地址優先於B類地址,壹個非活動的接口的IP地址是不能被選為Router-ID的。
★3 .如果沒有活動的Loopback接口,則選擇活動物理接口IP地址最大的。
註:如果壹臺路由器收到壹條鏈路狀態,無法到達該Router-ID的位置,就無法到達鏈路狀態中的目標網絡。
Router-ID只在OSPF啟動時計算,或者重置OSPF進程後計算。
COST
OSPF使用接口的帶寬來計算Metric,例如壹個10 Mbit/s的接口,計算Cost的方法為:
將10 Mbit換算成bit,為10 000 000 bit,然後用10000 0000除以該帶寬,結果為 10000 0000/10 000 000 bit = 10,所以壹個10 Mbit/s的接口,OSPF認為該接口的Metric值為10,需要註意的是,計算中,帶寬的單位取bit/s,而不是Kbit/s,例如壹個100 Mbit/s的接口,Cost 值為 10000 0000 /100 000 000=1,因為Cost值必須為整數,所以即使是壹個1000 Mbit/s(1GBbit/s)的接口,Cost值和100Mbit/s壹樣,為1。如果路由器要經過兩個接口才能到達目標網絡,那麽很顯然,兩個接口的Cost值要累加起來,才算是到達目標網絡的Metric值,所以OSPF路由器計算到達目標網絡的Metric值,必須將沿途中所有接口的Cost值累加起來,在累加時,同EIGRP壹樣,只計算出接口,不計算進接口。
OSPF會自動計算接口上的Cost值,但也可以通過手工指定該接口的Cost值,手工指定的優先於自動計算的值。
OSPF計算的Cost,同樣是和接口帶寬成反比,帶寬越高,Cost值越小。到達目標相同Cost值的路徑,可以執行負載均衡,最多6條鏈路同時執行負載均衡。
鏈路(Link)
就是路由器上的接口,在這裏,應該指運行在OSPF進程下的接口。
鏈路狀態(Link-State)
鏈路狀態(LSA)就是OSPF接口上的描述信息,例如接口上的IP地址,子網掩碼,網絡類型,Cost值等等,OSPF路由器之間交換的並不是路由表,而是鏈路狀態(LSA),OSPF通過獲得網絡中所有的鏈路狀態信息,從而計算出到達每個目標精確的網絡路徑。OSPF路由器會將自己所有的鏈路狀態毫不保留地全部發給鄰居,鄰居將收到的鏈路狀態全部放入鏈路狀態數據庫(Link-State Database),鄰居再發給自己的所有鄰居,並且在傳遞過程中,絕對不會有任何更改。通過這樣的過程,最終,網絡中所有的OSPF路由器都擁有網絡中所有的鏈路狀態,並且所有路由器的鏈路狀態應該能描繪出相同的網絡拓樸。比如如今要計算壹條地鐵線路圖,如上海地鐵二號線某段的圖,如果不直接將該圖給別人看,圖好比是路由表,如今只是報給別人各個站的信息,該信息好比是鏈路狀態,通過告訴別人各個站左邊壹站是什麽,右邊壹站是什麽,別人也能通過該信息(鏈路狀態),畫出完整的線路圖(路由表),如得到如下各站信息(鏈路狀態):
★南京東路-站 (左邊壹站是人民廣場,右邊壹站是陸家嘴)
★南京西路-站 (左邊壹站是靜安寺,右邊壹站是人民廣場)
★靜安寺-站 (右邊壹站是南京西路)
★人民廣場-站 (左邊壹站是南京西路,右邊壹站是南京東路)
★陸家嘴-站 (左邊壹站是南京東路)
還原線路圖(路由表)如下:
根據分析以下兩站信息(兩條鏈路狀態):
★南京西路-站 (左邊壹站是靜安寺,右邊壹站是人民廣場)
★靜安寺-站 (右邊壹站是南京西路)
計算 因為靜安寺右邊是南京西路,而南京西路左邊是靜安寺,所以靜安寺和南京西路是相鄰的,為 靜安寺 - 南京西路,並且由於南京西路右邊是人民廣場,所以通過這兩條信息,得出線路為 靜安寺 - 南京西路 - 人民廣場,繼續往下
再根據如下兩站信息(鏈路狀態):
★人民廣場-站 (左邊壹站是南京西路,右邊壹站是南京東路)
★南京東路-站 (左邊壹站是人民廣場,右邊壹站是陸家嘴)
計算 因為之前南京西路右邊是人民廣場,人民廣場左邊是南京西路,所以南京西路和人民廣場是相鄰的兩站,並且人民廣場右邊是南京東路,得出線路為 南京西路 - 人民廣場 - 南京東路,並且因為南京東路右邊是陸家嘴,所以 這部分線路得知為南京西路 - 人民廣場 - 南京東路 - 陸家嘴,繼續往下
再根據如下壹站信息(鏈路狀態):
★陸家嘴-站 (左邊壹站是南京東路)
計算 因為南京東路右邊是陸家嘴,而陸家嘴左邊是南京東路,所以兩站相鄰,得出為 南京東路 - 陸家嘴,
通過以上各部分的線路:
靜安寺 - 南京西路 - 人民廣場
南京西路 - 人民廣場 - 南京東路 - 陸家嘴
南京東路 - 陸家嘴
所以很輕松的就畫出該段地鐵線路圖為:
靜安寺 - 南京西路 - 人民廣場 -南京東路 - 陸家嘴
從以上計算過程可以知道,因為得到各站的信息,就能畫出整條線路圖,而OSPF也同樣根據路由器各接口的信息(鏈路狀態),計算出網絡拓樸圖,OSPF之間交換鏈路狀態,就像上面交換各站信息,而不像RIP和EIGRP直接交換路由表,交換路由表,就等於直接給人看線路圖,可見OSPF的智能算法,比距離矢量協議對網絡有更精確的認知。
OSPF區域
因為OSPF路由器之間會將所有的鏈路狀態(LSA)相互交換,毫不保留,當網絡規模達到壹定程度時,LSA將形成壹個龐大的數據庫,勢必會給OSPF計算帶來巨大的壓力;為了能夠降低OSPF計算的復雜程度,緩存計算壓力,OSPF采用分區域計算,將網絡中所有OSPF路由器劃分成不同的區域,每個區域負責各自區域精確的LSA傳遞與路由計算,然後再將壹個區域的LSA簡化和匯總之後轉發到另外壹個區域,這樣壹來,在區域內部,擁有網絡精確的LSA,而在不同區域,則傳遞簡化的LSA。區域的劃分為了能夠盡量設計成無環網絡,所以采用了Hub-Spoke的拓樸架構,也就是采用核心與分支的拓樸,如下圖:
區域的命名可以采用整數數字,如1、2、3、4,也可以采用IP地址的形式,0.0.0.1、0.0.0.2,因為采用了Hub-Spoke的架構,所以必須定義出壹個核心,然後其它部分都與核心相連,OSPF的區域0就是所有區域的核心,稱為BackBone 區域(骨幹區域),而其它區域稱為Normal 區域(常規區域),在理論上,所有的常規區域應該直接和骨幹區域相連,常規區域只能和骨幹區域交換LSA,常規區域與常規區域之間即使直連也無法互換LSA,如上圖中Area 1、Area 2、Area 3、Area 4只能和Area 0互換LSA,然後再由Area 0轉發,Area 0就像是壹個中轉站,兩個常規區域需要交換LSA,只能先交給Area 0,再由Area 0轉發,而常規區域之間無法互相轉發。
OSPF區域是基於路由器的接口劃分的,而不是基於整臺路由器劃分的,壹臺路由器可以屬於單個區域,也可以屬於多個區域,如下圖:
如果壹臺OSPF路由器屬於單個區域,即該路由器所有接口都屬於同壹個區域,那麽這臺路由器稱為Internal Router(IR),如上圖中的R2,R3和R4;如果壹臺OSPF路由器屬於多個區域,即該路由器的接口不都屬於壹個區域,那麽這臺路由器稱為Area Border Router (ABR),如上圖中的R1,ABR可以將壹個區域的LSA匯總後轉發至另壹個區域;如果壹臺OSPF路由器將外部路由協議重分布進OSPF,那麽這臺路由器稱為Autonomous System Boundary Router (ASBR),如上圖中,R5將EIGRP重分布進OSPF,那麽R5就是ASBR,但是如果只是將OSPF重分布進其它路由協議,則不能稱為ASBR。
可以配置任何OSPF路由器成為ABR或ASBR。
由於OSPF有著多種區域,所以OSPF的路由在路由表中也以多種形式存在,***分以下幾種:
如果是同區域的路由,叫做Intra-Area Route,在路由表中使用O來表示;
如果是不同區域的路由,叫做Inter-Area Route或Summary Route,在路由表中使用O IA來表示;
如果並非OSPF的路由,或者是不同OSPF進程的路由,只是被重分布到OSPF的,叫做External Route,在路由表中使用O E2或OE 1來表示。
當存在多種路由可以到達同壹目的地時,OSPF將根據先後順序來選擇要使用的路由,所有路由的先後順序為:
Intra-Area - Inter-Area - External E1 - External E2,即 O - O IA - O E1 - O E2。
註:
★壹臺路由器可以運行多個OSPF進程,不同進程的OSPF,可視為沒有任何關系,如需要獲得相互的路由信息,需要重分布。
★每個OSPF進程可以有多個區域,而路由器的鏈路狀態數據庫是分進程和分區域存放的。
鄰居(Neighbor)
OSPF只有鄰接狀態才會交換LSA,路由器會將鏈路狀態數據庫中所有的內容毫不保留地發給所有鄰居,要想在OSPF路由器之間交換LSA,必須先形成OSPF鄰居,OSPF鄰居靠發送Hello包來建立和維護,Hello包會在啟動了OSPF的接口上周期性發送,在不同的網絡中,發送Hello包的間隔也會不同,當超過4倍的Hello時間,也就是Dead時間過後還沒有收到鄰居的Hello包,鄰居關系將被斷開。
兩臺OSPF路由器必須滿足4個條件,才能形成OSPF鄰居,4個必備條件如下:
Area-id(區域號碼)
即路由器之間必須配置在相同的OSPF區域,否則無法形成鄰居。
Hello and Dead Interval(Hello時間與Dead時間)
即路由器之間的Hello時間和Dead時間必須壹致,否則無法形成鄰居。
Authentication(認證)
路由器之間必須配置相同的認證密碼,如果密碼不同,則無法形成鄰居。
Stub Area Flag(末節標簽)
路由器之間的末節標簽必須壹致,即處在相同的末節區域內,否則無法形成鄰居。
註:
★OSPF只能使用接口的Primary地址建立鄰居,不能使用Secondary建立鄰居。
★路由器雙方接口要麽都為手工配置地址(Numbered),要麽都為借用地址(Unnumbered),否則無法建立鄰居。
鄰接(Adjacency)
兩臺OSPF路由器能夠形成鄰居,但並不壹定能相互交換LSA,只要能交換LSA,關系則稱為鄰接(Adjacency)。鄰居之間只交換Hello包,而鄰接(Adjacency)之間不僅交換Hello包,還要交換LSA。
DR/BDR
當多臺OSPF路由器連到同壹個多路訪問網段時,如果每兩臺路由器之間都相互交換LSA,那麽該網段將充滿著眾多LSA條目,為了能夠盡量減少LSA的傳播數量,通過在多路訪問網段中選擇出壹個核心路由器,稱為DR(Designated Router),網段中所有的OSPF路由器都和DR互換LSA,這樣壹來,DR就會擁有所有的LSA,並且將所有的LSA轉發給每壹臺路由器;DR就像是該網段的LSA中轉站,所有的路由器都與該中轉站互換LSA,如果DR失效後,那麽就會造成LSA的丟失與不完整,所以在多路訪問網絡中除了選舉出DR之外,還會選舉出壹臺路由器作為DR的備份,稱為BDR(Backup Designated Router),BDR在DR不可用時,代替DR的工作,而既不是DR,也不是BDR的路由器稱為Drother,事實上,Dother除了和DR互換LSA之外,同時還會和BDR互換LSA。
其實不難看出,DR與BDR並沒有任何本質與功能的區別,只有在多路訪問的網絡環境,才需要DR和BDR,DR與BDR的選舉是在壹個二層網段內選舉的,即在多個路由器互連的接口範圍內,與OSPF區域沒有任何關系,壹個區域可能有多個多路訪問網段,那麽就會存在多個DR和BDR,但壹個多路訪問網段,只能有壹個DR和BDR;選舉DR和BDR的規則為:
★比較接口優先級
選舉優先級最高的成為DR,優先級數字越大,表示優先級越高,被選為DR的幾率就越大,次優先級的為BDR,優先級範圍是0-255,默認為1,優先級為0表示沒有資格選舉DR和BDR。
★Route-Id大小
如果在優先級都相同的情況下,Route-Id 最大的成為DR,其次是BDR,數字越大,被選為DR的幾率就越大。
因為所有路由器都能與DR和BDR互換LSA,所以所有路由器都與DR和BDR是鄰接(Adjacency)關系,而Drother與Drother之間無法互換LSA,所以Drother與Drother之間只是鄰居關系。
在壹個多路訪問網絡中,選舉DR和BDR是有時間限制的,該時間為Wait時間,默認為4倍的Hello時間,即與Dead時間相同,如果OSPF路由器在超過Wait時間後也沒有其它路由器與自己競爭DR與BDR的選舉,那麽就選自己為DR;當壹個多路訪問網絡中選舉出DR與BDR之後,在DR與BDR沒有失效的情況下,不會進行重新選舉,也就是在選舉出DR與BDR之後,即使有更高優先級的路由器加入網絡,也不會影響DR與BDR的角色,在越出選舉時間(Wait時間)後,只有DR與BDR失效後,才會重新選舉。DR失效後,會同時重新選舉DR與BDR,而在BDR失效後,只會重新選舉BDR。
DR和BDR與Drother的數據包處理會有所不同,
所有OSPF路由器,包括DR與BDR,都能夠接收和傳遞目標地址為224.0.0.5的數據包。
只有DR和BDR才能接收和傳遞目標地址為224.0.0.6的數據包。
由此可見,Drother路由器將數據包發向目標地址224.0.0.6,只能被DR和BDR接收,其它Drother不能接收;而DR和BDR將數據包發向目標地址224.0.0.5,可以被所有路由器接收。
折疊協議
壹、Hello協議的目的:
用於發現鄰居
在成為鄰居之前,必須對Hello包裏的壹些參數進行協商
Hello包在鄰居之間扮演著keepalive的角色
允許鄰居之間的雙向通信
用於在NBMA(Nonbroadcast Multi-access)、廣播網絡(以太網)中選舉DR和BDR
二、Hello Packet包含以下信息:
源路由器的RID
源路由器的Area ID
源路由器接口的掩碼
源路由器接口的認證類型和認證信息
源路由器接口的Hello包發送的時間間隔
源路由器接口的無效時間間隔
優先級
DR/BDR接口IP地址
五個標記位(flag bit)
源路由器的所有鄰居的RID
折疊