OSPF要求每臺運行OSPF的路由器都了解整個(gè)網(wǎng)絡(luò )的鏈路狀態(tài)信息,這樣才能計算出到達目的地的最優(yōu)路徑。 OSPF的收斂過(guò)程由鏈路狀態(tài)公告LSA(Link State Advertisement)泛洪開(kāi)始,LSA中包含了路由器已知的接口IP地址、 掩碼、 開(kāi)銷(xiāo)和網(wǎng)絡(luò )類(lèi)型等信息。 收到LSA的路由器都可以根據LSA提供的信息建立自己的鏈路狀態(tài)數據庫LSDB(LinkState Database),并在LSDB的基礎上使用SPF算法迚行運算,建立起到達每個(gè)網(wǎng)絡(luò )的最短路徑樹(shù)。 最后,通過(guò)最短路徑樹(shù)得出到達目的網(wǎng)絡(luò )的最優(yōu)路由,并將其加入到IP路由表中。
OSPF直接運行在IP協(xié)議之上,使用IP協(xié)議號89
OSPF有五種報文類(lèi)型,每種報文都使用相同的OSPF報文頭。
報文頭部
OSPF直接運行在IP協(xié)議之上,使用IP協(xié)議號89。
建立鄰居的過(guò)程:
建立鄰接關(guān)系的過(guò)程
Router ID是一個(gè)32位的值,它唯一標識了一個(gè)自治系統內的路由器,可以為每臺運行OSPF的路由器上可以手動(dòng)配置一個(gè)Router ID,或者指定一個(gè)IP地址作為Router ID。 如果設備存在多個(gè)邏輯接口地址,則路由器使用邏輯接口中最大的IP地址作為Router ID;如果沒(méi)有配置邏輯接口,則路由器使用物理接口的最大IP地址作為Router ID。
鄰居(Neighbor):
OSPF路由器啟動(dòng)后,便會(huì )通過(guò)OSPF接口向外發(fā)送Hello報文用于發(fā)現鄰居。 收到Hello報文的OSPF路由器會(huì )檢查報文中所定義的一些參數,如果雙方的參數一致,就會(huì )彼此形成鄰居關(guān)系。
鄰接(Adjacency):
形成鄰居關(guān)系的雙方不一定都能形成鄰接關(guān)系,這要根據網(wǎng)絡(luò )類(lèi)型而定。只有當雙方成功交換DD報文,并能交換LSA之后,才形成真正意義上的鄰接關(guān)系。
OSPF的鄰居収現過(guò)程是基于Hello報文來(lái)實(shí)現的,Hello報文中的重要字段解釋如下
OSPF定義了四種網(wǎng)絡(luò )類(lèi)型,分別是點(diǎn)到點(diǎn)網(wǎng)絡(luò ),廣播型網(wǎng)絡(luò ),NBMA網(wǎng)絡(luò )和點(diǎn)到多點(diǎn)網(wǎng)絡(luò )。
點(diǎn)到點(diǎn)網(wǎng)絡(luò )是指只把兩臺路由器直接相連的網(wǎng)絡(luò )。 一個(gè)運行PPP的64K串行線(xiàn)路就是一個(gè)點(diǎn)到點(diǎn)網(wǎng)絡(luò )的例子。
廣播型網(wǎng)絡(luò )是指支持兩臺以上路由器,并且具有廣播能力的網(wǎng)絡(luò )。 一個(gè)含有三臺路由器的以太網(wǎng)就是一個(gè)廣播型網(wǎng)絡(luò )的例子。
OSPF可以在不支持廣播的多路訪(fǎng)問(wèn)網(wǎng)絡(luò )上運行,此類(lèi)網(wǎng)絡(luò )包括在hubspoke拓撲上運行的幀中繼(FR)和異步傳輸模式(ATM)網(wǎng)絡(luò ),這些網(wǎng)絡(luò )的通信依賴(lài)于虛電路。 OSPF定義了兩種支持多路訪(fǎng)問(wèn)的網(wǎng)絡(luò )類(lèi)型:非廣播多路訪(fǎng)問(wèn)網(wǎng)絡(luò )(NBMA) 和點(diǎn)到多點(diǎn)網(wǎng)絡(luò )(Point To MultiPoints)。
在廣播和NBMA網(wǎng)絡(luò )中為了減少連接的數量,減輕網(wǎng)絡(luò )負荷通過(guò)選舉DR/BDR
在鄰居収現完成之后,路由器會(huì )根據網(wǎng)段類(lèi)型迚行DR選舉。 在廣播和NBMA網(wǎng)絡(luò )上,路由器會(huì )根據參不選舉的每個(gè)接口的優(yōu)先級迚行DR選舉。 優(yōu)先級取值范圍為0-255,值越高越先。 缺省情況下,接口優(yōu)先級為1。 如果一個(gè)接口優(yōu)先級為0,那么該接口將不會(huì )參不DR戒者BDR的選舉。 如果優(yōu)先級相同時(shí),則比較Router ID,值越大越優(yōu)先被選舉為DR。
為了給DR做備份,每個(gè)廣播和NBMA網(wǎng)絡(luò )上還要選舉一個(gè)BDR。 BDR也會(huì )與網(wǎng)絡(luò )上所有的路由器建立鄰接關(guān)系。為了維護網(wǎng)絡(luò )上鄰接關(guān)系的穩定性,如果網(wǎng)絡(luò )中已經(jīng)存在DR和BDR,則新添加進(jìn)該網(wǎng)絡(luò )的路由器不會(huì )成為DR和BDR,不管該路由器的Router Priority是否最大。 如果當前DR發(fā)生故障,則當前BDR自動(dòng)成為新的DR,網(wǎng)絡(luò )中重新選舉BDR;如果當前BDR發(fā)生故障,則DR不變,重新選舉BDR。 這種選舉機制的目的是為了保持鄰接關(guān)系的穩定,使拓撲結構的改變對鄰接關(guān)系的影響盡量小。
劃分OSPF區域可以減少LSDB規模,節約鏈路帶寬,減輕路由負荷。
每個(gè)區域都要維護一個(gè)獨立的LSDB.
Area 0 骨干區域,為了避免區域間路由環(huán)路,非骨干區域之間不允許直接相互發(fā)布路由信息。 因此,每個(gè)區域都必須連接到骨干區域。
ABR 區域邊界路由器,運行在區域之間的路由器,它包含所有相連區域的LSDB。
ASBR 自治系統邊界路由器,是指和其他AS中的路由器交換路由信息的路由器,這種路由器會(huì )向整個(gè)AS通告AS外部路由信息。
OSPF基于接口帶寬計算開(kāi)銷(xiāo),計算公式為:接口開(kāi)銷(xiāo)=帶寬參考值÷帶寬。 帶寬參考值可配置,缺省為100Mbit/s。 以此,一個(gè)64kbit/s串口的開(kāi)銷(xiāo)為1562,一個(gè)E1接口(2.048Mbit/s)的開(kāi)銷(xiāo)為48。
命令bandwidth-reference可以用來(lái)調整帶寬參考值,從而可以改變接口開(kāi)銷(xiāo),帶寬參考值越大,開(kāi)銷(xiāo)越準確。還可以通過(guò)ospf cost命令來(lái)手動(dòng)為一個(gè)接口調整開(kāi)銷(xiāo),開(kāi)銷(xiāo)值范圍是1~65535,缺省值為1。
在配置OSPF時(shí),需要首先使能OSPF進(jìn)程
命令ospf [process id]用來(lái)使能OSPF,在該命令中可以配置迚程ID。
命令ospf [process id] [router-id <router-id>]既可以使能OSPF迚程,還同時(shí)可以用于配置Router ID。 在該命令中,router-id代表路由器的ID。
命令network用于指定運行OSPF協(xié)議的接口,在該命令中需要指定一個(gè)反掩碼。 反掩碼中,“0” 表示此位必須嚴格匹配,“1” 表示該地址可以為任意值。