天天看點

ospf hello時間和dead_網絡工程師(37):OSPF怎麼建鄰居關系

ospf hello時間和dead_網絡工程師(37):OSPF怎麼建鄰居關系

路由器運作OSPF協定,并通過Network指令使能接口的OSPF功能後,該接口便會發送Hello封包。

Hello封包就像和新鄰居打招呼一樣,主要有兩個作用,一是雙方互相都打了招呼,并且相關參數協商一緻,看對眼了,那麼就建立起鄰居關系;如果有的參數不一緻,那雙方也是有緣無份,鄰居關系建不起來。二是周期性發送來保持鄰居關系,雙方每隔一定時間(Broadcast和P2P網絡是10秒,NBMA和P2MP是30秒)要互相串個門,維護和保持鄰居關系。如果超過鄰居失效時間(4倍Hello周期)沒有收到鄰居發來的Hello封包,則認為鄰居失效,鄰居關系中斷。

ospf hello時間和dead_網絡工程師(37):OSPF怎麼建鄰居關系

這是OSPF協定的封包頭,所有OSPF封包都有這個東西,當然Hello也不例外。

雙方要建鄰居關系,在這個封包頭裡,要協商三個參數:

Source OSPF Router:發送hello封包的路由器RID,雙方一定不能相同;

Area ID:區域ID,毫無疑問這個必須要相同,雙方接口不在同一個區域可不行;

Auth Type和Auth Data:驗證類型和驗證資料,雙方肯定必須要一樣啦。

Auth Type為0表示不驗證,Auth Data填0;為1表示簡單密碼驗證,Auth Data填寫密碼資訊;為2表示MD5驗證,Auth Data填寫KeyID、MD5驗證資料長度、序列号,驗證資料不在這裡,在封包後面。

ospf hello時間和dead_網絡工程師(37):OSPF怎麼建鄰居關系

這是在Header後面的真正的Hello,這裡也要協商四個參數:

Network Mask:子網路遮罩。除P2P網絡類型外,雙方接口配置的IP子網号和掩碼必須相同;

Hello Interval:Hello封包發送周期,根據不同網絡類型,預設有10秒和30秒。雙方必須相同(這個很好了解,比如倆鄰居約定每周聚一下,聚會時間肯定要相同。我說5天一聚,你說7天一聚,那聚不了);

Router Dead Interval:鄰居失效時間,預設是4倍hello周期時間,這個也要相同。

Options中的N位和E位:這兩個标志位雙方也必須相同。N位為1表示雙方都處于NSSA區域,都支援Type-7類LSA,此時E位一定為0;E位為1表示雙方都允許Type-5類外部路由存在,為0表示雙方都是Stub區域或者都是NSSA區域。

以上七個參數協商成功,雙方鄰居關系遷移到2-way狀态,表示鄰居建立成功。

當然,這是正常情況。我們有時還會看到其他鄰居狀态:

Init狀态,如果本端收到了别人發的Hello,但是裡面的鄰居表(Active Neighbor)裡沒有自己的RID時,為Init狀态。Init一般是一個瞬時狀态,如果長時間停留在此狀态,可能網絡有故障或有其他錯誤配置。

Attempt狀态:這個狀态隻存在于NBMA網絡中,如果本端正常發送Hello,但沒有收到任何人發的Hello時,為Attempt狀态。

OSPF協定最大的特點是,在一個區域中,所有路由器都擁有一個完全相同的本區域所有的鍊路狀态資訊,儲存在鍊路狀态資料庫(LSDB)中,每台路由器通過LSDB,自己計算去往任何一個網段的路由,加入到路由表中。

這就好像地圖,我們每個人手裡的地圖是完全相同的,但要導航去相同的一個地方,每個人又可能因為出發地不同,路線可能也不同。即使同一個人,可能也會有多個路線方案。OSPF會選擇開銷(cost)最小的。

是以,OSPF實際上有兩個工作:一個是怎麼讓區域内所有路由器收集整個區域的所有鍊路狀态資訊,讓大家的地圖都一樣;二是怎麼把LSDB中的資訊計算成路由加入路由表中。隻有地圖也不行,還要能導航。

雙方通過發送互相Hello封包建立了鄰居關系,進入2-way狀态後,如果雙方都是MA網絡中的DRother,則停在此狀态不動了。否則鄰居狀态會繼續遷移。為什麼還要遷移?當然是為了交換并同步鍊路狀态資訊,完成OSPF的第一個工作。

可是,OSPF是基于IP的,就是說OSPF的封包由IP協定負責傳遞。而IP又不太靠譜,是以需要OSPF自己想辦法,提高可靠性。

你可能會問,既然IP不靠譜,為什麼OSPF不考慮用TCP來保證可靠性,而直接讓IP負責呢?

這是因為,所有内部網關路由協定,包括OSPF,目的是為了能自動發現和計算路由,是以,它們都是以廣播或多點傳播的形式發送協定封包。如果用了TCP,那就不能自動發現了,因為TCP不支援廣播群組播(如果你了解BGP,想想怎麼建鄰居的,BGP的路由又是哪來的)。

小Q:Hello封包Options選項中的N位什麼情況下還會變成P位?