OSPF
思維導圖:
1. ospf基本原理
1.1 OSPF原理
原理:OSPF要求每臺運行OSPF的路由器都瞭解整個網絡的鏈路狀態信息,這樣才能計算出到達目的地的最優路徑。OSPF的收斂過程由鏈路狀態公告LSA(Link State Advertisement)
泛洪開始,LSA中包含了路由器已知的接口IP地址、掩碼、開銷和網絡類型等信息。收到LSA的路由器都可以根據LSA提供的信息建立自己的鏈路狀態數據庫LSDB(Link State Database)
,並在LSDB的基礎上使用SPF算法
進行運算,建立起到達每個網絡的最短路徑樹。最後,通過最短路徑樹得出到達目的網絡的最優路由,並將其加入到IP路由表中。
什麼叫鏈路(LINK) =路由器接口
什麼叫狀態(State) =描述接口以及其與鄰居路由器之間的關係
- OSPF是一種
基於鏈路狀態的路由協議
,它從設計上就保證了無路由環路。OSPF支持區域的劃分,區域內部的路由器使用SPF最短路徑算法保證了區域內部的無環路。OSPF還利用區域間的連接規則保證了區域之間無路由環路。 - OSPF支持
觸發更新
,能夠快速檢測並通告自治系統內的拓撲變化。 - OSPF可以解決網絡擴容帶來的問題。當網絡上路由器越來越多,路由信息流量急劇增長的時候,OSPF可以將每個自治系統劃分爲多個區域,並限制每個區域的範圍。OSPF這種分區域的特點,使得OSPF特別適用於大中型網絡。OSPF可以提供認證功能。OSPF路由器之間的報文可以配置成必須經過認證才能進行交換。
1.2 OSPF metric
- OSPF使用開銷cost作爲路由的
度量值
- 在每一個運行OSPF的接口上,都維護着一個接口COST,
接口COST=100M/接口帶寬
,其中100M爲OSPF的參考帶寬。 - 一條路由的COST由該路由從來路由的起源一路過來的所有入接口cost值的總和
1.3 Router-ID
- 用於在一個OSPF域中唯一地標識一臺路由器
- OSPF Router-ID的設定可以通過手工配置的方式,或者通過自動選取的方式。 自動選取的機制是:若有loopback口,則選最大的loopback口IP地址,若無則選活躍的物理接口中IP地址最大的作爲RouterID(
Router-ID不具有搶佔性
)
1.4 OSPF三張表
- 鄰居表(neighbor table):
OSPF用鄰居機制來發現和維持路由的存在,鄰居表存儲了雙向通信的鄰居關係OSPF路由器列表的信息。 - 拓撲數據庫(link-state database):
OSPF用LSA(link state Advertisement 鏈路狀態通告)來描述網絡拓撲信息,然後OSPF路由器用拓撲數據庫來存儲網絡的這些LSA。 - OSPF路由表(routing table):
對鏈路狀態數據庫進行SPF(Dijkstra)計算,而得出的OSPF路由表。
2. RIP與OSPF
2.1 RIP 的缺陷和OSPF改進
RIP特性 | 帶來的問題 | 優化或解決的方式 |
---|---|---|
逐跳收斂 | 收斂慢,故障恢復時間長 | “收到更新->計算路由->發送更新” 改爲“收到更新->發送更新->計算路由” |
傳聞路由更新機制 | 缺少對全局網絡拓撲的瞭解 | 路由器基於拓撲信息,獨立計算路由 |
最多有效跳數爲15 | 環形組網中,使遠端路由不可達 | 不限定跳數 |
以“跳數”爲度量 | 存在選擇次優路徑的風險 | 將鏈路帶寬作爲選路參考值 |
2.2 RIP與OSPF比較
2.2.1 相同點
- OSPF有兩個版本ospf-1(還未正式發佈就夭折)和ospf-2,RIP也是有兩個版本RIP-1和RIP-2;
- OSPF-2與RIP-2一樣是一種無類路由協議,支持VLSM、CIDR等特性;
- OSPF-2與RIP-2一樣都支持認證功能;
- RIP封裝在UDP報文中,OSPF封裝在IP報文中,UDP和IP都是一種無連接、不可靠的通信方式;
- RIP和OSPF協議報文的安全傳輸都是靠協議本身;
2.2.2 不同點☆☆☆
-
OSPF是基於鏈路狀態(Link-State)的路由協議,而RIP是基於距離矢量路與協議(二者的根本性差別);
-
RIP是一種“
傳話
”的方式來傳遞路由有關的路由信息,OSPF是以一種“宣告
”的方式,OSPF的收斂時間明顯小於RIP; -
RIP是一種“
嘈雜
”的路由協議,路由收斂後仍然週期性地持續地存在大量的RIP協議報文流量;OSPF是一種“安靜
”的路由協議,路由收斂後,OSPF網絡中只存在一小部分OSPF報文; -
RIP協議是以UDP作爲其傳輸層協議的,RIP是封裝在UDP報文中,端口號是520;
OSPF沒有傳輸層協議
,OSPF是直接封裝在IP報文中的; -
RIP報文有
兩種
:請求報文和響應報文;OSPF有五種
:hello報文、數據庫描述報文(DD)、鏈路狀態請求報文(LSR)、鏈路狀態更新報文(LSU)和鏈路狀態確認報文(LSAck); -
RIP以“
跳數
”來作爲路由開銷的定義,OSPF理論上可以採取任何參量作文開銷定義,最常見的就是採用鏈路帶寬來定義路由開銷; -
OSPF具有區域化結構,RIP沒有;
-
OSPF網路中路由器有角色之分,不同路由器有着不同的功能和作用,RIP沒有角色之分;
-
OSPF每臺路由器都有獨一無二的路由器身份號(Router-ID),在RIP網絡中是沒有Router-ID的;
3. OSPF區域化結構
OSPF支持將一組網段組合在一起,這樣的一個組合稱爲一個區域。一個OSPF網絡可以劃分成多個區域(Area)。如果一個OSPF網絡只包含一個區域就稱爲單區域OSPF網絡;如果一個OSPF網絡包含了多個區域稱爲多區域OSPF網絡。
- OSPF網絡中,如果一臺路由器所有接口都屬於同一個區域,則這樣的路由器被稱爲
內部路由器(Internal Router)
;- OSPF網絡中如果一臺路由器包含屬於Area 0 的接口,則這樣的路由器被稱爲
骨幹路由器(Backbone Router)
;- OSPF網絡中如果一臺路由器的某些接口屬於Area 0 ,其他接口屬於別的區域,則這樣的路由器被稱爲
區域邊界路由器(ABR)
;- 非骨幹區域之間通信必須要要通過骨幹區域中轉才能進行;
- 單區域只包含一個區域,這個區域必須是area 0;
-
劃分OSPF區域可以縮小路由器的LSDB規模,減少網絡流量;
-
區域內的詳細拓撲信息不向其他區域發送,區域間傳遞的是抽象的路由信息,而不是詳細的描述拓撲結構的鏈路狀態信息。**每個區域都有自己的LSDB,不同區域的LSDB是不同的。**路由器會爲每一個自己所連接到的區域維護一個單獨的LSDB。由於詳細鏈路狀態信息不會被髮布到區域以外,因此LSDB的規模大大縮小了;
-
在OSPF網絡中,每一個區域都有一個編號,稱爲Area-ID。Area 0爲骨幹區域,爲了避免區域間路由環路,非骨幹區域之間不允許直接相互發布路由信息。因此,每個區域都必須連接到骨幹區域;
-
運行在區域之間的路由器叫做區域邊界路由器
ABR(Area Boundary Router)
,它包含所有相連區域的LSDB。自治系統邊界路由器ASBR(Autonomous System Boundary Router)
是指和其他AS中的路由器交換路由信息的路由器,這種路由器會向整個AS通告AS外部路由信息;
4. OSPF支持的網絡類型
OSPF能夠支持的網絡類型,指的是OSPF能夠支持的二層網絡的類型,OSPF能夠支持廣播網絡、NBMA(Non-Boadcat Multi-Access)、點到點網絡(P2P)和點到多點網絡(P2MP)。
在廣播網絡和NBMA網絡中
注意:OSPF路由器的某個接口的類型是與該接口直接相連的二層網絡的類型是一致的。
比如,如果OSPF路由器某個接口連接的是一個廣播網絡,那麼該接口就是一個廣播接口;如果OSPF路由器某個接口連接的是一個P2P網絡,那麼該接口就是一個P2P網絡接口;
4.1 P2P網絡
- 僅兩臺路由互連。
- 支持廣播、組播。
4.2 廣播型網絡
廣播型網絡支持兩臺及兩臺以上的設備接入同一共享鏈路且可以支持廣播、組播報文的轉發,是OSPF最常見的網絡類型。
- 兩臺或兩臺以上的路由器通過共享介質互連。
- 支持廣播、組播。
廣播型網絡的例子:通過以太網鏈路相連的路由器網絡。
4.3 NBMA網絡
- 兩臺或兩臺以上路由器通過
VC互連
。 - 不支持廣播、組播☆☆☆。
與廣播型網絡不同的是NBMA網絡默認不支持廣播與組播報文的轉發。
NBMA方式要求網絡中的路由器組成全連接
在NBMA網絡上,OSPF模擬在廣播型網絡上的操作,但是每個路由器的鄰居需要
手動配置
。NBMA(non-broadcast multiple access)型網絡的例子:通過全互連的
幀中繼鏈路
相連的路由器網絡.
4.4 P2MP網絡
- 多個點到點網絡的集合。
- 支持廣播、組播☆☆☆。
- 將一個非廣播網絡看成是一組P2P網絡,這樣的非廣播網絡便成爲了一個點到多點(P2MP)網絡。在P2MP網絡上,每個路由器的OSPF鄰居可以使用
反向地址解析協議(Inverse ARP)
來發現。- P2MP可以看作是多個P2P的集合,P2MP可以支持廣播、組播的轉發。
- 沒有一種鏈路層協議默認屬於P2MP類型網絡,也就是說必須是由其他的網絡類型強制更改爲P2MP。常見的做法是將非完全連接的幀中繼或ATM改爲P2MP的網絡。
5. 鏈路狀態與LSA
OSPF是一種鏈路狀態協議,所謂的鏈路狀態,其實就是路由器的接口狀態。OSPF核心思想就是,每臺路由器都將自己的各個接口的接口狀態(即鏈路狀態)共享給其他路由器。
5.1 路由器接口狀態
- 該接口的IP地址及掩碼
- 該接口所屬區域的Area-ID
- 該接口所屬路由器的Router-ID
- 該接口的接口類型(也就是該接口的網絡類型,如P2P,廣播型)
- 該接口的接口開銷(通常以接口帶寬來定義接口開銷,帶寬越大,開銷越小)
- 該接口所屬的路由器的Router Priority(這個參數是用來選舉DR與BDR的)
- 該接口所在二層網絡中的DR
- 該接口所在二層網絡中的BDR
- 該接口的HelloDeadInterval(接口發送Hello報文的間隔時間)
- 該接口的RouterDeadInterval(實效時間)
- 該接口所有鄰居路由器
- 該接口認證類型
- 該接口祕鑰等等
5.2 LSA (鏈路狀態通告)
LSA(Link State Advertisement)
是路由器之間鏈路狀態信息的載體。LSA是LSDB的最小組成單位,也就是說LSDB由一條條LSA構成的。LSA有十幾種類型
;
所有的LSA都擁有相同的頭部,關鍵字段的含義如下:
- LS age:此字段表示LSA已經
生存的時間
,單位是秒。 - LS type:此字段標識了LSA的格式和功能。常用的LSA類型有五種。
- Link State ID:此字段是該LSA所描述的那部分鏈路的標識,例如Router ID等。
- Advertising Router:此字段是產生此LSA的路由器的Router ID。
- LS sequence number:此字段用於檢測舊的和重複的LSA。
Type-1 LSA(Router LSA);
Type-2 LSA(Network LSA);
Type-3 LSA(Network Summary LSA);
Type-4 LSA(ASBR Summary LSA);
Type-5 LSA(ASExternal LSA);
…
- 不同類型的LSA中所包含的鏈路狀態的內容是不相同的;
- 不同類型的LSA的功能和作用也是不相同的;
- 不同類型的LSA通告範圍也是不相同的;
- 不同角色的路由器能夠產生的LSA的類型也是不同的;
5.2.1 Type-1 LSA
-
每臺路由器都會產生。Type-1LSA用來描述路由器各個接口的接口類型、IP地址、開銷值等信息。
-
一個Type-1LSA只能在產生它的Area 內泛洪,不能泛洪到其他Area。
5.2.2 Type-2 LSA
- 由DR產生。主要用來描述該DR所在的二層網絡的網絡掩碼以及該二層網絡中總共包含哪些路由器你。
- 一個Type-2LSA只能在產生他的Area內泛洪,不能泛洪到其他區域。
5.2.3 Type-3 LSA
- 由ABR產生。ABR路由器將自己所在的多個Area中的Type-1和Type-2 LSA轉換成爲Type-3 LSA,這些Type-3 LSA描述了Area之間的路由信息。
- Type-3可以泛洪到這個自治系統(整個OSPF網絡)內部,但是不能泛洪到Totally Stub Area和Totally Not-So-Stubby Area。
5.2.4 Type-4 LSA
- 由ASBR產生所在的Area的ABR產生。用來描述去往ASBR的路由信息。
- Type-4可以泛洪到整個自治系統(整個OSPF網絡)內部,但是不能泛洪到Stub Area、Totally Stub Area、NOt-So-Stubby Area和Totally NOt-So-Stubby Area
5.2.5 Type-5 LSA
- 由ASBR產生。用來描述去往自治系統外部的路由。
- Type-5 LSA可以泛洪到整個自治系統(整個OSPF網絡)內部,但是不能泛洪到Stub Area、Totally Stub Area、NOt-So-Stubby Area和Totally NOt-So-Stubby Area
6. OSPF報文類型
OSPF的協議報文是直接封裝在IP報文中
的,IP報文頭部中的協議字段必須爲89
。
OSPF 本身5種類型,分別是Hello報文、DD報文、LSR報文、LSU報文、LSAck報文,各種不同類型的LSA其實只是包含在LSU報文中
。
其他類型的OSPF報文中雖然沒有攜帶LSA,但是仍然會攜帶一些鏈路狀態信息,當然也會攜帶一些其他的信息。
Type | 報文名稱 | 報文功能 |
---|---|---|
1 | Hello | 發現和維護鄰居關係 |
2 | Database Description | 交互鏈路狀態數據庫摘要 |
3 | Link State Request | 請求特定的鏈路狀態信息 |
4 | Link State Update | 發送詳細的鏈路狀態信息 |
5 | Link State Ack | 發送確認報文 |
6.1OSPF協議報文頭部
- Version :對於當前所使用的OSPFv2,該字段的值爲2。
- Type:OSPF報文類型。
- Packet length:表示整個OSPF報文的長度,單位是字節。
- Router ID:表示生成此報文的路由器的Router ID。
- Area ID:表示此報文需要被通告到的區域。
- Checksum:校驗字段,其校驗的範圍是整個OSPF報文,包括OSPF報文頭部。
- Auth Type:爲
0時表示不認證
;爲1時表示簡單的明文密碼認證
;爲2時表示加密(MD5)認證
。- Authentication:認證所需的信息。該字段的內容隨AuType的值不同而不同。
6.2 路由器接口hello報文信息
Hello報文的作用:
- 鄰居發現:自動發現鄰居路由器,並建立相鄰關係,通過
組播地址:224.0.0.5
發送給ALLSPFRouters,通告兩臺路由器建立相鄰關係所必需統一的參數 - 鄰居建立:完成Hello報文中的參數協商,建立鄰居關係。
- 鄰居保持:通過
Keepalive機制
,檢測鄰居運行狀態。
- OSPF的版本號
- 該接口所屬的路由器的Router-ID
- 該接口所屬的區域ID
- 該接口的認證類型
- 該接口的祕鑰
- 該接口的IP地址和掩碼
- 該接口所屬的路由器的Router Priority(這個參數是用來選舉DR與BDR的)
- 該接口所在二層網絡中的DR
- 該接口所在二層網絡中的BDR
- 該接口的HelloDeadInterval(接口發送Hello報文的間隔時間)
- 該接口的RouterDeadInterval(實效時間)
- 該接口所有鄰居路由器
7.鄰居關係與鄰接關係
在RIP網絡中,如果路由器A與路由器B位於同一個二層網絡,那麼就說路由器A與路由器B是“鄰居關係”;
在OSPF網絡中,如果路由器A與路由器B位於同一個二層網絡,只能說路由器A與路由器B“相鄰”,不能說是“鄰居關係”。相鄰不等於鄰居關係更不等於“鄰接關係”
運行OSPF的路由器之間需要交換鏈路狀態信息和路由信息,在交換這些信息之前路由器之間首先需要建立鄰接關係
。
7.1 鄰居關係
OSPF路由器啓動後,便會通過OSPF接口向外發送Hello報文
用於發現鄰居。收到Hello報文的OSPF路由器會檢查報文中所定義的一些參數,如果雙方的參數一致,就會彼此形成鄰居關係,狀態到達2-way 即可稱爲建立了鄰居關係。如果參數不一致,不能形成鄰居關係。
7.1.1 鄰居發現
Hello報文用來發現和維持OSPF鄰居關係
Hello報文的作用:
- 鄰居發現:自動發現鄰居路由器。
- 鄰居建立:完成Hello報文中的參數協商,建立鄰居關係。
- 鄰居保持:通過
Keepalive機制
,檢測鄰居運行狀態。
- Network Mask:發送Hello報文的接口的網絡掩碼。
- Hello Interval:發送Hello報文的
時間間隔
,單位爲秒。 - Options:標識發送此報文的OSPF路由器所支持的可選功能。
- Router Priority:發送Hello報文的
接口的Router Priority
,用於選舉DR和BDR。 - Router Dead Interval:
失效時間
。如果在此時間內未收到鄰居發來的Hello報文,則認爲鄰居失效;單位爲秒,通常爲四倍Hello Interval。 - Designated Router:發送Hello報文的路由器所選舉出的
DR的IP地址
。如果設置爲0.0.0.0,表示未選舉DR路由器。 - Backup Designated Router:發送Hello報文的路由器所選舉出的
BDR的IP地址
。如果設置爲0.0.0.0,表示未選舉BDR。 - Neighbor:
鄰居的Router ID列表
,表示本路由器已經從這些鄰居收到了合法的Hello報文。
7.1.2 鄰居關係建立
狀態含義:
狀態 | 含義 |
---|---|
Down | 這是鄰居的初始狀態,表示沒有從鄰居收到任何信息 |
Init | 在此狀態下,路由器已經從鄰居收到了Hello報文,但是自己的Router ID不在所收到的Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關係 。 |
2- Way | 在此狀態下,路由器發現自己的Router ID存在於收到的Hello報文的鄰居列表中,已確認可以雙向通信 。 |
鄰居建立過程如下:
- RTA和RTB的Router ID分別爲1.1.1.1和2.2.2.2。當RTA啓動OSPF後,RTA會發送第一個Hello報文。此報文中
鄰居列表爲空
,此時狀態爲Down
,RTB收到RTA的這個Hello報文,狀態置爲Init。 - RTB發送Hello報文,此報文中鄰居列表爲空,RTA收到RTB的Hello報文,狀態置爲
Init
。 - RTB向RTA發送鄰居列表爲1.1.1.1的Hello報文,RTA在收到的Hello報文鄰居列表中發現自己的Router ID,狀態置爲
2-way
。 - RTA向RTB發送鄰居列表爲2.2.2.2的Hello報文,RTB在收到的Hello報文鄰居列表中發現自己的Router ID,狀態置爲
2-way
。
因爲鄰居都是未知的,所以Hello報文的目的IP地址不是某個特定的單播地址。鄰居從無到有,OSPF採用組播的形式發送Hello報文(目的地址224.0.0.5
)。
對於不支持組播的網絡可以通過手動配置實現鄰居的發現與維護。
7.2 鄰接關係
形成鄰居關係的雙方不一定都能形成鄰接關係,這要根據網絡類型而定。只有當雙方成功交換DD報文,並同步LSDB後,才形成真正意義上的鄰接關係。
7.2.1 鄰接關係的建立(LSDB同步)
狀態含義:
狀態 | 含義 |
---|---|
ExStart | 鄰居狀態變成此狀態以後,路由器開始向鄰居發送DD報文 。Master/Slave關係是在此狀態下形成的,初始DD序列號也是在此狀態下確定的。在此狀態下發送的DD報文不包含鏈路狀態描述。 |
Exchange | 在此狀態下,路由器與鄰居之間相互發送包含鏈路狀態信息摘要的DD報文。 |
Loading | 在此狀態下,路由器與鄰居之間相互發送LSR報文、LSU報文、LSAck報文。 |
Full | LSDB同步過程完成,路由器與鄰居之間形成了完全的鄰接關係。 |
LSDB同步過程如下:
- RTA和RTB的Router ID分別爲1.1.1.1和2.2.2.2並且二者已建立了鄰居關係。當RTA的鄰居狀態變爲
ExStart
後,RTA會發送第一個DD報文
。此報文中,DD序列號被隨機設置爲X,I-bit設置爲1,表示這是第一個DD報文,M-bit設置爲1,表示後續還有DD報文要發送,MS-bit設置爲1,表示RTA宣告自己爲Master。 - 當RTB的鄰居狀態變爲
ExStart
後,RTB會發送第一個DD報文。此報文中,DD序列號被隨機設置爲Y(I-bit=1,M-bit=1,MS-bit=1,含義同上)。由於RTB的Router ID較大,所以RTB將成爲真正的Master。收到此報文後,RTA會產生一個Negotiation-Done事件
,並將鄰居狀態從ExStart變爲Exchange。 - 當RTA的鄰居狀態變爲
Exchange
後,RTA會發送一個新的DD報文,此報文中包含了LSDB的摘要信息,序列號設置爲RTB在步驟2中使用的序列號Y,I-bit=0,表示這不是第一個DD報文,M-bit=0,表示這是最後一個包含LSDB摘要信息的DD報文,MS-bit=0,表示RTA宣告自己爲Slave。收到此報文後,RTB會產生一個Negotiation-Done事件
,並將鄰居狀態從ExStart變爲Exchange
。 - 當RTB的鄰居狀態變爲Exchange後,RTB會發送一個新的DD報文,此報文包含了LSDB的摘要信息,DD序列號設置爲Y+1, MS-bit=1,表示RTB宣告自己爲Master。
- 雖然RTA不需要發送新的包含LSDB摘要信息的DD報文,但是作爲Slave,RTA需要對Master發送的每一個DD報文進行確認。所以,RTA向RTB發送一個新的DD報文,序列號爲Y+1,該報文內容爲空。發送完此報文後,RTA產生一個
Exchange-Done事件
,將鄰居狀態變爲Loading。RTB收到此報文後,會將鄰居狀態變爲Full(假設RTB的LSDB是最新最全的,不需要向RTA請求更新)。 - RTA開始向RTB發送
LSR報文
,請求那些在Exchange狀態下通過DD報文發現的、並且在本地LSDB中沒有的鏈路狀態信息。 - RTB向RTA發送
LSU報文
,LSU報文中包含了那些被請求的鏈路狀態的詳細信息。RTA在完成LSU報文的接收之後,會將鄰居狀態從Loading變爲Full。 - RTA向RTB發送
LSAck報文
,作爲對LSU報文的確認。RTB收到LSAck報文後,雙方便建立起了完全的鄰接關係
。
7.2.2 P2P網絡和P2MP網絡
- 如果兩臺鄰居路由器之間的二層網絡是P2P網絡或P2MP網絡,則這兩臺鄰居路由器之間一定會進入LSDB同步的過程;
- 當這兩臺路由器之間完成了LSDB同步的過程說明他們之間建立了鄰接關係,彼此之間成爲了對方的
鄰接路由器
; - LSDB同步的過程是爲了保證參與LSDB同步的路由器最終能夠擁有
完全一樣的LSDB
。 - LSDB同步是交互
DD報文,LSR報文和LSU報文
來實現的;
7.2.3 Broadcast網絡和NBMA網絡
-
如果兩臺鄰居路由器之間的二層網絡是P2P網絡或P2MP網絡,並且其中一臺路由器是這個而層網絡的DR或BDR,那麼這兩臺鄰居路由器一定會進入彼此之間的LSDB同步的過程;
-
當這兩臺路由器之間完成了LSDB同步之後,他們之間建立了鄰接關係;
-
如果這兩臺路由器都不是這個二層網絡的DR或BDR,那麼這兩臺路由器就不會進入彼此之間的LSDB的同步過程,也就是說,彼此之間是不可能建立起鄰居關係;
-
一個OSPF網絡中的鄰接關係一定是小於等於鄰居關係的;
7.3 OSPF鄰居關係狀態機
- Down:這是鄰居的初始狀態,表示沒有從鄰居收到任何信息。在NBMA網絡上,此狀態下仍然可以向靜態配置的鄰居發送Hello報文,發送間隔爲PollInterval,通常和Router DeadInterval間隔相同。
- Attempt:此狀態
只在NBMA網絡上存在
,表示沒有收到鄰居的任何信息,但是已經週期性的向鄰居發送報文,發送間隔爲HelloInterval。如果Router DeadInterval間隔內未收到鄰居的Hello報文,則轉爲Down狀態。 - Init:在此狀態下,路由器已經從鄰居收到了Hello報文,但是自己不在所收到的Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關係。在此狀態下的鄰居要被包含在自己所發送的Hello報文的鄰居列表中。
- 2-Way Received:此事件表示路由器發現與鄰居的雙向通信已經開始(發現自己在鄰居發送的Hello報文的鄰居列表中)。Init狀態下產生此事件之後,如果需要和鄰居建立鄰接關係則進入ExStart狀態,開始數據庫同步過程,如果不能與鄰居建立鄰接關係則進入2-Way。
- 2-Way:在此狀態下,雙向通信已經建立,但是沒有與鄰居建立鄰接關係。這是建立鄰接關係以前的最高級狀態。
- 1-Way Received:此事件表示路由器發現自己沒有在鄰居發送Hello報文的鄰居列表中,通常是由於對端鄰居重啓造成的。
- ExStart:這是形成鄰接關係的第一個步驟,鄰居狀態變成此狀態以後,路由器開始向鄰居發送DD報文。主從關係是在此狀態下形成的;初始DD序列號是在此狀態下決定的。在此狀態下發送的DD報文不包含鏈路狀態描述。
- Exchange:此狀態下路由器相互發送包含鏈路狀態信息摘要的DD報文,描述本地LSDB的內容。
- Loading:相互發送LS Request報文請求LSA,發送LS Update通告LSA。
- Full:兩臺路由器的LSDB已經同步。
8. DR與BDR
在P2P或P2MP網絡中完全不存在DR與BDR的概念,DR與BDR只適用於Broadcast網絡或NBMA網絡。
網絡類型 | 是否和鄰居建立鄰接關係 |
---|---|
P2P / P2MP | 是 |
Broadcast / NBMA | DR與BDR 、DRother建立鄰接關係——BDR與DR 、DRother建立鄰接關係 ——DRother之間只建立鄰居關係 |
8.1 DR與BDR的作用
- 每一個含有至少兩個路由器的廣播型網絡和NBMA網絡都有一個DR和BDR。
- DR和BDR可以減少鄰接關係的數量,從而減少鏈路狀態信息以及路由信息的交換次數,這樣可以
節省帶寬
,降低對路由器處理能力的壓力。在沒有DR的廣播網絡上,鄰接關係的數量可以根據公式n(n-1)/2計算出,n代表參與OSPF的路由器接口的數量。 - BDR作用:當DR發生故障的時候,BDR能夠迅速代替DR的角色;
8.2 DR與BDR的選舉
- 在鄰居發現完成之後,路由器會根據網段類型進行DR選舉。在廣播和NBMA網絡上,路由器會根據參與選舉的每個接口的優先級進行DR選舉。
- 優先級取值範圍爲
0-255
,值越高越優先。缺省情況下,接口優先級爲1
。**如果一個接口優先級爲0,那麼該接口將不會參與DR或者BDR的選舉。**如果優先級相同時,則比較Router ID,值越大越優先被選舉爲DR。(越大越優先) - BDR與DR的選舉規則是一樣的,同一個網絡中同一臺路由器 不會即作爲DR又作爲BDR;
- DR與BDR具有非搶佔性。爲了維護網絡上鄰接關係的穩定性,如果網絡中已經存在DR和BDR,則新添加進該網絡的路由器不會成爲DR和BDR,不管該路由器的Router Priority是否最大。如果當前DR發生故障,則當前BDR自動成爲新的DR,網絡中重新選舉BDR;如果當前BDR發生故障,則DR不變,重新選舉BDR;
- 實質上,DR與BDR只是路由器的某個接口的屬性,而不是路由器本身的屬性;