中小企業網絡管理:OSPF路由協議分析
OSPF目前使用的是版本2,可適應大規模網絡,因為OSPF沒有RIP的跳數限制,并且由于引進了區域的概念也比EIGRP支持的網絡規模大。OSPF已經被廣泛的用在網絡、企業網絡、電力網絡、金融網絡、是一個支持大規模網絡的IGP路由協議,最多可支持幾百臺路由器的網絡規模。
下面咱們來看一下OSPF的優點:
路由變化收斂速度快:OSPF的路由是經過路由器存儲在本地的數據庫計算出來的,當發生網絡更新的時候不需要被動的詢問鄰居路由器,所以OSPF相對來說收斂速度比較快。
無路由環路:OSPF路由協議采用的是最短路徑優先算法(SPF),而且路由器用Router ID來表示,所以可以保證在一個區域內沒有環路,由于 使用直連骨干區域的設計,所以可以保證即使在多載的情況下無環路出現。注意,這里所說的無環路的意思是當網絡僅使用OSPF路由協議時沒有環路,如果出現其他路由協議或靜態路由的參與,就不能保證沒有環路了。
支持CIDR和VLSM:我們前面所講的RIP路由協議不支持CIDR和VLSM,這被認為是RIP路由不適用于大型網絡的又一個重要原因,采用CIDR和VLSM可以在***限度上節約IP地址。
層次區域劃分:在OSPF中,一個網絡可以被劃分為很多個區域Area,其中分為兩種:骨區域(area 0)和常規區域,其中常規區域可以支持42億個,2的32次方個區域,絕對夠用。但是要求所有的常規區域必須與骨干區域相連,一個區域通過OSPF邊界路由器相連,區域間可以通過路由匯總(Summary)來減少路由信息,減小路由表,提高路由器的運算速度。
組播地址發送協議報文:使用專用的組播地址發送協議報文,因為是在小范圍內通訊,所以可以減少對網絡中非OSPF設備的影響。
下面咱們要介紹OSPF中一個重要但是很不算復雜的概念:Router ID(RID)
一臺路由器如果要運行OSPF協議,就必須存在Router ID。Router ID的作用其實很簡單,就是唯一標示一臺OSPF路由器,如果沒有配置ID號,系統會從當前接口的IP地址中自動選一個作為路由器的ID號。選擇順序通常是優先從loopback地址中選擇一個作為路由器的ID號;也可以從接口地址中選擇,這時如果同時存在多個接口,則將接口中***的IP地址作為路由器的 ID號。也就是說如果有邏輯接口也就是Loopback接口,則使用Loopback地址作為自己的RID,那如果沒有邏輯接口,只有物理接口,則會使用物理接口IP地址比較大的那個作為自己的RIP。那么哪些是物理接口如:Serial口,Ethernet口,ATM口等等,但是如果有兩個邏輯接口,則也是邏輯接口中IP地址較大的那個為RID。
通常建議先Router ID再配置OSPF路由協議,否則如果先啟動了OSPF而路由器自己選舉的Router ID又不是你希望的,那么重新重新配置Router ID就需要重啟動一次OSPF路由進程了。為什么使用Loopback IP地址來優先配置Router ID?因為早期的路由器操作(IOS)中使用物理接口IP地址充當Router ID,如果物理接口出現問題而down了,那么Router ID也就跟著消失了。這樣很容易OSPF路由協議的不穩定。雖然現在路由器操作系統已經改掉了這個BUG,但路由器優先考比物理接口穩定的Loopback口IP地址成為了一個慣例。另外由于Loopback接口一般不參與路由工作,所以可以通過Loopback接口優先配置Router ID。
手動配置Router ID的好處:
因為OSPF協議以Router ID識別鄰居路由器,所以當出現各川問題的時候管理員總是看到Router ID路由器有問題。那么在分配Router ID的時候,就可以考慮按照邏輯或物理的地址來進行分配。在Cisco路由器中還有一個特性是通過;架設DNS服務器來解析Router ID名稱。這樣當網絡管理員監視網絡狀況的時候就可以直接看到對方路由器的名字了。
咱們了解了Router ID之后咱們就要接著來了解另外兩個概述DR和BDR:因為Router ID直接影響到DB和BDR的選舉,我們來詳細看一下,我們先從一個圖入手:
▲ DR BDR的選舉
那么如果在一個以太網環境中這五臺路由器之間希望交換同步路由信息,它們之間使用的是網狀的邏輯拓撲。如下圖所示:
▲交換路由信息
這時如果希望它們之間能夠迅速同步,需要多條鏈路,這樣維護成本是比較大的。我們就想了,我們可以在網絡上選擇一個路由器出來,讓它來當“老大”,然后規定其他的路由器如果希望與另一個路由器通訊,那么只要經過這個“老大”就可以了。所以如果我們把C當成“老大”,則拓撲就變成了下面這樣:
▲ 選舉過程
這樣所有的路由器之間通訊都通過C路由器,就減少了路由信息在網絡上的洪泛。節約了網絡帶寬。那么這個路由器C就是咱們所說的DR,指定路由器(Designated Rouer)
那關鍵是如果有一天這個路由器C壞了,怎么辦?這和WINDOWS中的DC有點類似,為了實現冗余,我們再來指定一個BDR(Backup DR),如我們在這里再指定路由器D作為BDR,那么這個拓撲圖又變了:
▲ 再次變化
其實也就是咱們網絡拓撲中所說的部分互連。這樣的話冗余實現了,成本也降低了。關鍵是網絡上有這么多路由器,到底哪一個是DR,哪一個是BDR?
我們來看一下選舉過程:
當選舉DR/BDR的時候要比較hello報文中的優先級。那么什么又是hello報文中,簡單來說這個hello報文中包括一些定時器的數值,DR,BDR,以及自己已知的鄰居。也就是說每個路由器在和對方通訊時也是發hello報文,見面先打個照呼!在OSPF中默認每10秒中發一次 Hello報文!如果40秒還沒有收到的話,則宣稱該鄰居死亡。里面就包含了Router ID,Hello報文的時間間隔和死亡時間間隔,鄰居信息,區域信息,路由器優先級,DR以及BDR的信息,驗證信息以及根區域標記等。如圖所示:
▲ OSPF路由協議
其中要求打*的參數必須要完全一樣,不然就不可能成為一個鄰居。
那么當選舉DR/BDR的時候就先比較Hello包中的優先級(priority)優先級***的為DR,次高的為BDR,但是默認優先級都為1,所以這個意義不大!那么在優先級相同的情況下就開始比較我們剛剛介紹的一個東西了Router ID,RID值***的為DR,次高的為BDR,當你把優先級設置為0以后,該路由器就不能成為DR或者是BDR,只能是DROther。
修改優先級可以使用命令: (config-if)#ip ospf cost 0-255 255***
當選舉完成后,DROther只和DR/BDR形成鄰接關系也就是說在它們的眼里只有DR和BDR是它們的鄰居,所有的路由器將組播Hello包到地址 224.0.0.5以便它們能跟蹤其他鄰居的信息,即DR將洪泛LSU到224.0.0.5這個組播地址上;DROther 只能能過組播地址224.0.0.6將LSU(鏈路狀態更新)到所有的DR上。只有DR/BDR監聽這個組播地址。
如果兩臺路由器剛剛啟動沒有配置OSPF時,則相關的端口都是DOWN的。
▲ 沒有啟用路由協議
如果配置好OSPF,這個時候如果雙方開始發送一個初始化狀態,我們以Router1為例,此時它會宣告我是192.168.10.10 這其實就是它的RID,它會告訴對方我是192.168.10.10我現在沒有任何鄰居。這個時候Router2在自己的Fa0/0中收到了 Router2 發過來的宣告信息就是把這個信息加到自己的鄰居表里面并注明是通過Fa0/0中連接。,然后再反饋給Router1說我是192.168.10.20,我有一個鄰居是192.168.10.10;此時Router1又收到Router2的宣告信息就會把Router2的地址加到自己的路由表中并注明是通過 Fa0/0連接的。這個狀態稱為:Two-way 狀態,相對穩定狀態但是還沒有真正成為鄰居關系。接下來進行 Exstart 狀態,還沒有真正進行信息交換呢,只是一個選舉DR的過程:Router1會發出一個數據包說我來負責更新路由表,因為我的RID是 192.168.10.10,但是Router2會說,不行,我不認可,因為我的RID比你大。所以經過協商,Roter2應該是BDR了。再往下就是一個Exchange 狀態:交換雙方LSDB中的鏈路狀態數據庫的摘要信息,注意僅僅是摘要信息,為同步雙方的數據庫做準備。注意這里使用的不再是hello報文,是DD報文,也就是說Router1發出一個DD報文給對方,對方收到后會發出LSACK,大家一看ACK太熟悉了,好多地方我們都使用過ACK,如TCP建立連接,通訊,拆除連接過程中,DHCP的工作過程中等等,都用到達ACK這個詞,在這里也是一個意思就是給對方一個確認,因為如果沒有確認,對方會重傳!再往下就進入了Load 狀態,這才是真正根據需要來調整自己的鏈路狀態數據庫,沒有的加進來,如果我已經有了,再做出比較應該不應該做更新,等等操作。***完全結束之后進行是一個FULL狀態,完全狀態。所有的鏈路狀態數據庫保持同步!那么如果又有網絡鏈路發生改變了,則LSU的信息(LSU更新包中包含LSA狀態信息)只會發給DR,然后由DR再通過組播洪泛到本區域的其他路由器上。其他路由器再根據鏈路狀態重新計算出新的路由表出來。 這中間會用到鏈路狀態樹和最短路徑樹兩個概念,我們簡單看一下:
▲ SPF算法
在OSPF中是用帶寬作為metric的標準叫 cost,一般每個路由器都是以自己為根來計算到達對方所需要的一個開銷,用10的8次方來除以帶寬,越小說明帶寬越大,路徑***,就放到路由表中也就是最短路徑樹中。