您好,登錄后才能下訂單哦!
OSPF鄰接關系建立過程剖析
在OSPF網絡中,為了交換路由信息,鄰居設備之間首先要建立鄰接關系,鄰居(Neighbors)關系和鄰接(Adjacencies)關系是兩個不同的概念。
鄰居關系:OSPF設備啟動后,會通過OSPF接口向外發(fā)送Hello報文,收到Hello報文的OSPF設備會檢查報文中所定義的參數,如果雙方一致就會形成鄰居關系,兩端設備互為鄰居。
鄰接關系:形成鄰居關系后,如果兩端設備成功交換DD報文和LSA,才建立鄰接關系。
OSPF狀態(tài)機
OSPF共有8種狀態(tài)機,分別是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。
1、Down:鄰居會話的初始階段,表明沒有在鄰居失效時間間隔內收到來自鄰居路由器的Hello數據包。
2、Attempt:該狀態(tài)僅發(fā)生在NBMA網絡中,表明對端在鄰居失效時間間隔(dead interval)超時后仍然沒有回復Hello報文。此時路由器依然每發(fā)送輪詢Hello報文的時間間隔(poll interval)向對端發(fā)送Hello報文。
3、Init:收到Hello報文后狀態(tài)為Init。
4、2-way:收到的Hello報文中包含有自己的Router ID,則狀態(tài)為2-way;如果不需要形成鄰接關系則鄰居狀態(tài)機就停留在此狀態(tài),否則進入Exstart狀態(tài)。
5、Exstart:開始協商主從關系,并確定DD的序列號,此時狀態(tài)為Exstart。
6、Exchange:主從關系協商完畢后開始交換DD報文,此時狀態(tài)為Exchange。
7、Loading:DD報文交換完成即Exchange done,此時狀態(tài)為Loading。
8、Full:LSR重傳列表為空,此時狀態(tài)為Full。
OSPF鄰接關系建立過程圖解:
注:此圖為網圖,諒解博主懶病犯了。哈哈。。
鄰接關系建立過程詳解(Broadcast類型):【對比著圖更容易理解哦】
1、在Down狀態(tài)下路由器發(fā)出第一個hello包。當R2收到一個Hello包,并且在這個hello包中看不到自已的ID,則將自已和鄰居的關系轉到Init狀態(tài)。Init是一個one way 狀態(tài),當R1和R2都認識對方后就會進入2-Way狀態(tài)。
2、當收到包含自己router-id的hello包時,將自己和鄰居的狀態(tài)置為2-way。在Two Way時,將選舉DB/BDR(MA網絡)。進入Two way狀態(tài)后(即從Exstart開始),表示這兩個路由器已經建立了鄰居關系了。但最終能不能鄰接關系要看最后是不是FULL。
3、Exstart:Exstart交互的是firstDBD,主要是用于選舉主從關系(router-id大的為主),確定接下來DD報文的序列號(用主的序列號),為lsdb同步做準備。
進入Exstart狀態(tài)后,R1和R2分別向對方發(fā)送firstDBD報文,并將I位置為1,代表是第一個DBD報文;M位置為1,代表不是最后一個DBD報文;MS位置為1,最初會自己認為自己是主。當收到對方的first DBD報文后,通過router-id選舉出主從,由主來決定seq的值。
根據上圖中能看到第二個DBD報文中包含seq值,第一個報文的seq值為n+1,以此類推。當主發(fā)送以此DBD報文,從必須給予一次回復,這是由于OSPF是基于IP的,沒有確認機制,需要seq做隱式確認,保證了可靠性。
4、Exchange: Exchange是通過DBD交換LSA的頭部信息。
5、Loading:等待收到M位為0的DD報文時,才進入loading。
進入Loading之后,R1開始向R2發(fā)送LS request報文,請求那些在Exchange狀態(tài)下通過DD報文發(fā)現的,而且在本地LSDB中沒有的鏈路狀態(tài)信息。R2收到LS Request報文之后,向R1發(fā)送LS Update報文,在LS Update報文中,包含了那些被請求的鏈路狀態(tài)的詳細信息。R1收到LS Update報文之后,R1向R2發(fā)送LS Ack報文,確保信息傳輸的可靠性。
6、FULL:lsdb同步完成,鄰接關系的完整建立。
OSPF報文類型:
OSPF共有5類報文,分別為Hello、DD、LSR、LSU、LSAck,以下為博主實驗抓包現像剖析內容及作用。
Hello報文:建立和維持鄰居關系
DBD報文:分為first DBD報文和DBD報文。
1、First DBD報文不攜帶LSA頭部,通過firstDBD確認主從關系,主的作用只是為了控制序列號的同步。主從選舉方式為Router-ID高的將成為主。
2、DBD報文只攜帶LAS的頭部信息,沒有攜帶LAS的具體信息。承載完整LAS是LASUpdate包。
LS Resquest報文:是不攜帶LAS頭部的,只通過(公告ID,LSA L類型,linkID)來請求具體的條目。
LS Update報文:含有真正LSA完整信息的,用來回應LSRequest。
LSAck報文:對LSU的確認
路由更新
當鄰接關系建立完成后,后面發(fā)生路由更新,路由器之間的處理流程:
注釋:在廣播型網絡中,DRothers只和DR、BDR形成鄰接關系,因此更新數據包將發(fā)送到組播地址224.0.0.6,相應的DR路由器也將以組播方式發(fā)送包含LSA的更新包到網絡上所有與之建立關系的路由器,此時的組播地址為224.0.0.5。接著,所有路由將從所有其他的接口上泛洪擴散LSA。雖然BDR路由器也使用組播方式收到和記錄了來自DRothers路由器的LSA通告,但是它不會再重復泛洪擴散或者確認這些LSA,除非DR路由器失效了它才會這么做。
在NBMA網絡上存在同樣的DR/BDR的功能特性,只是LSA是以單播方式從DRothers路由器發(fā)送給DR和BDR的,并且DR路由器也是以單播方式發(fā)送該LSA的拷貝到所有與之建立鄰接關系的鄰居路由器的。
第一步:
更新路由器以組播方式(224.0.0.6)向DR、BDR發(fā)送更新數據包
第二步:
DR通過組播方式(224.0.0.5)向每一個與之建立鄰接關系的路由器發(fā)送包含LSA的更新包
第三步:
所有路由將從所有其他的接口上泛洪擴散LSA
若鄰居關系建立不起來,出現的疑難雜癥
若鄰居關系無法建立,當然從建立鄰居關系的過程分析,到2-way狀態(tài)就可以證明鄰居關系已經建立,中間一般出現問題會停留在init狀態(tài)。Hello報文可能影響的因素有如下幾點:
1、路由器ID
2、接口的區(qū)域ID
3、接口的地址掩碼(MA網絡):Broadcast、NBMA、P2MP都會檢查掩碼
4、接口的認證:認證后面分出來細講,請關注
5、接口的hello時間和dead時間:dead時間是hello時間的4倍
6、option字段:E位和N位,E位置為1,代表普通區(qū)域,;N位置為1,代表NSSA區(qū)域
根據hello報文解析:
從上面圖中可以看到箭頭位置都會影響到鄰居關系的建立,由于鄰居關系的建立中只會涉及到hello報文,所以基本上可能影響到的都概括了。
若出現鄰接關系建立不了的原因呢?
1、MTU值不一致
華為默認是不檢查MTU的,在DD報文中查看MTU值為0。抓包可以看到,箭頭標識:
從抓包可以看到接口MTU值為0,但接口MTU值默認為1500,這里設為0,代表不檢測MTU。從ensp中查看路由器接口可以看到,截圖如下:
若華為設備需要OSPF鄰接關系建立檢查MTU值,怎么辦?
在接口下開啟ospf mtu-enable即可,注意兩端接口都需開啟哦。
開啟之后,再抓包查看:
發(fā)現DD報文中接口MTU值為1500了。
若開啟接口MTU檢查后,MTU值不一樣的話OSPF鄰接關系將無法建立,卡在exstart狀態(tài)下。因為OSPF沒有定義任何分片方式,只能依賴IP包分片。如果沒規(guī)定MTU一致性的話,發(fā)送發(fā)的數據包(通常是LSU)一旦過大,超過接收方最大能接收的數據包大小,就會在接收方這里丟包。
2、NBMA類型下沒有寫broadcast;(現實環(huán)境中幀中繼的環(huán)境已經少之又少了)
下一章 OSPF詳解三之OSPF LSA詳解
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。