那么如果在一個以太網(wǎng)環(huán)境中這五臺路由器之間希望交換同步路由信息,它們之間使用的是網(wǎng)狀的邏輯拓撲。如下圖所示:
交換路由信息
這時如果希望它們之間能夠迅速同步,需要多條鏈路,這樣維護成本是比較大的。我們就想了,我們可以在網(wǎng)絡上選擇一個路由器出來,讓它來當“老大”,然后規(guī)定其他的路由器如果希望與另一個路由器通訊,那么只要經(jīng)過這個“老大”就可以了。所以如果我們把C當成“老大”,則拓撲就變成了下面這樣:
選舉過程
這樣所有的路由器之間通訊都通過C路由器,就減少了路由信息在網(wǎng)絡上的洪泛。節(jié)約了網(wǎng)絡帶寬。那么這個路由器C就是咱們所說的DR,指定路由器(Designated Rouer)
那關(guān)鍵是如果有一天這個路由器C壞了,怎么辦?這和WINDOWS中的DC有點類似,為了實現(xiàn)冗余,我們再來指定一個BDR(Backup DR),如我們在這里再指定路由器D作為BDR,那么這個拓撲圖又變了:
再次變化
其實也就是咱們網(wǎng)絡拓撲中所說的部分互連。這樣的話冗余實現(xiàn)了,成本也降低了。關(guān)鍵是網(wǎng)絡上有這么多路由器,到底哪一個是DR,哪一個是BDR?
我們來看一下選舉過程:
當選舉DR/BDR的時候要比較hello報文中的優(yōu)先級。那么什么又是hello報文中,簡單來說這個hello報文中包括一些定時器的數(shù)值,DR,BDR,以及自己已知的鄰居。也就是說每個路由器在和對方通訊時也是發(fā)hello報文,見面先打個照呼!在OSPF中默認每10秒中發(fā)一次Hello報文!如果40秒還沒有收到的話,則宣稱該鄰居死亡。里面就包含了Router ID,Hello報文的時間間隔和死亡時間間隔,鄰居信息,區(qū)域信息,路由器優(yōu)先級,DR以及BDR的信息,驗證信息以及根區(qū)域標記等。如圖所示:
OSPF路由協(xié)議
其中要求打*的參數(shù)必須要完全一樣,不然就不可能成為一個鄰居。
那么當選舉DR/BDR的時候就先比較Hello包中的優(yōu)先級(priority)優(yōu)先級最高的為DR,次高的為BDR,但是默認優(yōu)先級都為1,所以這個意義不大!那么在優(yōu)先級相同的情況下就開始比較我們剛剛介紹的一個東西了Router ID,RID值最高的為DR,次高的為BDR,當你把優(yōu)先級設(shè)置為0以后,該路由器就不能成為DR或者是BDR,只能是DROther。
修改優(yōu)先級可以使用命令: (config-if)#ip ospf cost 0-255 255最高
當選舉完成后,DROther只和DR/BDR形成鄰接關(guān)系也就是說在它們的眼里只有DR和BDR是它們的鄰居,所有的路由器將組播Hello包到地址224.0.0.5以便它們能跟蹤其他鄰居的信息,即DR將洪泛LSU到224.0.0.5這個組播地址上;DROther 只能能過組播地址224.0.0.6將LSU(鏈路狀態(tài)更新)到所有的DR上。只有DR/BDR監(jiān)聽這個組播地址。
如果兩臺路由器剛剛啟動沒有配置OSPF時,則相關(guān)的端口都是DOWN的。
沒有啟用路由協(xié)議
如果配置好OSPF,這個時候如果雙方開始發(fā)送一個初始化狀態(tài),我們以Router1為例,此時它會宣告我是192.168.10.10 這其實就是它的RID,它會告訴對方我是192.168.10.10我現(xiàn)在沒有任何鄰居。這個時候Router2在自己的Fa0/0中收到了Router2 發(fā)過來的宣告信息就是把這個信息加到自己的鄰居表里面并注明是通過Fa0/0中連接。,然后再反饋給Router1說我是192.168.10.20,我有一個鄰居是192.168.10.10;此時Router1又收到Router2的宣告信息就會把Router2的地址加到自己的路由表中并注明是通過Fa0/0連接的。
這個狀態(tài)稱為:Two-way 狀態(tài),相對穩(wěn)定狀態(tài)但是還沒有真正成為鄰居關(guān)系。接下來進行 Exstart 狀態(tài),還沒有真正進行信息交換呢,只是一個選舉DR的過程:Router1會發(fā)出一個數(shù)據(jù)包說我來負責更新路由表,因為我的RID是192.168.10.10,但是Router2會說,不行,我不認可,因為我的RID比你大。所以經(jīng)過協(xié)商,Roter2應該是BDR了。再往下就是一個Exchange 狀態(tài):交換雙方LSDB中的鏈路狀態(tài)數(shù)據(jù)庫的摘要信息,注意僅僅是摘要信息,為同步雙方的數(shù)據(jù)庫做準備。
注意這里使用的不再是hello報文,是DD報文,也就是說Router1發(fā)出一個DD報文給對方,對方收到后會發(fā)出LSACK,大家一看ACK太熟悉了,好多地方我們都使用過ACK,如TCP建立連接,通訊,拆除連接過程中,DHCP的工作過程中等等,都用到達ACK這個詞,在這里也是一個意思就是給對方一個確認,因為如果沒有確認,對方會重傳!再往下就進入了Load 狀態(tài),這才是真正根據(jù)需要來調(diào)整自己的鏈路狀態(tài)數(shù)據(jù)庫,沒有的加進來,如果我已經(jīng)有了,再做出比較應該不應該做更新,等等操作。
最后完全結(jié)束之后進行是一個FULL狀態(tài),完全狀態(tài)。所有的鏈路狀態(tài)數(shù)據(jù)庫保持同步!那么如果又有網(wǎng)絡鏈路發(fā)生改變了,則LSU的信息(LSU更新包中包含LSA狀態(tài)信息)只會發(fā)給DR,然后由DR再通過組播洪泛到本區(qū)域的其他路由器上。其他路由器再根據(jù)鏈路狀態(tài)重新計算出新的路由表出來。 這中間會用到鏈路狀態(tài)樹和最短路徑樹兩個概念,我們簡單看一下:
SPF算法
在OSPF中是用帶寬作為metric的標準叫 cost,一般每個路由器都是以自己為根來計算到達對方所需要的一個開銷,用10的8次方來除以帶寬,越小說明帶寬越大,路徑最優(yōu),就放到路由表中也就是最短路徑樹中。
以上只是簡單分析了一下OSPF的工作過程。在此給出一張截圖供大家參考:
OSPF工作過程
OSFP雖然說理論知識很多,但是配置起來很簡單,我們來看一下具體的配置:
啟用 OSPF:
(Config)# router ospf 進程ID 范圍是 1-65535
其中這個進程ID,用于區(qū)分不同的OSPF協(xié)議,這只是一個本地進程ID,隨便取,也就是說只是區(qū)分一個路由器上的多個OSPF協(xié)議,跟別的路由器沒有關(guān)系可以不同。
指定網(wǎng)段
(config-router)network 網(wǎng)絡號 反向掩碼 area 區(qū)域號
注意這里區(qū)域號必須要求一樣
查看啟用的路由協(xié)議:
Show ip protocols
查看當前路由表:
Show ip route
查直O(jiān)SPF相關(guān)信息
Show ip ospf interface
同樣我們還是通過一個實驗來結(jié)束OSPF的學習:
Lab:: 動態(tài)路由協(xié)議OSPF
實驗目的:通過OSPF路由協(xié)議使得網(wǎng)絡中達到全網(wǎng)互通的目的
設(shè)備:三臺Cisco系統(tǒng)路由器,2條V24線纜
拓撲圖:
實驗拓撲圖
Router1上的配置:
Router>en
Router#conf t
Router(config)#hostname RA
RA(config)#interface s2/0
RA(config-if)#ip address 192.168.0.1 255.255.255.0
RA(config-if)#clock rate 64000
RA(config-if)#no shutdown
RA(config-if)#exit
RA(config)#interface fa 0/0
RA(config-if)#ip address 10.10.10.1 255.255.255.0
RA(config-if)#no shutdown
RA(config-if)#exit
RA(config)#router ospf 1
RA(config-router)#network 10.10.10.0 0.0.0.255 area 0
RA(config-router)#network 192.168.0.0 0.0.0.255 area 0
Router2的配置:
Router>enable
Router#conf t
Router(config)#hostname RB
RB(config)#interface s2/0
RB(config-if)#ip address 192.168.0.2 255.255.255.0
RB(config-if)#no shutdown
RB(config-if)#exit
RB(config)#interface s3/0
RB(config-if)#ip address 192.168.1.1 255.255.255.0
RB(config-if)#clock rate 64000
RB(config-if)#no shutdown
RB(config-if)#exit
RB(config)#router ospf 1
RB(config-router)#network 192.168.0.0 0.0.0.255 area 0
RB(config-router)#network 192.168.1.0 0.0.0.255 area 0
Router3的配置:
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#interface s2/0
Router(config-if)#ip address 192.168.1.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fa 0/0
Router(config-if)#ip address 20.20.20.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1
Router(config-router)#network 192.168.1.0 0.0.0.255 area 0
Router(config-router)#network 20.20.20.0 0.0.0.255 area 0
Router(config-router)#exit
驗證我們在PC2上去ping PC1:
驗證
反之也可以通訊,在此不再測試。
我們可以使用show ip route,顯示當前的路由表:
路由表
其中O代表的就是OSPF,在此不再詳細介紹!
也可以使用show ip rotocols 顯示當前正在運行的路由協(xié)議:
路由協(xié)議
關(guān)于OSPF我們就介紹到此,下一篇文章我們將介紹一個平衡混合路由協(xié)議的代表EIGRP,敬請期待。