一、鄰居關系建立
狀態含義:
Down:這是鄰居的初始狀態,表示沒有從鄰居收到任何信息。
Init:在此狀態下,路由器已經從鄰居收到了Hello報文,但是自己的Router ID不在所收到的Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關系。
2-Way:在此狀態下,路由器發現自己的Router ID存在于收到的Hello報文的鄰居列表中,已確認可以雙向通信。
鄰居建立過程如下:
1、RTA和RTB的Router ID分別為1.1.1.1和2.2.2.2。當RTA啟動OSPF后,RTA會發送第一個Hello報文。此報文中鄰居列表為空,此時狀態為Down,RTB收到RTA的這個Hello報文,狀態置為Init。
2、RTB發送Hello報文,此報文中鄰居列表為空,RTA收到RTB的Hello報文,狀態置為Init。
3、RTB向RTA發送鄰居列表為1.1.1.1的Hello報文,RTA在收到的Hello報文鄰居列表中發現自己的Router ID,狀態置為2-way。
4、RTA向RTB發送鄰居列表為2.2.2.2的Hello報文,RTB在收到的Hello報文鄰居列表中發現自己的Router ID,狀態置為2-way。
因為鄰居都是未知的,所以Hello報文的目的IP地址不是某個特定的單播地址。鄰居從無到有,OSPF采用組播的形式發送Hello報文(目的地址224.0.0.5)。
二、LSDB同步(一)
狀態含義:
ExStart(信息交換初始狀態):鄰居狀態變成此狀態以后,路由器開始向鄰居發送DD報文。Master/Slave關系是在此狀態下形成的,初始DD序列號也是在此狀態下確定的。在此狀態下發送的DD報文不包含鏈路狀態描述。
Exchange(信息交換狀態):在此狀態下,路由器與鄰居之間相互發送包含鏈路狀態信息摘要的DD報文。
Loading(加載):在此狀態下,路由器與鄰居之間相互發送LSR報文、LSU報文、LSAck報文。
Full:LSDB同步過程完成,路由器與鄰居之間形成了完全的鄰接關系。
LSDB同步過程如下:
1、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。
2、當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。
3、當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。
4、當RTB的鄰居狀態變為Exchange后,RTB會發送一個新的DD報文,此報文包含了LSDB的摘要信息,DD序列號設置為Y+1, MS-bit=1,表示RTB宣告自己為Master。
5、雖然RTA不需要發送新的包含LSDB摘要信息的DD報文,但是作為Slave,RTA需要對Master發送的每一個DD報文進行確認。所以,RTA向RTB發送一個新的DD報文,序列號為Y+1,該報文內容為空。發送完此報文后,RTA產生一個Exchange-Done事件,將鄰居狀態變為Loading。RTB收到此報文后,會將鄰居狀態變為Full(假設RTB的LSDB是最新最全的,不需要向RTA請求更新)。
三、LSDB同步(二)
1、RTA開始向RTB發送LSR報文,請求那些在Exchange狀態下通過DD報文發現的、并且在本地LSDB中沒有的鏈路狀態信息。
2、RTB向RTA發送LSU報文,LSU報文中包含了那些被請求的鏈路狀態的詳細信息。RTA在完成LSU報文的接收之后,會將鄰居狀態從Loading變為Full。
3、RTA向RTB發送LSAck報文,作為對LSU報文的確認。RTB收到LSAck報文后,雙方便建立起了完全的鄰接關系。
從建立鄰居關系到同步LSDB的過程較為復雜,錯誤的配置或設備鏈路故障都會導致無法完成LSDB同步。為了快速排障,最關鍵的是要理解不同狀態之間切換的觸發原因。
四、整體流程圖
這是形成鄰居關系的過程和相關鄰居狀態的變換過程。
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已經同步。
一、鄰居關系建立
狀態含義:
Down:這是鄰居的初始狀態,表示沒有從鄰居收到任何信息。
Init:在此狀態下,路由器已經從鄰居收到了Hello報文,但是自己的Router ID不在所收到的Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關系。
2-Way:在此狀態下,路由器發現自己的Router ID存在于收到的Hello報文的鄰居列表中,已確認可以雙向通信。
鄰居建立過程如下:
1、RTA和RTB的Router ID分別為1.1.1.1和2.2.2.2。當RTA啟動OSPF后,RTA會發送第一個Hello報文。此報文中鄰居列表為空,此時狀態為Down,RTB收到RTA的這個Hello報文,狀態置為Init。
2、RTB發送Hello報文,此報文中鄰居列表為空,RTA收到RTB的Hello報文,狀態置為Init。
3、RTB向RTA發送鄰居列表為1.1.1.1的Hello報文,RTA在收到的Hello報文鄰居列表中發現自己的Router ID,狀態置為2-way。
4、RTA向RTB發送鄰居列表為2.2.2.2的Hello報文,RTB在收到的Hello報文鄰居列表中發現自己的Router ID,狀態置為2-way。
因為鄰居都是未知的,所以Hello報文的目的IP地址不是某個特定的單播地址。鄰居從無到有,OSPF采用組播的形式發送Hello報文(目的地址224.0.0.5)。
二、LSDB同步(一)
狀態含義:
ExStart(信息交換初始狀態):鄰居狀態變成此狀態以后,路由器開始向鄰居發送DD報文。Master/Slave關系是在此狀態下形成的,初始DD序列號也是在此狀態下確定的。在此狀態下發送的DD報文不包含鏈路狀態描述。
Exchange(信息交換狀態):在此狀態下,路由器與鄰居之間相互發送包含鏈路狀態信息摘要的DD報文。
Loading(加載):在此狀態下,路由器與鄰居之間相互發送LSR報文、LSU報文、LSAck報文。
Full:LSDB同步過程完成,路由器與鄰居之間形成了完全的鄰接關系。
LSDB同步過程如下:
1、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。
2、當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。
3、當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。
4、當RTB的鄰居狀態變為Exchange后,RTB會發送一個新的DD報文,此報文包含了LSDB的摘要信息,DD序列號設置為Y+1, MS-bit=1,表示RTB宣告自己為Master。
5、雖然RTA不需要發送新的包含LSDB摘要信息的DD報文,但是作為Slave,RTA需要對Master發送的每一個DD報文進行確認。所以,RTA向RTB發送一個新的DD報文,序列號為Y+1,該報文內容為空。發送完此報文后,RTA產生一個Exchange-Done事件,將鄰居狀態變為Loading。RTB收到此報文后,會將鄰居狀態變為Full(假設RTB的LSDB是最新最全的,不需要向RTA請求更新)。
三、LSDB同步(二)
1、RTA開始向RTB發送LSR報文,請求那些在Exchange狀態下通過DD報文發現的、并且在本地LSDB中沒有的鏈路狀態信息。
2、RTB向RTA發送LSU報文,LSU報文中包含了那些被請求的鏈路狀態的詳細信息。RTA在完成LSU報文的接收之后,會將鄰居狀態從Loading變為Full。
3、RTA向RTB發送LSAck報文,作為對LSU報文的確認。RTB收到LSAck報文后,雙方便建立起了完全的鄰接關系。
從建立鄰居關系到同步LSDB的過程較為復雜,錯誤的配置或設備鏈路故障都會導致無法完成LSDB同步。為了快速排障,最關鍵的是要理解不同狀態之間切換的觸發原因。
四、整體流程圖
這是形成鄰居關系的過程和相關鄰居狀態的變換過程。
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已經同步。
審核編輯:劉清
-
路由器
+關注
關注
22文章
3707瀏覽量
113541 -
OSPF
+關注
關注
0文章
80瀏覽量
14871 -
狀態機
+關注
關注
2文章
492瀏覽量
27478
原文標題:OSPF狀態機詳細過程,網絡工程師收藏!
文章出處:【微信號:網絡技術干貨圈,微信公眾號:網絡技術干貨圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論