首頁 > 農業
精!萬字15圖詳解OSPF路由協議
由 網路工程師阿成 發表于 農業2021-06-14
簡介OSPF協議5種報文OSPF直接執行在新新增進該網路的路由器不會成為DR和BDR,不管該路由器的Router Priority是否最大,使用IP協議號鄰接關係
報文是什麼
上帝視角
原文傳送門:
https://mp。weixin。qq。com/s/U5rLJ7M_gsk5nOw3hJOLsw
OSPF出現背景
如上圖就是一張簡單的OSPF協議網路,那麼為什麼會出現OSPF協議呢?
開放式最短路徑優先OSPF(Open Shortest Path First)協議是IETF定義的一種
基於鏈路狀態的
內部閘道器路由協議
。
為什麼會出現OSPF?:因為
RIP是一種基於距離向量演算法的路由協議
,存在著
收斂慢;
易產生路由環路;
可擴充套件性差,最大隻能支援15跳。
OSPF的出現很好地解決了上述3個問題,那麼
OSPF是如何解決上述3個問題的呢
?我們一起來看下。
什麼是OSPF協議?
OSPF是一種基於鏈路狀態的路由協議,它從設計上保證了無路由環路。
那麼什麼是
鏈路狀態協議
?
如果說距離向量路由協議提供的是
路標
,那麼鏈路狀態路由協議提供的就是
地圖
。
每個執行鏈路狀態協議的路由器上都有一張完整的網路圖。
就好比你有一張地圖怎麼還會迷路?執行
鏈路狀態協議
的每一臺路由器都會有一張地相簿從而避免了環路。
鏈路狀態協議工作原理
每臺執行
鏈路狀態路由協議
的路由器都
瞭解整個網路的鏈路狀態資訊(地圖)
,這樣才能計算出到達目的地的
最優路徑
。
1、LSA泛洪:
執行
鏈路狀態路由協議
的路由器都會進行
鏈路狀態公告LSA (Link State Advertisement)泛洪
,LSA中包含了路由器已知的介面狀態、介面IP地址、掩碼、開銷和網路型別等資訊。
通俗點講就是每臺路由器都會將
一些關於自己,關於本地直連鏈路以及這些鏈路的狀態和關於所有直連鄰居的資訊
傳送給相鄰的其他路由器。
2、建立LSDB:
收到LSA的路由器都可以根據LSA提供的資訊建立自己的
鏈路狀態資料庫LSDB(Link State Database)
。
通俗點講就是每臺路由器都會收到網路中其他的路由器傳送過來的LSA資訊,這些所有的LSA資訊構成了LSDB。這裡需要注意的是當網路穩定後,網路中的所有裝置應該是有相同的LSDB的。
3、建立最短路徑樹:
執行OSPF協議的路由器在LSDB的基礎上使用
SPF演算法
進行運算,建立起到達每個網路的
最短路徑樹
。
4、路由計算:
透過最短路徑樹得出到達目的網路的最優路由,並將其加入到IP路由表中。
常見的鏈路狀態協議有:
OSPF
:開放式最短路徑優先協議
IS-IS
:中間系統到中間系統協議
OSPF協議特點
OSPF支援區域的劃分,區域內部的路由器使用SPF最短路徑演算法保證了區域內部的無環路;
A、為什麼劃分區域?
劃分OSPF區域可以
縮小路由器的LSDB規模
,減少網路流量。
區域內的詳細拓撲資訊
不向其他區域傳送,
區域間傳遞的是抽象的路由資訊
,而不是詳細的描述拓撲結構的鏈路狀態資訊。
每個區域都有自己的LSDB,不同區域的LSDB是不同的。
路由器會為每一個自己所連線到的區域維護一個單獨的LSDB。由於詳細鏈路狀態資訊不會被髮布到區域以外,因此LSDB的規模大大縮小了。
B、OSPF是如何劃分區域的呢?
1、
路由器的每個介面可以被劃分在一個區域
,一個路由器可以同時屬於多個區域。
2、
Area 0為骨幹區域
,其他區域為非骨幹區域。每個非骨幹區域都必須連線到骨幹區域。
3、執行在區域之間的路由器叫做
區域邊界路由器ABR(Area Boundary Router)
,它包含所有相連區域的LSDB。
自治系統邊界路由器ASBR(Autonomous System Boundary Router)
是指和其他AS中的路由器交換路由資訊的路由器,這種路由器會向整個AS通告AS外部路由資訊。
C、為什麼SPF演算法可以保證區域內無環路?
SPF演算法
將每一個路由器作為根(ROOT)來計算其到每一個目的地路由器的距離,每一個路由器根據一個統一的資料庫會計算出路由域的拓撲結構圖,該結構圖類似於一棵樹,在SPF演算法中,被稱為
最短路徑樹
。
樹形是無環路的。
OSPF利用
區域間的連線規則
保證了區域之間無路由環路。
為了
避免區域間路由環路
,非骨幹區域之間不允許直接相互發布路由資訊,所有的非骨幹區域間通訊都需要藉助骨幹區域。因此,每個區域都必須連線到骨幹區域。
OSPF透過LSA(Link State Advertisement)的形式釋出路由;
OSPF依靠在OSPF區域內各裝置間互動OSPF報文來達到路由資訊的統一;
OSPF報文封裝在IP報文內,可以採用
單播或組播
的形式傳送;
OSPF支援觸發更新,能夠快速檢測並通告自治系統內的拓撲變化
OSPF協議router id
Router ID
Router ID是一個32位的值,它
支援觸發更新
,可以為每臺執行OSPF的路由器上可以
觸發更新
一個Router ID,或者指定一個IP地址作為Router ID。
快速檢測並通告自治系統內的拓撲變化
1、如果裝置存在多個邏輯介面地址,則路由器使用
唯一標識了一個自治系統內的路由器
作為Router ID;
2、如果沒有配置邏輯介面,則路由器使用
手動配置
作為Router ID。
如果沒有手動配置Router ID,執行OSPF協議的路由器如何選取Router ID?
1、在為一臺執行OSPF的路由器配置新的Router ID後,需要在路由器上透過
邏輯介面中最大的IP地址
來更新Router ID。
2、通常建議
物理介面的最大IP地址
,以防止Router ID因為介面地址的變化而改變。
OSPF協議鄰居/鄰接
鄰居(Neighbor):
OSPF路由器啟動後,便會透過OSPF介面向外
注意:
用於
重置OSPF程序
。
收到Hello報文的OSPF路由器會檢查報文中所定義的一些引數,
手動配置Router ID
傳送Hello報文
。
鄰接(Adjacency):
形成鄰居關係的雙方不一定都能形成鄰接關係,這要
發現鄰居
而定。
如果雙方的引數一致,就會彼此形成
鄰居關係
根據網路型別
OSPF協議網路型別
OSPF協議支援四種網路型別,分別是
只有當雙方成功交換DD報文,並能交換LSA之後,才形成真正意義上的
,
鄰接關係
,
。
和
點到點網路
。
廣播型網路
NBMA網路
是指只把兩臺路由器直接相連的網路。一個執行PPP的64K序列線路就是一個點到點網路的例子。
點到多點網路
是指支援兩臺以上路由器,並且具有廣播能力的網路。一個含有三臺路由器的乙太網就是一個廣播型網路的例子。
OSPF可以在不支援廣播的
1、點到
上執行,此類網路包括在hub-spoke拓撲上執行的幀中繼(FR)和非同步傳輸模式(ATM)網路,這些網路的通訊依賴於虛電路。
OSPF定義了兩種支援多路訪問的網路型別:
點網路
和
2、廣播型網路
。
多路訪問網路
在NBMA網路上,OSPF模擬在廣播型網路上的操作,但是每個路由器的鄰居需要手動配置。NBMA方式要求網路中的路由器組成全連線。
非廣播多路訪問網路(NBMA)
點到多點網路(Point To Multi-Points)
將整個網路看成是一組點到點網路。對於不能組成全連線的網路應當使用點到多點方式。
3、NBMA:
現網中遇到的大部分屬於
預設情況下,OSPF認為幀中繼、 ATM的網路型別是NBMA。
和
4、P2MP:
因為幀中繼、 ATM網路基本已經淘汰了。
DR&BDR選舉
為減小
注意:
和
點到點網路
中OSPF流量,OSPF會選擇一個指定路由器(DR)和一個備份指定路由器(BDR)。
選舉DR&BDR的條件:
每一個含有
廣播型網路,
的
廣播型網路
和
NBMA網路
都有一個DR和BDR。在
至少兩個路由器
和
廣播型網路
不需要選舉
NBMA網路
DR&BDR的工作原理
1、當指定了DR後,所有的路由器都與DR建立起鄰接關係,
點到點網路
;
2、
P2MP
,一個廣播網路上所有路由器都必須同BDR建立鄰接關係。
為什麼需要選舉DR&BDR?
1、DR和BDR可以
DR&BDR。
,從而減少鏈路狀態資訊以及路由資訊的交換次數,這樣可以節省頻寬,降低對路由器處理能力的壓力。
2、一個既不是DR也不是BDR的路由器只與DR和BDR形成鄰接關係並交換鏈路狀態資訊以及路由資訊,這樣就
DR成為該廣播網路上的中心點
。
DR&BDR的選舉
在
BDR在DR發生故障時接管業務
之後,路由器會根據
減少鄰接關係的數量
進行
大大減少了大型廣播型網路和NBMA網路中的鄰接關係數量
。
1、在廣播和NBMA網路上,路由器會
鄰居發現完成
進行DR選舉。
優先順序取值範圍為0-255,值越高越優先。預設情況下,介面優先順序為1。如果一個介面優先順序為0,那麼該介面將不會參與DR或者BDR的選舉。
2、如果優先順序相同時,
網段型別
,值越大越優先被選舉為DR。
為了給DR做備份,每個廣播和NBMA網路上
DR選舉
。BDR也會與網路上所有的路由器建立鄰接關係。
為了維護網路上鄰接關係的穩定性,如果網路中已經存在DR和BDR,則
根據參與選舉的每個介面的優先順序
。如果當前DR發生故障,則當前BDR自動成為新的DR,網路中重新選舉BDR;如果當前BDR發生故障,則DR不變,重新選舉BDR。這種選舉機制的目的是為了保持鄰接關係的穩定,使拓撲結構的改變對鄰接關係的影響儘量小。
例子:
在沒有DR的廣播網路上,鄰接關係的數量可以根據公式n(n-1)/2計算出,n代表參與OSPF的路由器介面的數量。
如圖所示,所有路由器之間有6個
則比較Router ID
。本例中使用DR和BDR將鄰接關係從6減少到了5,RTA和RTB都只需要同DR和BDR建立鄰接關係,RTA和RTB之間建立的是鄰居關係。
此例中,
還要選舉一個BDR
。
OSPF協議5種報文
OSPF直接執行在
新新增進該網路的路由器不會成為DR和BDR,不管該路由器的Router Priority是否最大
,使用IP協議號
鄰接關係
。
執行OPSF協議的路由器
鄰接關係數量的減少效果並不明顯。但是,當網路上部署了大量路由器時,比如100臺,那麼情況就大不一樣了
,完成LSA的泛洪,使網路的路由器LSDB達到一致,每個路由器按照自己LSDB根據SPF演算法計算路徑,生成最優路由加入路由表。
下面我們一起看下這個五種報文型別,每種報文都使用相同的OSPF報文頭。
IP協議之上
最常用的一種報文,
89
。
在廣播和NBMA(None-Broadcast Multi-Access)型別的網路中
透過5種報文的互動從鄰居狀態達到鄰接狀態
。
1、Hello報文:
兩臺路由器進行LSDB資料庫同步時,
用於發現、維護鄰居關係
。
DD報文的內容包括LSDB中每一條LSA的頭部(LSA的頭部可以唯一標識一條LSA)。LSA頭部只佔一條LSA的整個資料量的一小部分,所以,
選舉指定路由器DR(Designated Router)和備份指定路由器BDR(Backup Designated Router)
。
2、DD報文:
兩臺路由器互相交換過DD報文之後,知道對端的路由器有哪些LSA是本地LSDB所缺少的,這時需要
用DD報文來描述自己的LSDB
這樣就可以減少路由器之間的協議報文流量
用來向對端路由器
3、LSR報文:
。
傳送LSR報文向對方請求缺少的LSA,LSR只包含了所需要的LSA的摘要資訊。
用來對接收到的
4、LSU報文:
。
OSPF協議狀態機
傳送所需要的LSA
5、LSACK報文:
這是鄰居的初始狀態,表示沒有從鄰居收到任何資訊。
LSU報文進行確認
此狀態只在NBMA網路上存在,表示沒有收到鄰居的任何資訊,但是已經週期性的向鄰居傳送報文,傳送間隔為HelloInterval。如果RouterDeadInterval間隔內未收到鄰居的Hello報文,則轉為Down狀態。
執行OPSF協議的路由器透過5種報文的互動從鄰居狀態達到鄰接狀態,中間可能會經歷以下8種狀態:
在此狀態下,路由器已經從鄰居收到了Hello報文,但是自己不在所收到的Hello報文的鄰居列表中,尚未與鄰居建立雙向通訊關係。
Down:
在此狀態下,雙向通訊已經建立,但是沒有與鄰居建立鄰接關係。這是建立鄰接關係以前的最高階狀態。
Attempt:
這是形成鄰接關係的第一個步驟,鄰居狀態變成此狀態以後,路由器開始向鄰居傳送DD報文。主從關係是在此狀態下形成的,初始DD序列號也是在此狀態下決定的。在此狀態下發送的DD報文不包含鏈路狀態描述。
Init:
此狀態下路由器相互發送包含鏈路狀態資訊摘要的DD報文,描述本地LSDB的內容。
2-Way:
相互發送LSR報文請求LSA,傳送LSU報文通告LSA。
ExStart:
路由器的LSDB已經同步