前文我們瞭解了OSPF的4類、5類LSA,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15222969.html;今天我們來聊一聊外部路由型別和forwarding address相關話題;
我們知道在ospf中外部路由主要由asbr通過傳送5類LSA,將對應的路由資訊傳遞給其他區域的ospf路由器;如果對應ospf路由器和asbr不在同一區域,則對應區域的ABR會產生4類LSA,用來描述對應去往ASBR路由;通過4類和5類LSA,一條外部路由就成功被其他OSPF路由器學習到;對於ospf來說,外部路由有兩個型別,型別1和型別2;兩者主要區別是計算開銷的方式不同;對於型別1的外部路由,其計算開銷的方式和內部計算開銷的方式一樣,累加介面開銷;而對於型別2的外部路由,其計算開銷的方式是隻計算外部路由開銷,不計內部開銷;即當匯入的外部路由開銷是多少,內部任何地方學習到的該路由開銷都是一樣的;
ospf外部路由型別
實驗:如下拓撲,配置ospf
分析:正常情況下,我們計算ospf路由開銷的方式是介面開銷累加之和;比如R1到達4.4.4.4的路由開銷就是R4的lo1介面開銷+R3的g0/0/1的開銷+R2的g/0/01的開銷+R1的g0/0/0開銷(路由學習方向入站介面開銷累加或者資料出站介面開銷累加);我們先配置好ospf,然後把4.4.4.4的路由引入到ospf中,看看對應學習到4.4.4.4的路由,對應開銷是多少;
R1的配置
sys sys R1 int g0/0/0 ip add 12.0.0.1 24 ospf 1 router-id 1.1.1.1 area 1 net 12.0.0.0 0.0.0.255
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 1 net 12.0.0.0 0.0.0.255 area 0 net 23.0.0.0 0.0.0.255
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 0 net 23.0.0.0 0.0.0.255 area 2 net 34.0.0.0 0.0.0.255
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.0 0.0.0.255
在R4上引入直連路由到ospf程式中
提示:上述新建了一條acl 主要用來匹配源地址為4.4.4.4的路由;在引入直連路由到ospf時,我們用路由策略把acl 2000作為匹配條件,把對應路由引入到ospf中;簡單講就是隻引入4.4.4.4的路由到ospf中;
驗證:在R3上檢視ospf路由表,看看對應學習到4.4.4.4的路由開銷是多少?
提示:可以看到在R3學習到達4.4.4.4的路由開銷為1,對應型別為2;
驗證:在R1上檢視ospf路由表,看看對應學習到4.4.4.4的路由開銷是多少?
提示:可以看到在R1上學習到達4.4.4.4的路由開銷還是1?那麼從R1傳送資料到4.4.4.4,中間經過R2和R3,中間怎麼會沒有開銷呢?其實原因就在於外部路由的型別;在ospf中預設引入的外部路由的型別是型別2,其計算開銷的方式是外部路由引入時開銷是多少就是多少,不管中間經過多少路由器,其開銷都一樣;
驗證:更改引入的外部路由開銷為20,看看在R1、R2或R3學習到達路由是否也是20?
在R1上檢視對應路由的開銷
在R2上檢視對應路由的開銷
在R3上檢視對應路由的開銷
提示:可以看到三臺路由其學習到達4.4.4.4路由的開銷都是開始匯入外部路由時更改的開銷20;
更改外部路由型別為型別1
驗證:在R3檢視對應ospf學習到4.4.4.4的路由開銷已經型別
提示:可以看到我們把R4引入的外部路由型別更改為型別1以後,對應在R3學習到對應路由的開銷就符合ospf開銷計算方式(路由入站介面開銷綜合);即此時外部路由和內部路由計算開銷的方式一樣;
驗證:在R1上檢視對應路由開銷,看看是否還是20?
提示:可以看到在R1上學習到達4.4.4.4的路由開銷為23;其外部路由的型別為型別1;相比型別2來講,型別1的外部路由要比型別2的外部路由可信度要高;因為型別1的外部路由是把外部路由和內部路由都看作ospf路由,其計算開銷的方式都一樣,不區別對待;從精確程度來講,型別1的精確程度高於型別2;
forwarding address欄位
forwarding address是5類LSA當中的一個欄位,其主要作用是解決次優路由選擇下一跳地址;我們知道對於5類LSA只會存在有外部路由引入的ospf環境;那麼對於非ASBR路由器,如果和ASBR同區域,它們學習到的外部路由下一跳通常為ASBR的地址;如果和ASBR不在同一區域,它們學習到的外部路由下一跳通常指向對應區域傳送4類LSA的ABR路由器地址;一般正常情況下forwarding address欄位都是0.0.0.0,但在特殊環境中,該欄位主要用來標識對外部應路由的下一跳地址;
次優外部路由的產生
提示:從原理上講RTA學習到的外部路由,對應下一跳是指向ASBR的介面地址;這樣一來RTA要想和RTC通訊,資料包會先傳送給RTB,然後再由RTB轉發給RTC;很明顯這樣的流量走向不是最優的路徑;最優的路徑就是RTA直接把資料包傳送給RTC;要想影響路由走向,對應下一跳不應該指向RTB而應該指向RTC才對;
實驗:如下拓撲環境,配置ospf、RIP,然後把對應RIP路由引入到ospf中
分析:R5和R6跑ospf,R5和R7跑RIP;對於R5來講,它即可通過ospf學習到ospf的路由,又能通過RIP學習到RIP的路由;而對於R6來講,它想要和R7的lo1介面通訊,首先要有對應的路由;我們可以通過R5匯入rip的路由到ospf中,讓R6學習到7.7.7.7的路由;
R5的配置
sys sys R5 int g0/0/0 ip add 192.168.100.5 24 ospf 1 router-id 5.5.5.5 area 0 net 192.168.100.5 0.0.0.0 rip 1 ver 2 net 192.168.100.0
R6的配置
sys sys R6 int g0/0/0 ip add 192.168.100.6 24 ospf 1 router-id 6.6.6.6 area 0 net 192.168.100.6 0.0.0.0
R7的配置
sys sys R7 int g0/0/0 ip add 192.168.100.7 24 int lo 1 ip add 7.7.7.7 32 rip 1 ver 2 net 192.168.100.0 net 7.0.0.0
驗證:在R5上檢視ospf路由表
提示:可以看到R5通過RIP學習到7.7.7.7的路由,下一跳指向R7的g0/0/0介面;
檢視R6的路由表
提示:R6的路由表沒有顯示任何動態路由協議學習到的路由;其實R6通過ospf學習到192.168.100.0/24的路由;但ospf學習到的路由沒有直連優先順序高,所以在路由表中顯示的還是直連;
在R5上將RIP學習到的路由匯入到ospf中
在R6上抓包檢視對應5類LSA中的內容
提示:我們在交換機上抓包,抓到了R5傳送的5類LSA,其中該LSA中描述了到達7.7.7.7的路由,並且將forwarding address欄位的值置為了R7的介面地址;這表示R6學習到達7.7.7.7的路由,其下一跳就指向192.168.100.7;這樣做的目的就是避免次優路徑的產生;
驗證:檢視R6學習到7.7.7.7的路由,下一跳的地址是否指向R7的地址?
提示:可以看到此時R6的ospf路由表和ip路由表中對應7.7.7.7的路由下一跳都指向了R7的介面地址,而不是ASBR R5傳送5類LSA介面地址;
總結:通過上述實驗可以看到,在ospf中,對應傳送5類LSA介面地址和外部引入路由的下一跳在同一網段,此時ospf在引入外部路由時,它會將forwarding address欄位置為對應外部路由的下一跳,其目的就是告訴其他ospf路由器將學習到的外部路由下一跳置為forwarding address指定的地址;這樣可以避免次優路徑的產生;