OSPF路由器啟動過程中的七種狀態如下:
在Down狀態下,OSPF進程還沒有與任何鄰居交換信息,路由器會從其OSPF接口向外發送hello分組,但此時還并不知道DR(若為廣播網絡)和任何其他路由器。
OSPF路由器以固定的時間間隔(通常10秒)發送類型1(hello)分組,以便與鄰居路由器建立關系。當一個接口收到第一個hello分組后,路由器就進入到init狀態,這意味著路由器知道有個鄰居在等待將相互之間的關系發展到下一步。
Two-Way狀態是OSPF鄰居之間可以具有的最基本關系,它是OSPF路由器之間的一種高級關系。要想了解其他路由器的鏈路狀態并最終建立一張路由選擇表,每臺OSPF路由器必須至少建立一個鄰接關系,但處于這種關系中的路由器之間是不能共享LSA信息的。
這是信息交換初始狀態,在這個狀態下,本地路由器和鄰居將建立Master/Slave關系,并確定DD Sequence Number,路由器ID大的成為Master。當路由器進入到Exstart狀態后,它們之間的會話就表征為一種鄰接關系,當鄰居路由器建立了它們之間的主從角色后,它們就進入了Exchange狀態,并開始發送DBD報文。
這是信息交換狀態,此時路由器將它們所學習到的鏈路狀態信息與對方發送的數據庫摘要信息進行比較,如果任何一臺路由器接收到不在其數據庫中的某些鏈路信息,該路由器就向其DBD報文的發送方請求有關鏈路的完整更新信息。
這是信息加載狀態,路由器收到DBD后,使用LSACK分組確認已收到DBD。同時將收到的信息同LSDB中的信息進行比較。如果DBD中有更新的鏈路狀態條目,則向對方發送一個LSR,用于請求新的LSA。Loading狀態結束后,路由器就變成Full adjacency狀態。
這是完全鄰接狀態,這種鄰接出現在Router LSA和Network LSA中。
某節點路由器掉電重啟后,發現至上連骨干節點網絡不通。筆者遠程登錄路由器,查看互連接口狀態,發現第一層(物理層)和第二層(數據鏈路層)狀態均為Up,使用Ping命令只能Ping通對端互連接口IP地址,而其他地址均無法Ping通。使用show ip ospf neighbor命令查看OSPF鄰居狀態,發現這兩個節點OSPF鄰居狀態停留在Exstart狀態(OSPF正常狀態為Full)。
筆者可以Ping通對端互連接口地址,就能排除物理信道故障。使用show run命令檢查路由器OSPF協議配置,沒有發現明顯錯誤,而且路由器掉電前網絡是正常的,排除了雙方路由器配置文件更改了的這種可能性。通過查看接口OSPF狀態,發現互連接口都參與了OSPF進程。使用show interface pos命令查看互連接口參數,發現一端接口ip mtu值為4470,而另一端接口ip mtu值為1600,兩端接口mtu值明顯不一致。于是將路由器的MTU值4470修改為1600后,鄰居狀態達到Full狀態,路由器可以相互通告路由,故障排除。
通過查找相關理論得知,這種情況是部分型號的路由器設備掉電重啟后,有可能造成某些選型恢復到了默認值,而這一起故障就是由于路由器掉電造成MTU恢復成默認值。
其實,當OSPF鄰居關系沒有達到正常的Full狀態,而是處于Exstart或Exchang狀態時,通常是由于接口mtu值不一致、傳輸信道質量差、路由器router-id沖突等原因造成的,在排除信道故障以后,需要仔細檢查接口mtu、routerid等參數配置,確保互連接口mtu保持一致,路由器routerid不沖突,該類故障通常就可以排除。
匯聚路由器和用戶節點路由器通過千兆以太網接口互連,按照要求配置完OSPF路由協議后,物理層和數據鏈路層接口狀態均為Up,但路由器學習不到對端設備發布的路由信息。使用show ip ospf neighbor命令查看節點鄰居狀態,發現鄰居處于“2WAY/DROTHER”狀態。
鄰居狀態處于“2WAY/DROTHER”狀態,說明廣播網絡內DR/BDR選舉失敗。查找選舉失敗原因,發現兩個路由器互連接口優先級均為0,即互連接口均不參與DR/BDR選舉。使用no ip ospf priority 0命令取消接口優先級后,OSPF鄰居狀態達到Full狀態,路由器可以學到對端發布的路由信息,故障排除。
其實,在廣播(Broadcast)類型的OSPF網絡需要進行DR/BDR選舉(P2P類型OSPF網絡不選舉DR/BDR),如果選舉失敗,則OSPF路由協議停留在“2WAY/DROTHER”狀態而不能正常工作。造成DR/BDR選舉失敗的主要原因是網絡內接口優先級被置為0,使接口不能參與DR/BDR的自動選舉,將接口優先級設置為大于等于1,就可以排除此類故障。
某地區節點和用戶節點之間采用千兆以太網光口互連,配置完OSPF路由協議后,第一層和第二層接口狀態均為Up,可以Ping通對端互連地址,但學習不到對端路由器發布的路由信息。使用show ip ospf neighbor命令查看鄰居狀態,發現鄰居表為空。
路由器的接口狀態均為Up,就可以排除物理層和數據鏈路層故障。使用show ip ospf interface brief命令檢查接口是否參與了OSPF進程,發現接口參與進程正常。筆者于是懷疑應該是配置問題。
再次檢查配置信息,發現一端路由器接口IP地址為10.0.1.17/255.255.255.252,而另外一端設置為10.0.1.18/255.255.255.248,很明顯兩臺路由器之間的互連接口子網掩碼不一致。將29位掩碼修改為30位后,通過查看OSPF鄰居狀態,發現其已經Full狀態,路由信息發布正常,故障排除。
對于廣播類型的OSPF網絡,在建立OSPF鄰居關系時,OSPF路由器必須檢查互連接口所設IP子網號和網絡掩碼是否一致,只要掩碼不一致,就無法建立鄰居關系,而點對點(P2P)類型的OSPF網絡則沒有上述要求。
在使用OSPF路由協議部署網絡時,我們可以通過查看路由器的OSPF狀態來判斷故障原因,很多棘手的路由故障問題就可以迎刃而解了。