前文我們了解了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指定的地址;這樣可以避免次優路徑的產生;
