前文我們了解了OSPF的網絡類型、幀中繼交換機映射以及路由器幀中繼映射相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15195762.html;今天我們來聊一聊OSPF中的虛連接相關話題;
在ospf里,為了避免區域間的環路,ospf規定不允許直接在兩個非骨干區域之間發布路由信息,只允許在一個區域內部或者在骨干區域和非骨干區域之間發布路由信息;因此,每個ABR(區域邊界路由器)都必須連接到骨干區域;即要求所有非骨干區域必須和骨干區域相連,同時骨干區域也必須連續;但是由於網絡設計、升級、合並、改造等因素,造成了不規范的區域架構,最終導致路由學習不完整,解決方法就是使用虛連接;什么是虛連接?虛連接就是一條邏輯的鏈路,作用有兩個,第一個作用是將非骨干區域和骨干區域邏輯的連接在一起;第二個作用就是為骨干區域提供冗余備份的邏輯鏈路,當骨干區域鏈路故障時,通過虛連接仍然可以保證骨干區域在邏輯上的聯通性;當然虛連接的存在增加了網絡的復雜程度,使故障的排除更加困難;因此,在網絡規划中我們要盡量避免使用虛連接;虛連接只是作為修復無法避免的網絡拓撲問題的一種臨時手段;如果一個網絡架構里使用了虛連接,這也意味着該網絡需要重新規划;
區域間路由環路的產生
提示:假設ospf允許非骨干區域間的ABR進行路由發布,那么上圖就很明顯是一個環路;當RTD在區域1里發布一條路由信息,對應RTB會學習到,同時RTB也會向RTC發送對應的路由信息,同樣的道理RTC也會向RTE發送路由信息;最終RTD發送的路由信息,從RTE發回給RTD,這樣一來就形成了區域間路由環路;為了避免這個多區域間路由環路,ospf就規定不允許非骨干區域間發送路由信息;如上圖,正常情況RTE和RTD不能互相發送路由信息,這樣環路就不會產生;
避免區域間路由環路
提示:為了防止區域間環路,ospf定義了骨干區域和非骨干區域以及三類LSA的傳遞規則;首先ospf划分了骨干區域和非骨干區域,所有非骨干區域均直接和骨干區域相連,並且骨干區域只有一個,非骨干區域之間的通許都要通過骨干區域中轉,骨干區域ID是固定為0;ospf規定從骨干區域傳來的三類LSA不再傳回骨干區域;通過上述規定,我們不難想象對於ABR來說,它必須和骨干區域直連,是少有一個接口屬於骨干區域;如果一個非骨干區域ABR沒有一個接口屬於骨干區域,那么對應網絡區域設計就是一個不規范的設計;最終導致路由學習不完整;
不規范的OSPF區域設計
提示:上圖區域2的ABR RTC並沒有任何一個接口是屬於區域0(骨干區域),所以類似這種區域設計是不規范的設計,在現網中應該盡量避免;
提示:對於這種骨干區域不連續的拓撲也是不規范的設計;對於ospf來說,骨干區域有且只有一個,並且所有非骨干區域必須和骨干區域相連才是規范的ospf區域設計;
不規范的ospf區域設計帶來的問題
實驗:如下拓撲圖,配置ospf
R1配置

sys sys R1 int g0/0/0 ip add 12.0.0.1 24 int lo 1 ip add 1.1.1.1 32 ospf 1 router-id 1.1.1.1 area 0 net 12.0.0.1 0.0.0.0 net 1.1.1.1 0.0.0.0
R2的配置

sys sys R2 int g0/0/0 ip add 12.0.0.2 24 int g0/0/1 ip add 23.0.0.2 24 ospf 1 router-id 2.2.2.2 area 0 net 12.0.0.2 0.0.0.0 area 1 net 23.0.0.2 0.0.0.0
R3的配置

sys sys R3 int g0/0/0 ip add 23.0.0.3 24 int g0/0/1 ip add 34.0.0.3 24 ospf 1 router-id 3.3.3.3 area 1 net 23.0.0.3 0.0.0.0 area 2 net 34.0.0.3 0.0.0.0
R4的配置

sys sys R4 int g0/0/0 ip add 34.0.0.4 24 int lo 1 ip add 4.4.4.4 32 ospf 1 router-id 4.4.4.4 area 2 net 34.0.0.4 0.0.0.0 net 4.4.4.4 0.0.0.0
驗證鄰居關系是否起來
在R1上驗證鄰居關系
在R2上驗證鄰居關系
在R3上驗證鄰居關系
在R4上驗證鄰居關系
提示:在各路由器上驗證鄰居關系,各鄰居都已正常full起來;
驗證:在R1上查看ospf學習到的路由
提示:可以看到在R1上ospf路由表中並沒有學習到area 2里的路由以及R4的lo接口路由也沒有學習到;
驗證:在R4上查看ospf學習到的路由
提示:對於R4來說它也沒有學習到area 0、area 1 以及R1的lo接口路由;其實原因很簡單,就是因為上述拓撲架構不是規范的區域,對應區域2並沒有和區域0相連,導致對應區域路由學習不完整;解決辦法,使用虛鏈路將area 2和骨干區域相連;
在R2的g0/0/1口和R3的g0/0/0口建立虛鏈路
提示:vlink-peer 后面是對應要建立虛連接路由器的router id,是在同一個區域內的;簡單講虛連接只能在同一非骨干區域內建立,不能跨區域建立;
在R3的g0/0/0口上建立虛連接
提示:可以看到在R3的ospf里對應區域里建立虛連接后,對應提示我們鄰居full了;
驗證:在R2、R3上驗證虛連接鄰居
提示:可以看到在對應的路由器上查看ospf虛連接信息對應路由器都把鄰居指向對端的router id 並且鄰居狀態都是full,這說明虛連接鄰居建立成功;
驗證:在R2的g0/0/1口抓包看看現在虛連接hello包和傳統hello包有什么不同
提示:在R2上我們抓到了兩種ospf hello包,一種是目標地址是224.0.0.5的組播包,一種是單播包;其中組播包里區域id都是1,單播包里區域id都是0;組播包是ospf 區域1正常hello包;單播包就是虛連接的hello包;
驗證:再次查看R1是否學習到區域2 以及R4上的路由?
提示:可以看到現在R1能夠正常學習到區域2以及R4lo接口的路由;
驗證:R4是否能夠正常學習到區域0、區域1 以及R1的路由呢?
提示:可以看到現在R4也能正常學習到區域0,區域1以及R1lo接口的路由;
虛連接給骨干區域帶來邏輯鏈路冗余備份
提示:當骨干區域鏈路斷開,對於原本走該鏈路的數據也就無法正常通過;此時我們可以通過在區域1建立邏輯的虛連接,讓對應原本走骨干區域鏈路的流量,通過虛連接鏈路實現通信;當骨干區域鏈路恢復正常,對應流量又會自動切回到骨干區域鏈路;從而實現對骨干區域鏈路做冗余備份的效果;
實驗:如下拓撲,配置ospf
分析:對於R1的來說,它訪問R2的lo1接口,肯定走R1和R2的直連鏈路;如果在沒有配置虛連接的情況下,當R1和R2的直連鏈路宕掉以后,對應通信就無法正常實現;
R1的配置

sys sys R1 int g0/0/0 ip add 12.0.0.1 24 int g0/0/1 ip add 13.0.0.1 24 int lo 1 ip add 1.1.1.1 32 ospf 1 router-id 1.1.1.1 a 0 net 12.0.0.1 0.0.0.0 net 13.0.0.1 0.0.0.0 net 1.1.1.1 0.0.0.0
R2的配置

sys sys R2 int g0/0/0 ip add 12.0.0.2 24 int g0/0/1 ip add 24.0.0.2 24 int lo 1 ip add 2.2.2.2 32 ospf 1 router-id 2.2.2.2 a 0 net 12.0.0.2 0.0.0.0 net 24.0.0.2 0.0.0.0 net 2.2.2.2 0.0.0.0
R3的配置

sys sys R3 int g0/0/0 ip add 13.0.0.3 24 int g0/0/2 ip add 35.0.0.3 24 ospf 1 router-id 3.3.3.3 area 0 net 13.0.0.3 0.0.0.0 area 1 net 35.0.0.3 0.0.0.0
R4的配置

sys sys R4 int g0/0/0 ip add 24.0.0.4 24 int g0/0/2 ip add 46.0.0.4 24 ospf 1 router-id 4.4.4.4 area 0 net 24.0.0.4 0.0.0.0 area 1 net 46.0.0.4 0.0.0.0
R5的配置

sys sys R5 int g0/0/0 ip add 35.0.0.5 24 int g0/0/1 ip add 56.0.0.5 24 ospf 1 router-id 5.5.5.5 area 1 net 35.0.0.5 0.0.0.0 net 56.0.0.5 0.0.0.0
R6的配置

sys sys R6 int g0/0/0 ip add 46.0.0.6 24 int g0/0/1 ip add 56.0.0.6 24 ospf 1 router-id 6.6.6.6 area 1 net 46.0.0.6 0.0.0.0 net 56.0.0.6 0.0.0.0
查看R1和R2的路由表
提示:可以看到R1通過ospf學習到R2lo接口的路由;
提示:同樣R2也通過ospf學習到R1lo接口的路由;
在沒有配置虛連接,看看R1到R2的lo1的路徑
提示:可以看到正常情況下,R1到R2的lo1接口的流量走R1和R2的直連鏈路;
當直連鏈路宕掉以后,看看對應通信是否還能繼續進行呢?
提示:可以看到當R1和R2的直連鏈路宕掉以后,對應去往R2的lo1接口的路由也隨之被刪除;此時R1並沒有R2的lo1接口的路由,所以現在R1是無法正常和R2的lo1接口通信;
在R3上配置虛連接
在R4上配置虛連接
提示:虛連接需要在同一非骨干區域內的兩個路由器上都配置對端為本端的鄰居;從上面的實驗可以看到我們在R3和R4的對應ospf 區域1里配置了虛連接以后,對應虛連接鄰居就起來;
驗證:現在看看R1上是否有到達R2的lo1接口的路由呢?
提示:可以看到雖然R1到R2的直連鏈路是down的狀態,但通過R3和R4建立的虛連接,對應到達R2的lo1接口的路由還是能夠正常學習到;
驗證:現在在R1上和R2的lo1接口通訊,看看對應數據包走的鏈路
提示:可以看到現在R1和R2的lo1接口的通信可以走R3--->R5---->R6---->R4---->R2;
當R1和R2直連鏈路恢復正常,看看對應通訊鏈路是否會切換回去呢?
提示:當R1和R2直連鏈路恢復以后,對應ospf鄰居也會重新建立;
現在R1和R2的lo1接口通信是否會切換到R1和R2的直連鏈路呢?
提示:可以看到對應骨干區域鏈路恢復正常以后,對應的通信路由也隨之被切換到對應的骨干區域鏈路;