文章目錄
- 0. 路由分類
- 1. OSPF介紹
- 1.1 概念
- 1.2 報文類型
- 2. 鄰接關系的建立
- 2.1 鄰居關系的建立
- 2.2 鄰接關系的形成
- 2.3 ospf狀態機
- 3. DR與BDR
- 3.1 為什么要有DR和BDR?
- 3.2 DR和BDR的選舉原則
- 4. ospf的配置
- 4.1 內部優先級
- 5. 問題
- 5.1 三層環路如何解決?
- Ref
0. 路由分類
- 直連路由
- 靜態路由:需要管理員手動配置的路由
- 動態路由
- IGP(internal Gateway Protocol)內部網關協議,運行在
AS
內部;主要協議有:RIP、OSPF、ISIS、EIGRP(思科) - EGP(External Gateway Protocol)外部網關協議,運行在
AS
之間
- IGP(internal Gateway Protocol)內部網關協議,運行在
1. OSPF介紹
OSPF: Open Shortest Path First 開放最短路徑優先
1.1 概念
LSA
: Link State Advertcment; 鏈路狀態通告,主要包含了網段信息。
LSDB
:Link State DataBase, ospf路由器中來存儲鏈路狀態信息的數據庫。
RID
: router ID, 在ospf網絡中唯一標識一臺路由器。
主要工作流程:
ospf路由器通過將LSA
信息泛洪,獲得整個ospf網絡的鏈路狀態信息,進而形成各自的LSDB
。根據形成了的LSDB
,使用SPF
算法生成一顆最短路徑樹;最終通過路由計算,比較路由表中的表項,添加到路由表中。
1.2 報文類型
- hello報文
- DD(Database Description)報文
- LSR(Link State Request)報文
- LSU(Link State Update)報文
- LSACK(Link State Acknowledgment)報文
2. 鄰接關系的建立
在ospf網絡中,兩個路由器間要完成LSA
信息的交互,首先就要先進行鄰接關系的建立。
鄰接關系的建立分為兩個階段:
- 鄰居關系的建立
- 鄰接關系的形成
2.1 鄰居關系的建立
鄰居關系的建立是通過hello 報文完成的。
- 路由器A向路由器B發送Hello報文,報文中表明自己并沒有發現B。
- 路由器B收到報文后意識到鄰居A的存在,在發往路由器A的報文中聲明這一點。路由器B的狀態由Down變為Init。
- 路由器A收到路由器B的報文,自己意識到了鄰居的存在。在B發來的報文中B意識到A的存在。A直接進入2-way狀態。但A需要再發一個Hello報文, 在報文中聲明自己知道了B鄰居的存在。
- 路由器B收到報文,知道路由器A了解到自己的存在。路由器B進入2-way狀態。
Hello報文除了負責鄰居關系的建立,還負責維護鄰居關系(保活)。
Hello報文10s發送一次(Hello Time), 如果在40s內沒有收到對端的Hello報文,則認為鄰居關系失效,變為Down狀態。
2.2 鄰接關系的形成
鄰接關系的形成分為兩個階段,第一階段主要是獲取LSDB的目錄,相互之間了解缺少對方的哪部分報文;第二階段進行真正的LSA鏈路數據表項之間的請求交換。
第一階段開始,會發送兩個空的DD報文進行主從選舉,RID大的成為主路由器。選舉完成之后,開始交互真正的DD報文,真正報文在交互過程中,從路由器的DD報文序列號使用主路由器發過來的序列號,主路由器的DD報文序列號使用從路由器的序列號加一。這樣一種確認的機制叫作隱式確認,它保證了DD報文之間交互的可靠性。
第二階段就是真正的鏈路信息交換了,這里用到的是顯示確認機制。
從路由器向主路由器發送LSR(鏈路信息請求)報文,主路由器發送帶有鏈路信息LSU(鏈路信息更新)報文給從路由器;最后從路由器收到LSU后再發給主路由器對于這一條鏈路信息的確認LSACK報文。
不斷重復上面的過程,直到從路由器跟主路由器的LSDB同步了。
2.3 ospf狀態機
3. DR與BDR
DR(Designated Router): 指定路由器
BDR(Backup Designated Router): 備份指定路由器
DR other: 非DR各BDR的其他路由器
3.1 為什么要有DR和BDR?
對于沒有DR和BDR的網絡中,要知道整個網絡的鏈路信息,兩兩路由器之間就需要形成鄰接關系。
如果網絡中有n臺路由器,在沒有DR和BDR的網絡中, 則需要建立n(n-1)/2對鄰接關系;而如果是在DR和BDR的網絡中,其他路由器只需要各DR和BDR之間建立鄰接關系,只需要建立2n-3對鄰接關系即可。
而建立鄰接關系的第二階段會進行LSDB的交換,這部分報文比較大會浪費鏈路帶寬;因此對DR other 之間的路由器只需建立鄰居關系而不交換路由信息,因此可以大大節省鏈路帶寬。
3.2 DR和BDR的選舉原則
如果DR由于某種故障而失效,則網絡中的路由器必須重新選舉DR,并與新的DR同步。這需要較長的時間,在這段時間內,路由的計算有可能是不正確的。
為了能夠縮短這個過程,OSPF提出了BDR(Backup Designated Router)的概念。BDR是對DR的一個備份,在選舉DR的同時也選舉出BDR,BDR也和本網段內的所有路由器建立鄰接關系并交換路由信息。當DR失效后,BDR會立即成為DR。由于不需要重新選舉,并且鄰接關系已建立,所以這個過程非常短暫,這時還需要再重新選舉出一個新的BDR,雖然一樣需要較長的時間,但并不會影響路由的計算。
DR和BDR的選舉原則:
- 首先比較優先級,優先級范圍0~255, 優先級數值越大越優先。
- 如果優先級相同,則比較RID, RID越大越優先。
- 如果網絡中新增一臺優先級更高的路由器,其不會被選為新的DR路由器, DR不能被搶奪,我們稱之為DR的穩定性原則。
- 如果一臺DR故障,則BDR直接成為新的DR, 然后在DR other中再選舉一個新的BDR。
- 如果一臺路由器的優先級為0,則路由器不具備選舉權,它一定是DR other路由器。
- DR和BDR基于接口選舉,基于網段選舉。
4. ospf的配置
ospf進程號,這里只使用進程1
ospf 1 route-id 1.1.1.1
ospf是分區域的,區域0是核心區域。
area 0
直連網段宣告
network 10.1.12.0 0.0.0.255
network 192.168.1.0 0.0.0.255
ospf在接口宣告了網段信息后就會向相應的直連網段發送Hello
報文,開始鄰居關系的建立。
精確宣告
network 10.1.12.2 0.0.0.0
還可以在接口下進行宣告
ospf enable area 1
查看ospf鄰居信息
display ospf peer brief
查看ospf接口信息
display ospf interface g0/0/1
ospf的hello時間是能改的, 但一般不改。兩臺路由器之間hello時間不同無法建立鄰居關系。
ospf timer hello
修改優先級
ospf dr-priority 0
4.1 內部優先級
如上面的圖所示,如果路由器AR1與AR2之間有兩條路由;一條是ospf的路徑(10.1.12.0/24),另外一條是靜態路由(10.1.21.0/24)。
如果我們將靜態路由的優先級設置為10,也就是與ospf的默認優先級一致。我們會發現最終路由表上的是ospf的這條路徑。
這是因為路由器在比較完前綴和外部優先級后,繼續比較內部優先級,
這所謂的內部優先級其實就是協認的默認優先級的大小。
ospf的默認優先值為10,靜態路由的默認優先值為60,因此ospf更優先,因此加入路由表的是ospf的路徑。
更加具體的在前面的路由器工作原理那里有提及,在這里實際解釋內外優先級。內部優先級就是協議默認優先級,外部優先級就是可以配置的優先級。
5. 問題
5.1 三層環路如何解決?
- IP報文中有TTL字段,每次經過一個路由器都會減去一;TTL值為0的時候,路由器就會丟棄該包
- 路由協議設計也會防止環路的產生。比如ospf會通過SPF算出到目標網段的路徑,另一方面ospf有區域劃分,非核心區域之間不直接相連也能阻止環的產生。
Ref
huawei-support