在學習OSPF鄰接關系前需要先了解OSPF的幾種接口狀態及鄰居狀態。
1.OSPF路由器接口狀態
以太網中OSPF路由器接口狀態分為6種:
1、 Down狀態,運行OSPF的接口初始化的狀態。
Down接口狀態
2、Waiting狀態,路由器接口正在競選DR、BDR的狀態。競選DR與BDR將于waiting time時間周期內完成,若DR與BDR已經競選完成后加入的ospf路由器將不會重新選舉DR與BDR。
Waiting接口狀態
3、 DR狀態,路由器成為所連網絡的DR,并將和所有鄰居路由器建立鄰接關系。
DR接口狀態
4、 BDR狀態,路由器成為接口所連網絡的BDR,并將和所有鄰居路由器建立鄰接關系。
BDR接口狀態
5、 DRother狀態,所連網絡中除DR與BDR外剩余路由器接口,僅僅會和所連網絡上的DR和BDR建立鄰接關系。DRother之間不會建立鄰接關系。
DROTHER接口狀態
6、Loopback,loopback接口的狀態。
loopback接口狀態
注:由于OSPF是一種接口敏感性協議,所以一臺路由器所在不同區域的接口可能會是不同的接口狀態。
同區域的接口可能呈現不同的接口狀態
此外,在點對點網絡環境中還有point to point接口狀態,此狀態為運行OSPF的點對點接口開始發送Hello報文,并嘗試和對端的路由器建立鄰接關系。
point to point接口狀態
2.OSPF路由器鄰居狀態
以太網中OSPF路由器鄰居狀態分為7種:
1、 Down狀態:鄰居狀態機的初始狀態,是指在之前的Dead-Interval時間(在以太網環境中,默認的Dead-Interval時間為Hello-Interval的4倍,即40秒)內沒有收到對方的Hello報文。
2、 Init狀態:此狀態表示此設備已經收到了鄰居的HELLO報文,但鄰居并沒有收到我發的HELLO報文。(鄰居發來的HELLO報文中列出的鄰居里沒有包含我的Router ID)。
Down鄰居狀態
3、2-Way狀態:此狀態表示鄰居之間雙方互相收到了對方發送的HELLO報文,建立了鄰居關系(并非鄰接關系)。在以太網環境中DROTHER之間狀態將一直維持在2-Way狀態。
2-Way鄰居狀態
4、 ExStart狀態:此狀態標識鄰居之間交互協商DBD報文,協商鄰居主從關系及以哪臺設備的序列號為基準發送報文,主從關系的作用在于后續同步LSA時哪臺設備為主動。
5、 Exchange狀態:本機及鄰居路由器將LSDB中的LSA數據的索引信息使用DBD報文來描述,并互相發送給對方。接收到DBD報文的一方將從ExStart狀態轉換為Exchange狀態。
6、 Loading狀態:在互相收到對方的DBD報文后與本地LSDB進行匹配,若相同則進入FULL狀態,若有缺失LSA條目,路由器將停留在Loading狀態,發送LSR報文向鄰居請求發送本地缺失的LSA信息,直到收到對方的DBD報文后與本地LSDB進行匹配相同后進入FULL狀態。
7、 Full狀態:此狀態表示鄰居路由器的LSDB中所有的LSA本路由器已全部學習到,即同區域鄰居的LSDB與本機LSDB完全相同。此時,本機路由器和鄰居路由器建立了鄰接關系。
FULL鄰居狀態
此外,在NBMA網絡中還會有attempt狀態,即本地路由器通過手動配置的鄰居信息嘗試發送HELLO報文但沒有收到回復信息時路由器的狀態。
attempt鄰居狀態
3. 以太網中OSPF如何建立鄰接關系?
OSPF建立鄰接關系分為三步:第一步為鄰居發現與建立鄰居關系,第二步為路由發現與建立鄰接關系,第三步為同步LSDB。
以太網屬于BMA網絡,即需要競選DR與BDR,所有DROTHER與DR和BDR建立鄰接關系,DROTHER之間只建立鄰居關系。
下面將通過圖文的方式分三步講述以太網中OSPF如何建立鄰接關系。
3.1 第一步:鄰居發現與建立鄰居關系
鄰居關系為運行OPSF的設備接口間兩兩建立,下圖為一對鄰居建立的過程。
在一個未知的以太網網絡環境中,路由器A向網絡中組播發送hello報文。
HELLO報文尋找鄰居
路由器B收到路由器A發來的HELLO報文。
HELLO報文尋找鄰居
路由器B響應路由器A的HELLO報文。
響應HELLO報文
路由器A確認收到路由器B發送的HELLO報文。至此A與B的鄰居狀態為2-WAY,即建立鄰居關系。
根據上述的鄰居建立過程,路由器A、B、C、D又兩兩之間互相建立了鄰居關系,開始競選DR和BDR。
競選DR與BDR
競選DR與BDR首先需要看OSPF接口的優先級。最高的成為DR,次高的成為BDR。優先級為0的路由器不參與DR與BDR的競選,直接成為DROTHER。
由于路由器接口默認的OSPF優先級值為均為1,所以Router-ID最大的將成為DR,次大的將成為BDR。
當一個OSPF區域中的DR與BDR競選完成后,接口狀態將脫離wating,變為DR、BDR或DROTHER狀態,此時再有更高優先級的接口進去該區域將不會搶占DR和BDR的地位。如果DR出現故障則BDR成為DR,重新選舉BDR;如果BDR出現故障則重新選舉BDR。
競選DR與BDR完成
3.2 第二步:路由發現與建立鄰接關系
由于以太網網絡下OSPF建立鄰接關系僅為DR與BDR、DROTHER與DR和BDR之間,DROTHER與DROTHER僅保持鄰居關系。
以太網網絡下鄰接關系
下圖用一對鄰接關系來解釋鄰接之間發現路由的過程:
鄰接關系協商主從關系:
協商主從關系
交換DBD索引報文:
交換DBD索引報文
3.3 第三步:同步LSDB
下圖用一對鄰接關系來解釋鄰接之間同步LSDB的過程:
同步LSDB分以下兩種情況:
第一種:在交換完最后一個DBD分組索引報文后(M標志位為0),若發現鄰居發來的所有DBD分組報文中所含的所有索引內容都與本地LSDB中內容相同。OSPF鄰居狀態變為FULL狀態。
同步LSDB
第二種:在交換完最后一個DBD分組索引報文后(M標志位為0),若發現鄰居發來的DBD分組報文中有索引內容與本地LSDB中內容不相同,如果LSDB中LSA信息少于或舊于(LSA序列號用于判斷LSA信息的新老程度)DBD報文索引內容,則OSPF鄰居狀態變為loading狀態后,向鄰居發送LSR分組報文對缺失或未更新的LSA進行請求,鄰居收到LSR分組報文后發送LSU分組報文將缺失LSA信息發給本端,本端收到LSU更新分組報文后向鄰居發送LSACK確認分組報文后進入FULL狀態。
同步LSDB
OSPF報文類型及作用在之前的原創文章中有講述,鏈接如下:
干貨分享:OSPF是什么?OSPF基礎知識及五種報文類型解析
以上內容均為本人對所掌握知識總結歸納所創作的原創文章,希望能給大家的學習過程帶來幫助,如有技術理解錯誤希望能夠得到大家的指正,大家共同學習,共同進步。