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