OSPF(Open Shortest Path First開放式最短路徑優先)是一個內部網關協議(Interior Gateway Protocol,簡稱IGP),用於在單一自治系統(autonomous system,AS)內決策路由。是對鏈路狀態路由協議的一種實現,隸屬內部網關協議(IGP),故運做於自治系統內部。著名的迪克斯加算法被用來計算最短路徑樹。OSPF支持負載均衡和基於服務類型的選路,也支持多種路由形式,如特定主機路由和子網路由等。OSPF路由協議是一種典型的鏈路狀態(Link-state)的路由協議,通常用於同一個路由域內。在這裏,路由域是指一個自治系統(Autonomous System),即AS,它是指一組經過統一的路由政策或路由協議互相交換路由信息的網絡。在這個AS中,全部的OSPF路由器都維護一個相同的描述這個AS結構的數據庫,該數據庫中存放的是路由域中相應鏈路的狀態信息,OSPF路由器正是經過這個數據庫計算出其OSPF路由表的。算法
四種路由類型:DR、BDR、ABR、ASBR數據庫
五大區域:骨幹區域、標準區域、末梢區域、徹底末梢區域、非存末梢區域
五大數據包類型:hello、DBD、LSR、LSU(LSA)、LSAck
六種LSA:LSA一、LSA二、LSA三、LSA四、LSA五、LSA7
七種狀態:Down狀態、Init狀態、2-Way狀態、ExStart狀態、Exchange狀態、Loading狀態、Full狀態網絡
在瞭解OSPF原理以前咱們先須要知道一些相關的概念:
(1)自治系統(AS)
(2)內部網關協議(IGP),如:RIP、OSPF、ISIS協議等。
(3)外部網關協議(EGP),如:BGP協議。負載均衡
首先路由器會互相創建鄰接關係,創建鄰接關係後會互相學習鏈路狀態信息,在學習鏈路狀態信息後會生成鏈路狀態數據庫,而後會經過Dijkstra算法計算出最短路徑樹,將全部最短路徑整合成路由表。ide
DR(Designated Router):指定路由器,OSPF協議啓動後開始選舉而來 。是爲了解決LSA在一個Area裏浪費很大的帶寬而設計的,當一個路由器端口發生了更改或損壞,此時這個路由器會直接告知DR,而DR會來告知區域內全部路由。oop
BDR(Back-up Designated Router):備份指定路由器,一樣是由OSPF啓動後選舉而來。它的做用就是在DR沒法正常工做時代替DR的工做。學習
ABR(Area Border Routers):區域邊界路由器,鏈接不一樣OSPF區域。ABR爲每個所鏈接的區域創建鏈路狀態數據庫,負責將所鏈接區域的路由摘要信息發送到主幹區域,而主幹區域上的ABR則負責將這些信息發送到各個區域。 大數據
ASBR(Autonomous System Boundary Router):自治系統邊界路由器,位於OSPF和非OSPF網絡之間。 在兩個AS之間一個路由器,主要用來傳送兩個自治系統間的路由的。設計
上面是簡單的示意圖,能夠看到ABR是不一樣區域間(Area)的邊界路由器,ASBR是不一樣自治系統(AS)間的邊界路由器。而DR和BDR是每一個網段間的路由器,我只標了Area 1區域網段的DR和BDR,其實每一個網段都有根據具體狀況選出本身的DR和BDR。注意:一個路由器能夠同時擔任多個角色,能夠同時是DR、ABR、ASBR。code
在講選舉方法前咱們須要,先了解一下Router ID。Router ID是OSPF區域內惟一標識路由器的IP地址。Router ID通常選取路由器loopback接口上數值最高的IP地址;若是沒有loopback接口,就在物理接口中選取IP地址最高的;或者咱們也可使用router-id命令直接指定Router ID。
(1)自動選舉
網段上Router ID最大的路由器將被選舉爲DR,第二大的將被選舉爲BDR。Router ID就是IP地址,通常IP地址的格式是aa.bb.cc.dd,咱們比較大小的話通常是從aa比起,若是不同大,直接選擇大的;若是同樣大,那麼就繼續比較bb、cc、dd直到比較出大小,選擇大的。
(2)手工選擇
咱們能夠經過設置路由器優先級,來設置DR、BDR。優先級範圍是0~255,數值越大優先級越高,通常默認爲1。若是優先級相同,則任須要比較Router ID。若是路由器的優先級被設置爲0,它將不參與DR和BDR的選舉。
注意:通常網段間的DR和BDR選舉完畢後,若是網段內再添加新的路由器Router ID比原有的DR和BDR更大,它也不會替代原有的DR和BDR。而OSPF系統啓動後,若40s內沒有新設備接入就會開始選舉。因此通常在現實環境中,第一個配置的路由器就會自動選舉爲DR,第二個爲BDR。
(3)OSPF的組播地址
224.0.0.5
224.0.0.6
(4)OSPF的度量值COST
COST=10的8次方/BW(帶寬)
(5)OSPF數據包
承載在IP數據包內,使用協議號爲89
爲了適應大型的網絡,OSPF在AS內劃分多個區域。每一個OSPF路由器只維護所在區域的完整鏈路狀態信息。每一個區域都有一個區域ID,能夠表示成一個十進制數字,也能夠表示成一個IP。每一個區域就如同一個獨立的網絡,該區域的OSPF路由器只保存該區域的鏈路狀態。每一個路由器的鏈路狀態數據庫均可以保持合理的大小,路由計算的時間、報文數量都不會過大。
骨幹區域(Area0):骨幹區域必須鏈接全部的非骨幹區域,並且骨幹區域不可分割,有且只有一個,通常狀況下,骨幹區域內沒有終端用戶。 其它區域都爲非骨幹區域,非骨幹區域分爲如下四類。
標準區域:非骨幹區域通常根據實際狀況而劃分,必須鏈接到骨幹區域(不規則區域也需經過tunnel或virtual-link鏈接到骨幹區域)。通常狀況下,費骨幹區域主要鏈接終端用戶和資源。
末梢區域(stub Area):存末梢區域是不接受自治系統之外的路由信息的區域。若是須要自治系統之外的路由,它使用默認路由0.0.0.0。
徹底末梢區域(Totally stubby Area):它不接受外部自治系統的路由以及自治系統內其餘區域的路由總結。須要發送到區域外的報文則使用默認路由:0.0.0.0。徹底末梢區域是思科本身定義的。
非存末梢區域(NSSA): 它相似於存末梢區域,可是容許接收以LSA Type 7發送的外部路由信息,而且要把LSA Type 7轉換成LSA Type 5。
(1)Hello包:10秒發送一次,死亡時間40s,固定是4倍關係,也能夠修改。用於發現和維持鄰居關係,選舉DR和BDR。
(2)數據庫描述包(DBD:Database Description ):僅僅是一個對本地數據庫的概念性敘述,供路由器覈對數據庫是否同步。
(3)鏈路狀態請求包(LSR:Link-State Request ):請求鏈路狀態,在數據庫同步過程當中使用,路由器在收到包含新信息的DBD後發送,用於請求更詳細的信息。
(4)鏈路狀態更新包(LSU:Link-State Update ):鏈路狀態更新,LSU包括幾種類型的LSA,LSU負責泛洪LSA,和相應LSR。LSA只會發送給以前以LSR請求的LSA的直連鄰居,進行泛洪的時候,鄰居路由負責把收到的LSA信息從新封裝在新的LSU中。
(5)鏈路狀態確認包(LSACK):鏈路狀態確認,路由器必須對每一個收到的LSA進行LSACK確認,但能夠用一個LSACK確認多個LSA。
(1)Down 狀態
(2)Init 狀態:發送了Hello包
(3)Two-way 狀態:收到對方回覆的Hello包且Hello包中包括本身的router-id
(4)Exstart 狀態:First DBD確認主從關係,router-id大的爲主,先發包
(5)Exchange 狀態:交互DBD 相互學習
(6)Loading 狀態:LSR與LSU的交互過程
(7)Full 狀態:交互完成
OSPF啓動的第一階段是使用Hello報文創建雙向通訊的過程:
OSPF啓動的第二個階段是創建徹底鄰接關係:
注意:在Two-Way狀態下會選出兩個Router ID最大的路由器,但不會肯定DR和BDR。DR和BDR是在ExStart狀態下肯定的。
(1)點到點網絡(Point-to-Point)
(2)廣播多路訪問網絡(Broadcast MultiAccess,BMA)
(3)非廣播多路訪問網絡(None Broadcast MultiAccess,NBMA)
(4)點到多點網絡(Point-to-Multipoint)
LSA Type 1:LSA 1是由區域內的路由器發出的LSA,類型爲路由器LSA(router LSA)。描述本區域路由器鏈路到該區域的狀態和代價(cost)。一個邊界路由器可能產生多個LSA 1。
LSA Type 2:由區域內DR發出,類型爲網絡LSA(network LSA)。含有鏈接某個區域路由器的全部鏈路狀態和代價信息。只有DR能夠監測該信息。
LSA Type 3:由ABR發出,類型爲網絡彙總LSA(summary LSA)。含有ABR與本地內部路由器鏈接信息,能夠描述本區域到主幹區域的鏈路信息。它一般彙總缺省路由而不是傳送彙總的OSPF信息給其餘網絡。
LSA Type 4:由ABR發出,類型爲ASBR彙總LSA(Summary LSA)。由主幹區域發送到其餘ABR, 含有ASBR的鏈路信息,與LSA 3的區別在於LSA 4描述到OSPF網絡的外部路由,而LSA 3則描述區域內路由。
LSA Type 5:由ASBR發出,類型爲AS外部LSA(AS External LSA。)含有關於自治域外的鏈路信息。除了末梢區域和徹底末梢區域,LSA Type 5在整個網絡中發送。
LSA Type 7:由NSSA區域內的ASBR發出,類型爲NSSA外部LSA(Not-So-Stubby LSA)。含有關於NSSA區域鏈接的外部路由信息。LSA 7能夠轉換爲LSA 5。
域內通訊量(Intra-Area Traffic)
單個區域內的路由器之間交換數據包構成的通訊量。
域間通訊量(Intra-Area Traffic)
不一樣區域的路由器之間交換數據包構成的通訊量。
外部通訊量(External Traffic)
OSPF域內的路由器與OSPF區域外或另外一個自治系統內的路由器之間交換數據包構成的通訊量。
show ip route //查看路由表信息(直連/學習) show ip route ospf //只查看OSPF學習到的路由 show ip protocol //查看OSPF協議配置信息 show ip ospf //查看OSPF是如何配置的以及ABR的信息 show ip ospf database //查看LSDB內的全部LSA數據信息 show ip ospf interface //查看接口上OSPF配置的信息 show ip ospf neighbor //查看OSPF鄰居和鄰接的狀態 show ip ospf neighbor detail //查看OSPF鄰居的詳細信息(包括DR/BDR) show ip ospf adj //查看路由器「鄰接」的整個過程 show ip ospf packet //查看每一個OSPF數據包的信息 clear ip route //清空路由表
(具體的實驗演示,我會寫在下一篇博客)