動態路由協議之OSPF協議
運行鏈路狀態路由協議的路由器就好像各自“繪制”自己所了解的網段信息,然後通過與鄰居路由器建立鄰接關系,互相“交流”鏈路信息,學習整個區域內的鏈路信息,來“繪制”出整個區域內的鏈路圖。在一個區域內的所有路由器都保存著完全相同的鏈路狀態數據庫。
OSPF是基於開放標準的鏈路狀態路由選擇協議,它完成各路由選擇協議算法的兩大功能:路徑選擇和路徑交換。
內部網關路由協議(IGP),用於在單一AS內決策路由。內部網關路由協議包括RIP、OSPF等。
與內部網關路由協議相對應的是外部網關路由協議(EGP),外部網關路由協議用於在多個AS之間執行路由。
IGP是用來解決AS內部通信的,而EGP是用來解決AS間通信的。
OSPF路由協議與RIP相比,前者適合更大型的網絡環境,因為OSPF是一種鏈路狀態型的路由協議,不會產生環路問題,因此不需要使用最大跳數等限制來防止路由環路的產生。
OSPF將AS分割成多個小的區域,OSPF的路由器只在區域內部學習完整的鏈路狀態信息,而不必了解整個AS內部所有的鏈路狀態。
OSPF協議中有一個幾個很重要的概念,如“Router ID”、“DR”、“BDR”,我們先來了解一下Router ID:
因為運行OSPF的路由器要了解每條鏈路是連接在哪個路由器上的,因此,就需要有一個唯一的標識來標記OSPF網絡中的路由器,這個標識就是Router ID,Cisco路由器是這樣來得到它們的Router ID的。
首先,路由器會選取它所有loopback接口上數值最高的IP地址。若沒配置loopback接口的IP地址,那麽路由器就在所有活動物理端口中選取一個數值最高的IP地址作為路由器的Router ID。用作Router ID的路由器接口不一定非要運行OSPF協議。
一般我們會在配置OSPF時,使用 “router-id“ 來指定路由器的Router ID,也可以把想要配置的Router ID配置為loopback地址,兩種辦法二選一即可,但一定要註意不可從物理端口中選舉Router ID。因為該端口一旦down掉,便會影響網絡中路由器之間的通信。
接下來便是“DR”和“BDR”:
運行OSPF的路由器通過與鄰居路由器建立鄰接關系,互相傳遞鏈路狀態信息。如果每兩個路由器之間都要建立鄰接關系,那麽就會構成n(n-1)/2個鄰接關系,這時就有些混亂了,而且浪費了很多不必要的網絡資源。
為了可以避免這些問題的發生,可以在該網段上選舉一個指定路由器(Designated Router,DR )。由DR和網絡中的其他路由器建立鄰接關系,並負責將網段上的變化告知它們。
為了實現冗余,當DR失效時,需要有一個新的DR來接替DR的工作,這便是BDR(Backup Designated Router,BDR)。網絡上所有的路由器將和DR和BDR同時形成鄰接關系。DR和BDR之間也將形成鄰接關系。
DR和BDR即可以自動選舉,也可以手工選舉。
自動選舉:網段上router ID最大的路由器將被選舉為DR,第二大的將被選舉為BDR,這樣的選舉可能不是最佳的,如果網段中有Cisco 7200 和3800系列路由器,那麽3800路由器可能會由於router ID較而被選為DR,所以若要采用自動選舉,則必須要註意Router ID的配置。
手工選舉DR和BDR:需要設置路由器的優先級,每臺路由器的接口都有一個路由器優先級,優先級的大小範圍是0~255,數值越大,優先級越高,Cisco路由器默認的優先級是1,接口優先級可以在接口模式中通過“ip OSPF priority”命令來更改,若路由器的優先級被設置為0,它將不參與DR和BDR。
DR和BDR的選舉過程:
當一臺OSPF路由器啟動並發現它的鄰居路由器時,它將會去檢查有效的DR和BDR路由器,如果DR和BDR存在,這臺路由器將會接受已經存在的DR和BDR路由器,如果不存在,將執行一個選舉過程,選出具有最高優先級的路由器作為BDR路由器,如果多個路由器的優先級一樣,那麽Router ID最大的路由器將被選中。如果沒有有效的DR路由器存在,那麽BDR路由器將被提升為DR路由器,然後執行一個選舉過程選舉BDR路由器。
路由器的優先級可以影響一個選舉過程,但是它不能強制更換已經存在的DR或BDR路由器,因此,在一個廣播多路訪問網絡上,最先初始化啟動的兩臺具有選舉資格的路由器將成為DR和BDR路由器,若想讓路由器根據自己配置的Router ID來選舉DR和BDR,那麽在所有路由器接入網絡後,可以在特權模式下使用“clear ip ospf pro”來清除OSPF相關信息,讓網絡中的路由器進行重新選舉,如果實際情況允許,也可重啟網絡中的路由器,但路由器都關機後,前兩個運行起來的路由器,必須是自己想要作為DR和BDR的路由器。
OSPF的組播地址有兩個224.0.0.5和224.0.0.6,用來發送鏈路更新消息,鏈路更新消息會先發送給DR和BDR偵聽的地址224.0.0.6,但BDR只偵聽不相應。然後DR路由器使用組播地址224.0.0.5泛洪更新報文到其他所有路由器。
OSPF鄰接關系的建立需要經歷兩個階段,七種狀態:
OSPF的應用環境應考慮下以下幾點:
OSPF單域的配置基本命令如下:
Router(config)#router ospf 1 #配置OSPF的進程號。進程號是本地路由器的進程號,用於標識一臺路由器上的多個OSPF進程,其值可以在1~65535選取。
Router(config-router)#router-id 1.1.1.1 #指定Router ID,若已經配置loopback接口地址,則這條命令可以省略,將1.1.1.1配置為loopback地址時,掩碼則最好為255.255.255.255
Router(config-router)#network 192.168.1.0 0.0.0.255 area 0 #配置運行OSPF協議的接口,也就是將與本路由器直連的網段聲明,以便讓別的路由器學習到該路由器上的直連網段。 “area”是指定區域,在單域配置中區域必須為0。
以上述同樣格式的network命令聲明該路由器上所有的直連網段,配置便完成了。不過需要註意的是,在聲明網段時,網絡地址後面跟的是反掩碼。
查看鄰居路由器的命令:
Router#show ip ospf neighbor
查看F0/0接口的數據結構:
Router#show ip ospf interface f0/0 #可以查看到該網段的DR和BDR,屬於哪個區域等詳細信息。
修改接口F0/0的優先級為2
Router(config)#in f0/0
Router(config-if)#ip ospf priority 2 #註意優先級為0的話將不參與DR和BDR的選舉
Router(config-if)#ip ospf cost 2 #修改接口的cost值(cost值為路徑選擇的一種方式,值的取值範圍為1~65535)
當網絡環境中有多家廠商的產品,則應註意cost值,有些廠家默認的是1,如果網絡中所有的路由器沒有使用同一種計算cost的方式來指定OSPF的開銷,那麽OSPF協議將不能正確的進行路由選擇。
查看鄰居列表及其狀態:
Router#show ip ospf neighbor
查看OSPF的配置
Router#show ip ospf #查看OSPF的配置
動態路由協議之OSPF協議