5種報文、8種鄰居狀態機詳解OSPF工做原理

5種報文、8種鄰居狀態機詳解OSPF工做原理
前言算法

上一章節介紹了OSPF相比RIP具備無環路、路由收斂速度快、可擴展性好的特色。知識卡片 | 鏈路狀態路由協議OSPF憑什麼會取代RIP?數據庫

咱們知道路由協議的最終目的是爲了計算最優路由加入路由表來指導IP數據包轉發,那麼OSPF協議是如何經過報文交互生成路由的呢?今天主要根據5種報文和8種鄰居狀態機給你們介紹下OSPF協議的基本工做原理。網絡

5種報文、8種鄰居狀態機詳解OSPF工做原理

正文異步

1 OSPF協議的幾個概念ide

Router ID3d

Router ID是一個32位的值,它惟一標識了一個自治系統內的路由器,能夠爲每臺運行OSPF的路由器上能夠手動配置一個Router ID,或者指定一個IP地址做爲Router ID。blog

若是沒有手動配置Router ID,運行OSPF協議的路由器如何選取Router ID?接口

一、若是設備存在多個邏輯接口地址,則路由器使用邏輯接口中最大的IP地址做爲Router ID;進程

二、若是沒有配置邏輯接口,則路由器使用物理接口的最大IP地址做爲Router ID。路由

注意:

一、在爲一臺運行OSPF的路由器配置新的Router ID後,須要在路由器上經過重置OSPF進程來更新Router ID。

二、一般建議手動配置Router ID,以防止Router ID由於接口地址的變化而改變。

鄰居(Neighbor):

OSPF路由器啓動後,便會經過OSPF接口向外發送Hello報文用於發現鄰居。

收到Hello報文的OSPF路由器會檢查報文中所定義的一些參數,若是雙方的參數一致,就會彼此造成鄰居關係。

鄰接(Adjacency):

造成鄰居關係的雙方不必定都能造成鄰接關係,這要根據網絡類型而定。

只有當雙方成功交換DD報文,並能交換LSA以後,才造成真正意義上的鄰接關係。

2 OSPF協議支持的網絡類型

OSPF協議支持四種網絡類型,分別是點到點網絡,廣播型網絡,NBMA網絡和點到多點網絡。

一、點到點網絡是指只把兩臺路由器直接相連的網絡。一個運行PPP的64K串行線路就是一個點到點網絡的例子。

二、廣播型網絡是指支持兩臺以上路由器,而且具備廣播能力的網絡。一個含有三臺路由器的以太網就是一個廣播型網絡的例子。

OSPF能夠在不支持廣播的多路訪問網絡上運行,此類網絡包括在hub-spoke拓撲上運行的幀中繼(FR)和異步傳輸模式(ATM)網絡,這些網絡的通訊依賴於虛電路。

OSPF定義了兩種支持多路訪問的網絡類型:非廣播多路訪問網絡(NBMA)和點到多點網絡(Point To Multi-Points)。

三、NBMA:在NBMA網絡上,OSPF模擬在廣播型網絡上的操做,可是每一個路由器的鄰居須要手動配置。NBMA方式要求網絡中的路由器組成全鏈接。

缺省狀況下,OSPF認爲幀中繼、 ATM的網絡類型是NBMA。

四、P2MP:將整個網絡當作是一組點到點網絡。對於不能組成全鏈接的網絡應當使用點到多點方式。

注意:

現網中遇到的大部分屬於點到點網絡和廣播型網絡,由於幀中繼、 ATM網絡基本已經淘汰了。

3 DR&BDR

爲減少廣播型網絡和NBMA網絡中OSPF流量,OSPF會選擇一個指定路由器(DR)和一個備份指定路由器(BDR)。

選舉DR&BDR的條件:

每個含有至少兩個路由器的廣播型網絡和NBMA網絡都有一個DR和BDR。在點到點網絡和P2MP不須要選舉DR&BDR。

DR&BDR的工做原理

一、當指定了DR後,全部的路由器都與DR創建起鄰接關係,DR成爲該廣播網絡上的中心點;

二、BDR在DR發生故障時接管業務,一個廣播網絡上全部路由器都必須同BDR創建鄰接關係。

爲何須要選舉DR&BDR?

一、DR和BDR能夠減小鄰接關係的數量,從而減小鏈路狀態信息以及路由信息的交換次數,這樣能夠節省帶寬,下降對路由器處理能力的壓力。

二、一個既不是DR也不是BDR的路由器只與DR和BDR造成鄰接關係並交換鏈路狀態信息以及路由信息,這樣就大大減小了大型廣播型網絡和NBMA網絡中的鄰接關係數量。

DR&BDR的選舉

在鄰居發現完成以後,路由器會根據網段類型進行DR選舉。

一、在廣播和NBMA網絡上,路由器會根據參與選舉的每一個接口的優先級進行DR選舉。

優先級取值範圍爲0-255,值越高越優先。缺省狀況下,接口優先級爲1。若是一個接口優先級爲0,那麼該接口將不會參與DR或者BDR的選舉。

二、若是優先級相同時,則比較Router ID,值越大越優先被選舉爲DR。

爲了給DR作備份,每一個廣播和NBMA網絡上還要選舉一個BDR。BDR也會與網絡上全部的路由器創建鄰接關係。

爲了維護網絡上鄰接關係的穩定性,若是網絡中已經存在DR和BDR,則新添加進該網絡的路由器不會成爲DR和BDR,無論該路由器的Router Priority是否最大。若是當前DR發生故障,則當前BDR自動成爲新的DR,網絡中從新選舉BDR;若是當前BDR發生故障,則DR不變,從新選舉BDR。這種選舉機制的目的是爲了保持鄰接關係的穩定,使拓撲結構的改變對鄰接關係的影響儘可能小。

例子:

在沒有DR的廣播網絡上,鄰接關係的數量能夠根據公式n(n-1)/2計算出,n表明參與OSPF的路由器接口的數量。

5種報文、8種鄰居狀態機詳解OSPF工做原理

如圖所示,全部路由器之間有6個鄰接關係。本例中使用DR和BDR將鄰接關係從6減小到了5,RTA和RTB都只須要同DR和BDR創建鄰接關係,RTA和RTB之間創建的是鄰居關係。

此例中,鄰接關係數量的減小效果並不明顯。可是,當網絡上部署了大量路由器時,好比100臺,那麼狀況就大不同了。

4 OSPF協議5種報文

OSPF直接運行在IP協議之上,使用IP協議號89。

運行OPSF協議的路由器經過5種報文的交互從鄰居狀態達到鄰接狀態,完成LSA的泛洪,使網絡的路由器LSDB達到一致,每一個路由器按照本身LSDB根據SPF算法計算路徑,生成最優路由加入路由表。

下面咱們一塊兒看下這個五種報文類型,每種報文都使用相同的OSPF報文頭。

一、Hello報文:

最經常使用的一種報文,用於發現、維護鄰居關係。

在廣播和NBMA(None-Broadcast Multi-Access)類型的網絡中選舉指定路由器DR(Designated Router)和備份指定路由器BDR(Backup Designated Router)。

二、DD報文:

兩臺路由器進行LSDB數據庫同步時,用DD報文來描述本身的LSDB。

DD報文的內容包括LSDB中每一條LSA的頭部(LSA的頭部能夠惟一標識一條LSA)。LSA頭部只佔一條LSA的整個數據量的一小部分,因此,這樣就能夠減小路由器之間的協議報文流量。

三、LSR報文:

兩臺路由器互相交換過DD報文以後,知道對端的路由器有哪些LSA是本地LSDB所缺乏的,這時須要發送LSR報文向對方請求缺乏的LSA,LSR只包含了所須要的LSA的摘要信息。

四、LSU報文:用來向對端路由器發送所須要的LSA。

五、LSACK報文:用來對接收到的LSU報文進行確認。

5 OSPF協議8種鄰居狀態機

運行OPSF協議的路由器經過5種報文的交互從鄰居狀態達到鄰接狀態,中間可能會經歷如下8種狀態:

Down:這是鄰居的初始狀態,表示沒有從鄰居收到任何信息。

Attempt:此狀態只在NBMA網絡上存在,表示沒有收到鄰居的任何信息,可是已經週期性的向鄰居發送報文,發送間隔爲HelloInterval。若是RouterDeadInterval間隔內未收到鄰居的Hello報文,則轉爲Down狀態。

Init:在此狀態下,路由器已經從鄰居收到了Hello報文,可是本身不在所收到的Hello報文的鄰居列表中,還沒有與鄰居創建雙向通訊關係。

2-Way:在此狀態下,雙向通訊已經創建,可是沒有與鄰居創建鄰接關係。這是創建鄰接關係之前的最高級狀態。

ExStart:這是造成鄰接關係的第一個步驟,鄰居狀態變成此狀態之後,路由器開始向鄰居發送DD報文。主從關係是在此狀態下造成的,初始DD序列號也是在此狀態下決定的。在此狀態下發送的DD報文不包含鏈路狀態描述。

Exchange:此狀態下路由器相互發送包含鏈路狀態信息摘要的DD報文,描述本地LSDB的內容。

Loading:相互發送LSR報文請求LSA,發送LSU報文通告LSA。

Full:路由器的LSDB已經同步

6 OSPF協議詳細工做原理

結合OSPF協議的5種報文和8種鄰居狀態機來一塊兒看下OPSF的工做過程:

一、鄰居發現:

運行OSPF協議的路由器會發送Hello報文,用來發現和維持OSPF鄰居關係;

Hello報文結構:
5種報文、8種鄰居狀態機詳解OSPF工做原理

Hello報文中的重要字段解釋以下:

Network Mask:32比特,發送Hello報文的接口的網絡掩碼。

HelloInterval:16比特,發送Hello報文的時間間隔,單位爲秒。默認是10S。

Options:8比特,標識發送此報文的OSPF路由器所支持的可選功能。

可選項:

  • E:容許Flood AS-External-LSAs

  • MC:轉發IP組播報文

  • N/P:處理Type-7 LSAs

  • DC:處理按需鏈路

Router Priority:8比特,發送Hello報文的接口的Router Priority,用於選舉DR和BDR。默認爲1。若是設置爲0,則路由器不能參與DR或BDR的選舉。

RouterDeadInterval:32比特,失效時間。若是在此時間內未收到鄰居發來的Hello報文,則認爲鄰居失效;單位爲秒,一般爲四倍HelloInterval。默認是40S。

Designated Router:32比特,發送Hello報文的路由器所選舉出的DR的IP地址。若是設置爲0.0.0.0,表示未選舉DR路由器。

Backup Designated Router:32比特,發送Hello報文的路由器所選舉出的BDR的IP地址。若是設置爲0.0.0.0,表示未選舉BDR。

Neighbor:32比特,鄰居的Router ID列表,表示本路由器已經從這些鄰居收到了合法的Hello報文。

若是路由器發現所接收的合法Hello報文的鄰居列表中有本身的Router ID,則認爲已經和鄰居創建了雙向鏈接,表示鄰居關係已經創建。

驗證一個接收到的Hello報文是否合法包括:

一、若是接收端口的網絡類型是廣播型,點到多點或者NBMA,所接收的Hello報文中Network Mask字段必須和接收端口的網絡掩碼一致,若是接收端口的網絡類型爲點到點類型或者是虛鏈接,則不檢查Network Mask字段;

二、所接收的Hello報文中Hello Interval字段必須和接收端口的配置一致;

三、所接收的Hello報文中Router Dead Interval字段必須和接收端口的配置一致;

四、所接收的Hello報文中Options字段中的E-bit(表示是否接收外部路由信息)必須和相關區域的配置一致。

二、LSDB數據庫同步:

路由器在創建完成鄰居關係以後,便開始進行LSDB數據庫同步。

路由器使用DD報文來進行主從路由器的選舉和數據庫摘要信息的交互。DD報文包含LSA的頭部信息,用來描述LSDB的摘要信息。

5種報文、8種鄰居狀態機詳解OSPF工做原理

具體過程以下:

主從路由器的選舉:

一、鄰居狀態變爲ExStart之後,RTA向RTB發送第一個DD報文,在這個報文中,DD序列號被設置爲X(假設),RTA宣告本身爲主路由器。

二、RTB也向RTA發送第一個DD報文,在這個報文中,DD序列號被設置爲Y(假設)。RTB也宣告本身爲主路由器。

因爲RTB的Router ID比RTA的大,因此RTB應當爲真正的主路由器。

數據庫摘要信息的交互:

三、RTA發送一個新的DD報文,在這個新的報文中包含LSDB的摘要信息(LSDB的摘要信息能夠類比成一本書的目錄),序列號設置爲RTB在步驟2裏使用的序列號(表示認可RTB爲真正的主路由器),所以RTB將鄰居狀態改變爲Exchange。

四、鄰居狀態變爲Exchange之後,RTB發送一個新的DD報文,該報文中包含LSDB的描述信息,DD序列號設爲Y+1(上次使用的序列號加1)。

五、即便RTA不須要新的DD報文描述本身的LSDB,可是做爲從路由器,RTA須要對主路由器RTB發送的每個DD報文進行確認。因此,RTA向RTB發送一個內容爲空的DD報文,序列號爲Y+1。

三、創建徹底鄰接關係:

5種報文、8種鄰居狀態機詳解OSPF工做原理

六、發送完最後一個DD報文以後,RTA將鄰居狀態改變爲Loading;鄰居狀態變爲Loading以後,RTA開始向RTB發送LSR報文,請求那些在Exchange狀態下經過DD報文發現的,並且在本地LSDB中沒有的鏈路狀態信息。

RTB收到最後一個DD報文以後,改變狀態爲Full(假設RTB的LSDB是最新最全的,不須要向RTA請求更新)。

七、RTB收到LSR報文以後,向RTA發送LSU報文,在LSU報文中,包含了那些被請求的鏈路狀態的詳細信息。RTA收到LSU報文以後,將鄰居狀態從Loading改變成Full。

八、RTA向RTB發送LSACK報文,用於對已接收LSA的確認。

此時,RTA和RTB之間的鄰居狀態變成Full,表示達到徹底鄰接狀態。

相關文章
相關標籤/搜索