大家好,我是小弗。
RIP 缺陷提及 OSFP 時,還得先從 RIP 說起。
RIP 以跳數來計算到達目的網絡的最優路徑,在實際應用時并不合適,以網絡帶寬和鏈路時延來衡量網絡質量會更合理。
RIP 支持的最大跳數是 16 ,無法用于搭建大規模的網絡。
RIP 的收斂速度慢,RIP 會對不可達路由的信息更新進行抑制,原路由失效,新路由要等到抑制時間結束后,才能更新。
RIP 的更新周期長,一個路由器突然離線,其它路由器要很長時間才能發現。
RIP 使用廣播發送全部路由信息,網絡規模越大,路由信息占用的網絡資源也越大。
因此,RIP 路由并不適合大規模的網絡,而 OSPF 協議解決了這些問題,得到了廣泛的使用。
OSPF 原理OSPF ,是 Open Shortest Path First 的縮寫,譯為開放最短路徑優先。OSPF 是基于鏈路狀態( Link State )的自治系統內部路由協議,用來替代 RIP 協議,通用的是 OSPFv2 。
與距離矢量協議不同,鏈路狀態協議使用最短路徑優先算法( Shortest Path First ,SPF )計算和選擇路由。這類路由協議關系網絡鏈路或接口的狀態,比如 up 、down 、IP 地址、掩碼、帶寬、利用率和時延等。每臺路由器將已知的鏈路狀態向其它路由器通告,讓網絡上每臺路由器對網絡結構有相同的了解。然后,路由器以此為依據,使用 SPF 算法計算和選擇路由。
OSPF 協議使用組播發送協議包,節約資源,又減少對其它網絡設備的干擾。
OSPF 將協議包封裝在 IP 包中,協議號 89 。由于 IP 協議是無連接的,OSPF 定義了一些機制保證協議包安全可靠的傳輸。
總之,OSPF 協議比 RIP 有更大的擴展、快速收斂和安全可靠等特性,采用路由增量更新保證路由同步,減少對網絡資源的浪費。
OSPF 協議簡介OSPF 協議有四個主要過程:
尋找鄰居OSPF 協議啟動后,先尋找網絡中的鄰居( Neighbor ),也就是通過 Hello 報文確認可以雙向通信。
建立鄰接關系一部分路由器形成鄰居關系后,就開始進行建立鄰接關系( Adjacency )。建立了鄰居關系的路由器才能互相傳遞鏈路狀態信息。
鏈路狀態信息同步建立鄰接關系的 OSPF 路由器在網絡中交互 LSA(鏈路狀態通告),最后形成包含網絡完整鏈路狀態信息的 LSDB(鏈路狀態數據庫)。
計算路由LSDB 同步完成后,OSPF 區域內的每個路由器對網絡結構有相同的認識,鄰居路由器之間形成完全的鄰接關系。然后,每臺路由器根據 LSDB 的信息使用 SPF(最短路徑優先)算法獨立計算出路由。
OSPF 協議過程將 OSPF 的四個過程展開來講,就是一個個鄰居狀態的切換,不同的鄰居狀態有不同的行為。
Down(失效)OSPF 鄰居的初始狀態,表示接口沒有收到鄰居發來的 Hello 報文。
Init(初始)收到鄰居發送的 Hello 報文,但是報文內沒有自己的 Router-ID ,鄰居狀態就是 Init 。這個狀態表示,直連鏈路上有一個 OSPF 路由器,但是還未確認雙向通信。接下來,路由器會把對方的 Router-ID 添加到發送的 Hello 報文中。
什么是 Router-ID ?Router-ID 用于標識 OSPF 路由器,是一個 32 位的數值,跟 IPv4 地址格式一樣。連續的 OSPF 路由器組成的網絡叫做 OSPF 域,域內 Router-ID 必須唯一,也就是在同一個域內不允許出現兩臺相同 Router-ID 的路由器。Router-ID 可以手動設置,也可以自動生成,常見的做法是把設備的 Router-ID 指定為設備的 Loopback 接口的 IP 地址。
Attempt(嘗試)只在 NBMA 網絡中出現。當路由器的 NBMA 接口啟動后,鄰居狀態從 Down 切換到 Attempt 。這種狀態下,路由器周期性的向鄰居發送 Hello 報文,但是未收到鄰居的有效 Hello 報文。當路由器收到鄰居發送的沒有自己 Router-ID 的 Hello 報文后,就將鄰居狀態切換到 Init 。
什么是 NBMA ?NBMA 類型的網絡已經看不到了,它允許多臺路由器接入,但是沒有廣播能力,無法使用組播或廣播,只能配置成單播發送 OSPF 報文。幀中繼、X.25 都是這類網絡。
2-Way(雙向通信)路由器收到鄰居的 Hello 報文,報文里有自己的 Router-ID 時,狀態切換成 2-Way ,表示兩個路由器形成了可以雙向通信的鄰居關系。
選舉 DR 和 BDR如果路由器是在一個 MA 網絡,鄰居狀態在 2-Way 后,會進行 DR 和 BDR 選舉。
什么是 MA 網絡?MA 網絡,即多路訪問網絡,是在同一個共享介質中連接多個設備的網絡。網絡中的任意兩臺設備都能直接進行二層通信。MA 網絡有兩種,一種是 BMA 網絡,即廣播型多路訪問網絡,比如以太網,典型場景就是一臺以太網交換機連接著多臺路由器,如果有一個廣播數據發出來,整個網絡中的路由器都能收到。另一種是 NBMA 網絡,即非廣播型多路訪問網絡,比如幀中繼,只是幀中繼不支持廣播。
在 MA 網絡中,n 臺路由器都兩兩建立鄰接關系,那么就有 n(n-1)/2 個鄰接關系,會消耗大量的路由器資源,增加網絡中 LSA 的泛洪數量。為了優化鄰接關系數量,減少不必要的協議流量,OSPF 會在每一個 MA 網絡中選舉一個 DR(指定路由器)和一個 BDR(備用指定路由器)。
既不是 DR 也不是 BDR 的路由器叫做 DROther ,MA網絡中所有 DROther 只和 DR 及 BDR 建立 OSPF 鄰接關系,BDR 也和 DR 建立鄰接關系,DROther 之間只停留在 2-Way 狀態。這樣,就有 2(n-2)+1 個鄰接關系,數量得到優化。
DR 會偵聽網絡中的拓撲變化信息,并將變更信息通知給其它路由器。BDR 會監控 DR 狀態,當 DR 發生故障時就接替它的工作。
DR 、BDR 的選舉通過 Hello 報文實現,發生在 2-Way 狀態之后。Hello 報文有路由器接口的 DR 優先級,取值范圍是 0 ~ 255 ,默認值為 1 ,DR 優先級為 0 的接口沒有 DR 和 BDR 的選舉資格。
當接口激活 OSPF 后,它會查看網絡中是否存在 DR ,如果有就使用已經存在的 DR ,也就是 DR 不可搶占,否則選擇最高優先級的路由器成為 DR ,當優先級相等時,選擇 Router-ID 最大的路由器成為 DR 。之后還會進行 BDR 的選舉,選舉過程與 DR 類似。
需要注意的是,DR 和 BDR 是一個接口級別的概念。某臺路由器是 DR ,這種說法不準確,嚴謹的說法是:某臺路由器的某個接口在這個 MA 網絡中是 DR 。
在一個 MA 網絡中,DR 要確保網絡中的所有路由器有相同的 LSDB ,也就是確保 LSDB 同步。DR 使用組播地址 224.0.0.5 向網絡中發送 LSU 報文,所有 OSPF 路由器都會偵聽這個組播地址,并同步自己的 LSDB 。而 DROther 感知到拓撲變化時,向 224.0.0.6 發送 LSU 報文通告這個變化,DR 和 BDR 會偵聽這個組播地址。
ExSart(交換開始)接來下,路由器會進入 ExStart 狀態,發送空的 DD 報文,用于協商 Master/Slave ,Router-ID 最大的路由器成為 Master 路由器,DD 報文的序列號由 Master 路由器決定。協商 Master/Slave 的報文是空的、不攜帶 LSA 頭部的 DD 報文,這時報文的 I 位被設置成 1 。
Exchange(交換)接下來,路由器進入 Exchange 狀態,向鄰居發送描述自己 LSDB 的 DD 報文,DD 報文中包含 LSA 頭部。DD 報文逐個發送,每個報文中都有 DD 序列號,DD 序列號由 Master 路由器決定,序列號在 DD 報文的交互過程中遞增,確保交互過程的有序性和可靠性。
什么是 DD 報文?DD 報文用于描述 LSDB ,攜帶 LSDB 中 LSA 的頭部數據,而非完整的 LSA 內容。在路由器鄰接關系的建立過程中,先用空的 DD 報文協商 Master/Slave ,然后用 DD 報文描述各自的 LSDB ,這種 DD 報文包含 LSDB 里的 LSA 頭部。路由器可以使用多個 DD 報文來描述 LSDB ,為了保證 DD 報文傳輸的順序和可靠,Master 路由器使用序列號字段遞增的方式,主導整個 LSDB 描述過程。
Loading(加載)接下來,路由器進入 Loading 狀態,路由器向鄰居發送 LSR 請求 LSA 的完整信息。鄰居使用 LSU 進行回應,LSU 報文里有 LSA 的完整信息。在收到 LSU 報文后,路由器需要發送 LSAck 對 LSA 進行確認。
Full(完整)當接口上需要請求的 LSA 列表為空時,表示路由器已經完成了和鄰居的 LSDB 同步,沒有再需要請求的 LSA 了,這時鄰居的狀態就是 Full 。
路由計算接下來,路由器開始計算路由。先評估一臺路由器到另一臺路由器需要的度量值。OSPF 協議是根據路由器的每一個接口的度量值決定最短路徑的。一條路由的開銷是指到達目的網絡的路徑上所有路由器接口的度量值總和。
度量值和接口帶寬有關,路由器的接口度量值是根據公式 100/帶寬( Mbps )計算出來的,它作為評估路由器之間網絡資源的參考值。另外也可以通過命令手工指定路由器的度量值。
什么是度量值?
每種路由協議對度量值的定義是不同的,OSPF 使用 Cost(開銷)作為路由度量值,Cost 值越小,則路徑(路由)越優。每一個激活 OSPF 的接口都有一個接口的 Cost 值,值等于 100/接口帶寬 Mbit/s,計算結果取整數部分,當結果小于 1 時,值取 1 。這個值也可以人為修改,修改值會直接影響 Cost 值的計算,從而影響網絡中 OSPF 路由的選擇。
同步 OSPF 區域內每臺路由器的 LSDB ,路由器通過交互 LSA 實現 LSDB 的同步。LSA 不但攜帶了網絡連接狀況信息,而且攜帶各接口的 Cost 信息。
由于一條 LSA 是對一臺路由器或一個網段拓撲結構的描述,整個 LSDB 就形成了對整個網絡的拓撲結構的描述。所有路由器得到一張完全相同的圖。
使用 SPF(最短路徑優先算法)計算出路由。OSPF 路由器用 SPF 算法以自己為根節點,計算出一棵最短路徑樹。這棵樹上,由根到各個節點的累計開銷最小,也就是從根到各個節點的路徑都是最優的,這樣就獲得了由根去往各個節點的路由。計算完成后,路由器將路由加入到 OSPF 路由表。當 SPF 算法發現有兩條到達目的網絡的路由的 Cost 值相同,會將這兩條路由都加入到 OSPF 路由表中,形成等價路由。
結尾這篇文章,僅僅只是按照 OSPF 的協議過程,進行了一部分的描述,這是為了讓我們對 OSPF 有個初步的了解。
X 關閉
X 關閉