一、背景說明
ospf作爲IGP兩大協議之一,有很多值得深挖的地方,僅通過一篇文章遠遠不夠,後續還將通過多章篇幅進行說明。
二、ospf建立鄰居的條件
儘管ospf作爲一種鏈路狀態協議,每一臺路由器是通過lsa報文(其中包含其他路由器直連網段)在本地計算後形成以自己爲根的路由表,但出於安全或其他方面的考慮ospf不是會和任意一臺路由器建立鄰居關係,ospf建立鄰居有下面幾個前提條件:
1. 直連路由的接口要宣告進同一個區域中(area)
2. 認證類型和認證密碼要一致,查看命令
[R1]display ospf brief
3. 直連路由器的route id衝突不能建立起鄰居,route id要求在同一域中唯一, 查看命令
[R1]display ospf routing
4. hello/dead時間間隔要一致,查看命令
[R1]display ospf routing
[R1-GigabitEthernet0/0/0]ospf timer hello/dead
5. 處於同一廣播域的路由器接口網絡類型要保持一致,查看命令,接口類型可修改
[R1]display ospf brief
[R1-GigabitEthernet0/0/0]ospf network-type broadcast/p2p
6. MA網絡(以太網)中物理接口的子網掩碼位數要一致,p2p網絡(串口)中可以不一致
如上圖所示,R1跟R2之間處於同一廣播域的路由器接口儘管物理地址掩碼不一致,但由於是p2p網絡,仍然能建立鄰居關係。R2與R3由於是MA網絡同一廣播域的路由器接口儘管物理地址掩碼不一致則無法建立鄰居。將R2,R3的網絡類型改爲p2p後,鄰居建立成功。
三、路由器之間lsa報文傳遞
前文得知,每一臺路由器會將自己直連網段的信息通過lsa發送,這樣假設同一廣播域中有n太路由器,就會有n*(n-1)/2個發送通道,造成了帶寬的浪費。
所以規定了只有dr和bdr跟所有的路由器是full狀態
其他drother角色的路由器之間2way狀態,不傳遞lsa
所有路由器都通過224.0.0.5地址傳遞hello信息
只有dr和bdr角色通過224.0.0.6地址來接收lsa
四、ospf的area與虛鏈路
爲了進一步降低帶寬消耗,又可將ospf一個域劃分爲多個區域(area),每個路由器的1、2類lsa只能在本area中傳播,area id取值範圍在0-4294967295,規定只有area 0爲骨幹區域,所有非0的area爲非骨幹區域,連接骨幹區域與非骨幹區域的路由器則稱爲ABR(area border router),area 0在一個域中有且只有一個。
上圖中R2爲ABR,連接了area0與area1,所有該路由器通過3類lsa將不同area之間的路由相互注入
配置命令爲:
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24
[R1-GigabitEthernet0/0/0]q
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 12.0.0.2 24
[R2-GigabitEthernet0/0/0]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 23.0.0.2 24
[R2-GigabitEthernet0/0/1]q
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 12.0.0.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]q
[R2-ospf-1]area 1
[R2-ospf-1-area-0.0.0.1]network 23.0.0.2 0.0.0.0
[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]ip add 23.0.0.3 24
[R3-GigabitEthernet0/0/0]q
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 1
[R3-ospf-1-area-0.0.0.1]network 23.0.0.3 0.0.0.0
五、ospf的虛鏈路
有時候可能因爲特殊原因,非骨幹區域沒有跟area 0直接相連
由於ospf本身的防環機制,不同area之間的路由必須通過area 0來發布,所以此時area 2中路由信息就無法通過1、2類lsa傳遞給area 0並通過area 0向其他區域發佈
此時就需要用到虛鏈路,虛鏈路本質上是一種隧道技術,他邏輯上擴大了area 0的範圍
上文中說道area 2的1、2類lsa無法傳遞給area 0,拓撲中能看出area 0與area 2之間相隔了一個area 1,所以就需要在area 1的兩臺路由器之間建立隧道
R2路由器配置:
[R2]ospf 1
[R2-ospf-1]area 1
[R2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 #3.3.3爲要與R2路由建立虛連接的路由route id值
R3路由器配置:
[R3]ospf 1
[R3-ospf-1]area 1
[R3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
再到R2上看,此時已經學習到4.4.4.0/24網段的路由了。
儘管已經相互學習到路由,但R2上無法直接通過鄰居接口
需要通過ospf虛擬連接命令查看
六、虛鏈路的使用場景
上面介紹了在特殊情況下沒有直接連接area 0的區域可以使用虛鏈路通過隧道進行連接,但虛鏈路不是爲這種場景設計,虛鏈路多用於路由的備份。
如下圖所示,此時如果R1與R2之間的連線故障
則拓撲結構就變爲
儘管area 1與每個area 0都相連,但一個域中只能存在一個area 0,所以此時給R3與R4之間加一條虛鏈路能防止這種情況的發生。