萬盛學電腦網

 萬盛學電腦網 >> 路由器知識 >> 路由器設置 >> cisco思科 >> 詳解OSPF路由器完全鄰接關系的建立過程

詳解OSPF路由器完全鄰接關系的建立過程

  運行OSPF協議的路由器,如果你想正常運轉的話,那麼就得和其他的路由器建立完全鄰接的關系。因為這種狀態下,同一個區域中的所有的路由器的LSDB都是完全同步的、一致的。其實呢,應該反過來說,當同一個區域中的所有的路由器的LSDB的完全同步、一致的情況下,OSPF路由器才算是達到了這個完全鄰接的狀態!

  有這麼幾個過程:

  OSPF 處於 down 狀態----à Init狀態-----à 雙向(two—way)狀態-----à 鄰接狀態--à 預啟動( exstart )狀態 ------à 交換(exchange )狀態----à 完全( full )鄰接狀態!

  當配置了OSPF的路由器剛剛啟動的時候,這個協議還是處於down的狀態的,為什麼呢?因為還沒有其他的路由器和他交換信息啊。所以他接下來要做的就是通過所有的OSPF接口向外發送HELLO分組,並且分組的目標地址是224.0.0.5 (這個地址代表的是哪些路由器呢?我認識吧,他代表的是與發送HELLO分組的路由器直接相連的那些路由器,就是指的那些直連路由器。並且在這裡需要說明的是,HELLO分組不會被路由,這個HELLO分組的行程只有一跳。那我們看到的“HELLO分組在整個區域中的多個路由器之間進行擴展”又該如何解釋呢?HELLO分組在同一個區域中的多個路由器之間進行擴展,運用的不是路由功能,而是一個路由器發送這個HELLO分組到了直接相連的所有的路由器後,這些路由器就復制一個副本,並且將自己的信息添加進去後,就還是運用目標地址為224.0.0.5來分發這個HELLO分組到與自己直接相連的各個路由器上。就這樣一直下去,以此類推!)

  所有的直連OSPF路由器接收到這個路由器發送來的HELLO分組後,就將這個路由器加入到鄰居列表中。這就是Init狀態!(這裡說的這個“鄰居列表”說的是HELLO分組中的數據部分。如果不理解的話,可以去看看5種類型的OSPF分組的格式)。

  所有的這些收到HELLO分組的路由器,都會向發送這個HELLO分組的路由器發送一個單播應答分組;其中包含著自己的信息(因為人家這個路由器也不是死的啊,人家也同時在進行這個過程啊,人家也有自己的一些鄰居啊),這個發回去的應答分組中的“鄰居列表”中自然是包含那個開始發送這個HELLO分組的路由器了。現在這個應答分組就是返回給他的。

  原來那個路由器接收到這個應答分組後,先看看這個鄰居列表中是否包含自己。如果包含自己的話,就說明一個問題:即對方已經知道我的存在了。並且接下來就將這個HELLO分組中帶來的那些鄰居表中包含的路由器ID加入到自己的LSDB中。這樣一來呢,這些路由器就建立了雙向( two-way )狀態。到此為止,所有的路由器之間都建立了雙向狀態,即路由ID彼此出現在對方的鄰居列表中;

  接下來,要看看網絡類型,確定下是否有必要進行DR與BDR的選舉。如果這個網絡屬於廣播類型的網絡(如以太網),那麼就需要進行選舉。具體的選舉過程可以自己去查閱相關的資料。選擇了DR與BDR後,那麼網絡中的路由器都只與這種身份的路由器建立雙向鄰接關系,然後路由器之間才能進行交換鏈路狀態信息。

  注:當一個路由器加入到已經有DR與BDR的廣播網絡時,將同所有的路由器(包括DR、BDR、DROTHER)建立雙向狀態,但是只與DR與BDR建立雙向鄰接關系!並且我們需要知道的是,網絡中的所有的路由器都會定期的進行HELLO包的交換,以確保通信不中斷。默認的時間間隔是10S。這個HELLO分組中包含DR、BDR與一個路由器列表,其實他們都是鄰居,也可以說是已經相互建立了雙向狀態的路由器。

  還想來分析下這個“雙向狀態”與“鄰接”狀態的不同之處:

  雙向狀態:這個狀態下的路由器之間定期進行交換的是HELLO分組,通過這個HELLO分組可以學習到的是所有可能存在的鄰居。這個定期的交換,指的是10S一次,並且這個對象說的是同一個區域中的所有的路由器,他們相互之間都會定期的進行這個動作,而不是某些具備特定條件的路由器才進行定期的交換!

  鄰接狀態:這種狀態是在“雙向狀態”狀態下的一種提升。且,這種狀態下進行交換的已經不是HELLO分組了,而是LSU了。並且,這種動作並不是定期的,而是觸發式的,即只要有鏈路狀態的改變,就會進行相應的LSU的建立、發送。並且這個動作也不是發生在同一個區域中的所有路由器之間了。而是發生具有特定身份的路由器之間的。即發生在一個普通的路由器(DROTHER)與一個特殊角色路由器(DR/BDR)之間。

  上面是選舉了DR、BDR,各個路由器與DR、BDR建立了雙向鄰接關系,此時路由器就是處於預啟動(exstart)狀態了。這個狀態下,路由器已經做好了發現有關互聯網絡的鏈路狀態信息並建立LSDB的准備。

  處於預啟動狀態後,DR與BDR之間建立主從關系。接下來他們就開始互相交換DBD(此時就算是進入了交換狀態),這個就是5種OSPF分組中的第二種。裡面包含的是LSDB中LSA條目的摘要信息。LSA是關於鏈路或者網絡的。摘要信息包括鏈路狀態類型、通告LSA的路由器的IP地址、鏈路的成本和序列號。當路由器收到DBD後並不是將其中的包含的內容全部的收下,而是一步一步的采取下面的步驟:

  1、首先給對方一個LSACK,來確認下已經收到了這個分組;

  2、將收到的信息同本身的LSDB中信息進行比較。如果有更新的條目的話,那麼就向發送方發送一個LSR(這時候你就想了,他知道這個LSR發給誰嗎?只要想要的是什麼嗎?呵呵、當然知道了,因為這些信息都在發送來的LSA摘要信息中包含著呢。尤其是那個“通告LSA的路由器的地址”。)

  3、對方用LSU分組進行響應,該LSU中包含著有關被請求的條目的完整信息。同樣呢,收到這個LSU分組後,也要給對方一個LSACK進行確認下!

  4、路由器將提供來的新的完整的LSA條目加入到自己的LSDB中。

  彼此給對方提供所需要的全部LSA後相鄰路由器就處於同步和完全的鄰接狀態了。

  上面說的是DR與BDR之間完全鄰接的這麼一個過程,那麼其他的互為鄰接關系的路由器達到完全鄰接的狀態也是這麼一個過程。其實說的就是DRother 與 DR之間的完全鄰接過程!

  那麼如何來判定條目的新舊呢?通過摘要信息中的序列號字段就可以了,這個序列號是個長32位的字段,最小的一個序列號是0X80000001,最大的是0X8FFFFFFF。當序列號越大的時候,就表示越新!

  路由器想轉發數據流的話,必須處於完全鄰接狀態。至此,區域內所有路由器的LSDB都相同。

copyright © 萬盛學電腦網 all rights reserved