一、鄰居關(guān)系建立
狀態(tài)含義:
Down:這是鄰居的初始狀態(tài),表示沒有從鄰居收到任何信息。
Init:在此狀態(tài)下,路由器已經(jīng)從鄰居收到了Hello報文,但是自己的Router ID不在所收到的Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關(guān)系。
2-Way:在此狀態(tài)下,路由器發(fā)現(xiàn)自己的Router ID存在于收到的Hello報文的鄰居列表中,已確認(rèn)可以雙向通信。
鄰居建立過程如下:
1、RTA和RTB的Router ID分別為1.1.1.1和2.2.2.2。當(dāng)RTA啟動OSPF后,RTA會發(fā)送第一個Hello報文。此報文中鄰居列表為空,此時狀態(tài)為Down,RTB收到RTA的這個Hello報文,狀態(tài)置為Init。
2、RTB發(fā)送Hello報文,此報文中鄰居列表為空,RTA收到RTB的Hello報文,狀態(tài)置為Init。
3、RTB向RTA發(fā)送鄰居列表為1.1.1.1的Hello報文,RTA在收到的Hello報文鄰居列表中發(fā)現(xiàn)自己的Router ID,狀態(tài)置為2-way。
4、RTA向RTB發(fā)送鄰居列表為2.2.2.2的Hello報文,RTB在收到的Hello報文鄰居列表中發(fā)現(xiàn)自己的Router ID,狀態(tài)置為2-way。
因為鄰居都是未知的,所以Hello報文的目的IP地址不是某個特定的單播地址。鄰居從無到有,OSPF采用組播的形式發(fā)送Hello報文(目的地址224.0.0.5)。
二、LSDB同步(一)
狀態(tài)含義:
ExStart(信息交換初始狀態(tài)):鄰居狀態(tài)變成此狀態(tài)以后,路由器開始向鄰居發(fā)送DD報文。Master/Slave關(guān)系是在此狀態(tài)下形成的,初始DD序列號也是在此狀態(tài)下確定的。在此狀態(tài)下發(fā)送的DD報文不包含鏈路狀態(tài)描述。
Exchange(信息交換狀態(tài)):在此狀態(tài)下,路由器與鄰居之間相互發(fā)送包含鏈路狀態(tài)信息摘要的DD報文。
Loading(加載):在此狀態(tài)下,路由器與鄰居之間相互發(fā)送LSR報文、LSU報文、LSAck報文。
Full:LSDB同步過程完成,路由器與鄰居之間形成了完全的鄰接關(guān)系。
LSDB同步過程如下:
1、RTA和RTB的Router ID分別為1.1.1.1和2.2.2.2并且二者已建立了鄰居關(guān)系。當(dāng)RTA的鄰居狀態(tài)變?yōu)镋xStart后,RTA會發(fā)送第一個DD報文。此報文中,DD序列號被隨機設(shè)置為X,I-bit設(shè)置為1,表示這是第一個DD報文,M-bit設(shè)置為1,表示后續(xù)還有DD報文要發(fā)送,MS-bit設(shè)置為1,表示RTA宣告自己為Master。
2、當(dāng)RTB的鄰居狀態(tài)變?yōu)镋xStart后,RTB會發(fā)送第一個DD報文。此報文中,DD序列號被隨機設(shè)置為Y(I-bit=1,M-bit=1,MS-bit=1,含義同上)。由于RTB的Router ID較大,所以RTB將成為真正的Master。收到此報文后,RTA會產(chǎn)生一個Negotiation-Done事件,并將鄰居狀態(tài)從ExStart變?yōu)镋xchange。
3、當(dāng)RTA的鄰居狀態(tài)變?yōu)镋xchange后,RTA會發(fā)送一個新的DD報文,此報文中包含了LSDB的摘要信息,序列號設(shè)置為RTB在步驟2中使用的序列號Y(隱式確認(rèn)),I-bit=0,表示這不是第一個DD報文,M-bit=0,表示這是最后一個包含LSDB摘要信息的DD報文,MS-bit=0,表示RTA宣告自己為Slave。收到此報文后,RTB會產(chǎn)生一個Negotiation-Done事件,并將鄰居狀態(tài)從ExStart變?yōu)镋xchange。
4、當(dāng)RTB的鄰居狀態(tài)變?yōu)镋xchange后,RTB會發(fā)送一個新的DD報文,此報文包含了LSDB的摘要信息,DD序列號設(shè)置為Y+1, MS-bit=1,表示RTB宣告自己為Master。
5、雖然RTA不需要發(fā)送新的包含LSDB摘要信息的DD報文,但是作為Slave,RTA需要對Master發(fā)送的每一個DD報文進行確認(rèn)。所以,RTA向RTB發(fā)送一個新的DD報文,序列號為Y+1,該報文內(nèi)容為空。發(fā)送完此報文后,RTA產(chǎn)生一個Exchange-Done事件,將鄰居狀態(tài)變?yōu)長oading。RTB收到此報文后,會將鄰居狀態(tài)變?yōu)镕ull(假設(shè)RTB的LSDB是最新最全的,不需要向RTA請求更新)。
三、LSDB同步(二)
1、RTA開始向RTB發(fā)送LSR報文,請求那些在Exchange狀態(tài)下通過DD報文發(fā)現(xiàn)的、并且在本地LSDB中沒有的鏈路狀態(tài)信息。
2、RTB向RTA發(fā)送LSU報文,LSU報文中包含了那些被請求的鏈路狀態(tài)的詳細(xì)信息。RTA在完成LSU報文的接收之后,會將鄰居狀態(tài)從Loading變?yōu)镕ull。
3、RTA向RTB發(fā)送LSAck報文,作為對LSU報文的確認(rèn)。RTB收到LSAck報文后,雙方便建立起了完全的鄰接關(guān)系。
從建立鄰居關(guān)系到同步LSDB的過程較為復(fù)雜,錯誤的配置或設(shè)備鏈路故障都會導(dǎo)致無法完成LSDB同步。為了快速排障,最關(guān)鍵的是要理解不同狀態(tài)之間切換的觸發(fā)原因。
四、整體流程圖
這是形成鄰居關(guān)系的過程和相關(guān)鄰居狀態(tài)的變換過程。
Down:這是鄰居的初始狀態(tài),表示沒有從鄰居收到任何信息。在NBMA網(wǎng)絡(luò)上,此狀態(tài)下仍然可以向靜態(tài)配置的鄰居發(fā)送Hello報文,發(fā)送間隔為PollInterval,通常和Router DeadInterval間隔相同。
Attempt:此狀態(tài)只在NBMA網(wǎng)絡(luò)上存在,表示沒有收到鄰居的任何信息,但是已經(jīng)周期性的向鄰居發(fā)送報文,發(fā)送間隔為HelloInterval。如果Router DeadInterval間隔內(nèi)未收到鄰居的Hello報文,則轉(zhuǎn)為Down狀態(tài)。
Init:在此狀態(tài)下,路由器已經(jīng)從鄰居收到了Hello報文,但是自己不在所收到的Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關(guān)系。在此狀態(tài)下的鄰居要被包含在自己所發(fā)送的Hello報文的鄰居列表中。
2-Way Received:此事件表示路由器發(fā)現(xiàn)與鄰居的雙向通信已經(jīng)開始(發(fā)現(xiàn)自己在鄰居發(fā)送的Hello報文的鄰居列表中)。Init狀態(tài)下產(chǎn)生此事件之后,如果需要和鄰居建立鄰接關(guān)系則進入ExStart狀態(tài),開始數(shù)據(jù)庫同步過程,如果不能與鄰居建立鄰接關(guān)系則進入2-Way。
2-Way:在此狀態(tài)下,雙向通信已經(jīng)建立,但是沒有與鄰居建立鄰接關(guān)系。這是建立鄰接關(guān)系以前的最高級狀態(tài)。
1-Way Received:此事件表示路由器發(fā)現(xiàn)自己沒有在鄰居發(fā)送Hello報文的鄰居列表中,通常是由于對端鄰居重啟造成的。
ExStart:這是形成鄰接關(guān)系的第一個步驟,鄰居狀態(tài)變成此狀態(tài)以后,路由器開始向鄰居發(fā)送DD報文。主從關(guān)系是在此狀態(tài)下形成的;初始DD序列號是在此狀態(tài)下決定的。在此狀態(tài)下發(fā)送的DD報文不包含鏈路狀態(tài)描述。
Exchange:此狀態(tài)下路由器相互發(fā)送包含鏈路狀態(tài)信息摘要的DD報文,描述本地LSDB的內(nèi)容。
Loading:相互發(fā)送LS Request報文請求LSA,發(fā)送LS Update通告LSA。
Full:兩臺路由器的LSDB已經(jīng)同步。
審核編輯:劉清
-
路由器
+關(guān)注
關(guān)注
22文章
3733瀏覽量
113947 -
OSPF
+關(guān)注
關(guān)注
0文章
80瀏覽量
14893 -
狀態(tài)機
+關(guān)注
關(guān)注
2文章
492瀏覽量
27559
原文標(biāo)題:OSPF狀態(tài)機詳細(xì)過程是怎樣的?
文章出處:【微信號:網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號:網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論