一:OSPF包的類型:
1、 HELLO包:用來建立和維持鄰居關係;
2、 DATEBASE DESCRIPTION (DBD):用來檢驗路由器之間的數據庫並進行同步的;
3、 Link state request (LSR):鏈路狀態請求;
4、 Link state update(LSU):“特定”鏈路之間的請求記錄;
5、 Link state acknowledgement (LSAck):確認包;
二:解釋爲何需要ACK包
OSPF包也是包含在IP數據分組中的,使用的協議號是89,而不是運用的傳輸層的TCP或者UDP,所以沒有一定的可靠性,但是OSPF又要求使用可靠的傳輸,所以就有了LSAck包的出現。【這些與EIGRP非常的相似。EIGRP也是直接封裝在IP分組中的,使用的協議號是88。沒有使用TCP或者UDP,也就隨之有了ACK包。】
三:OSPF鄰接過程
1、初始化狀態:其中一個路由器A發送一個HELLO,我是A,有人嗎?這個時候B收到後,就將這個信息保存在一個鄰居“列表”【而不是鄰接關係數據庫】中。然後迴應,我是路由器B,我能看的到你路由器A。這個時候呢,A接收到B的迴應信息以後呢,也將這個信息保存着在自己的一個鄰居“列表”中。這個過程是一個瞬時狀態.
2、Two-way state:而雙方都知道對方的存在的時候,他們就算是進入了另外一種狀態:Two-way state。【這是一個持久的狀態】
3、Exstart state(交換初始化狀態):這是一個雙方都爭取DR的一個過程。A說他夠格,B說他夠格。其實就是一個DR與BDR的選舉過程:先是比較它們的優先級【默認的優先級都是1】,如果優先級相同的話,就開始比較它們的RID【RID大的那個就是DR;如果存在環回接口的話,那環回接口的IP地址就是RID。如果沒有的話,那就是接口中IP地址最大的那個IP就是RID】。這也是一個瞬間的狀態。
4、Exchange state (交換狀態):雙方向對方發送一個DBD(數據庫狀態描述),裏面包含的是自己本身的鏈路狀態數據庫的摘要信息。並且雙方正確收到以後,給對方返回一個LSAck進行確認!這也是一個瞬間狀態!
5、Loading state (加載狀態):通過對方發送來的那個DBD,與自己的LSDB進行比較。如果是缺少什麼條目的話,就用LSR(鏈路狀態請求)向對方索要,然後對方發送一個LSU,其中包含我們所需要的條目。正確收到LSU後,再發送一個LSAck進行確認!【這是一個瞬間狀態】
6、Full state(完全鄰接狀態):經過加載狀態,將所需要的條目都補充完全了後,就到了完全鄰接的狀態了。鄰居關係正式成立,並投入使用!【持久狀態】
注:在這些過程中,只有【雙向狀態】與【完全鄰接狀態】是持久狀態,其他的都是瞬間狀態!
四:路由信息的維持
當網絡穩定的時候,突然一個鏈路出現了故障,那麼發現這個故障的路由器就會生成一個LSA,這個LSA不是發送給他的所有的鄰居,而是發送給DR,然後用DR來管理“LSA的洪泛”,由DR來發送給其他的鄰居路由器,鄰居路由器接受了以後,更新自己的LSDB,然後複製出一個拷貝,發送給下面的鄰居。