前文我們了解了OSPF中的虛連接相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15202348.html;今天我們來聊一聊OSPF數據包中LSA類型相關話題;
我們知道OSPF的核心就是通過LSA建立LSDB數據庫,然后根據SPF算法從LSDB數據庫中的內容計算出對應的路由;其中LSA並不是ospf的數據包類型,它存在於LSU當中;對於不同類型的LSA,其作用和內容也各不相同;
LSA頭部
提示:LSA是ospf鏈路狀態信息的載體,是LSDB的最小組成單位,即lsdb是由一條條LSA構成的;所有的LSA都擁有相同的頭部;其中LS age表示LSA已經生存的時間,單位是秒,默認這個字段會每半個小時更新一次,即1800秒就會更新一次LSA;LS type字段主要用於標識LSA的格式和功能,對於不同類型的LSA其格式和功能各不相同,常用的LSA類型有五種;Link State ID用於描述該LSA所描述的鏈路的標識;advertising Router用於描述產生該LSA的路由器的router ID;LSsequence number用於檢測舊的和重復的LSA;LS type,Link State ID和Advertising Router這三個字段共同標識了一條LSA,即LSA判斷是否一樣,就看這三個字段是否一樣;
Router—LSA描述P2P網絡
實驗:如下拓撲,配置OSPF
R1的配置

sys sys R1 int s4/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 s4/0/0 ip add 12.0.0.2 24 int lo 2 ip add 2.2.2.2 32 ospf 1 router-id 2.2.2.2 area 0 net 12.0.0.2 0.0.0.0 net 2.2.2.2 0.0.0.0
驗證:在R1上抓包,看看對應LSU中的LSA的類型和內容
提示:從上面的抓包信息可以看到,對應LSU中LSA的類型為Router-LSA;描述的是1.1.1.1這條鏈路的信息;其中該LSA是由1.1.1.1這台路由器發出的;該LSA里包含了兩條鏈路,一條是12.0.0.0,掩碼是24,開銷為48;一條是1.1.1.1,掩碼為32,開銷為0;當然這些是我們用抓包軟件上抓到的ospf LSU中的內容;我們也可以用命令在對應路由器上查看;
在R1上查看自己發送的一類LSA內容
提示:type是用於描述LSA的類型;其中Router表示一類LSA,該LSA是由路由器自己產生,主要用於描述自身所在區域鏈路狀態信息;ls id表示鏈路狀態的ID;adv rtr用於描述產生此LSA的路由器router id ;第一個link ID表示鄰居路由器的router id;data表示宣告該路由LSA的路由器接口ip地址;link type用於描述對應鏈路的網絡類型,metric用於描述對應鏈路的開銷;后面的link id用於描述對應的路由信息,其中link id用於描述對應子網的ip地址,data表示掩碼,metric用來描述開銷;這里需要注意一點,鏈路類型並不是ospf定義的四種網絡類型,router LSA描述的鏈路類型有,P2P(Point-to-point點到點類型);transnet是描述一個從本路由器到一個transit網段的連接;例如多路訪問的網段信息;stubnet是描述一個從本路由器到一個stu網段(例如到回環接口)的連接;
查看lsdb數據庫
提示:可以看到對應lsdb數據庫就只有兩條信息其類型為router,即一類LSA;一條是R1發送的一條是R2發送的,有了這兩條信息,ospf就可以根據里面的內容,構建出對應的路由;
查看ospf路由
提示:ospf根據lsdb中的LSA計算出對應的路由信息;從上面的實驗可以看到,對於點到點類型的鏈路,只需要用類型1的lsa就把對應網絡描述清楚了;
總結:一類LSA是每個路由器都會發送的LSA,其主要作用描述對應路由器接口所在區域的端口鏈路狀態的集合;該LSA只在所描述的區域內泛洪,不能跨區域;對於點到點類型的鏈路,一類LSA就足以描述清楚對應接口鏈路狀態;
Router-LSA描述MA網絡(多路訪問網絡)
實驗:如下拓撲,配置ospf
提示:該拓撲和上面的拓撲沒有太大的區別,唯一的區別是對應鏈路類型發生了變化,此拓撲鏈路類型就是BMA(廣播多路訪問);
配置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 lo 2 ip add 2.2.2.2 32 ospf 1 router-id 2.2.2.2 area 0 net 12.0.0.2 0.0.0.0 net 2.2.2.2 0.0.0.0
在R1上抓包,查看對應發送的一類LSA
提示:可以看到在R1上抓包,明顯比上次抓到的包要多,其次在LSU中的一類LSA中,對應網絡並沒有子網掩碼;對應網絡的子網掩碼卻在另一個LSA中,該LSA類型為Network-LSA;除了有對應接口ip的子網掩碼外,二類LSA還描述了對應鏈路上有幾個路由器,它們的router ID;
在R1上查看自己發送的一類LSA內容
提示:在ma網絡類型的Router-LSA中,Link ID是DR接口ip地址,Data為本地接口的ip地址;從上面的信息可以看到,現在在R1發送的一類LSA中,並沒有包含對應網絡的掩碼;其原因是在多路訪問網絡中一類LSA並不足以描述清楚對應鏈路狀態;所以產生了2類LSA;
在R1上查看二類LSA信息
提示:type表示LSA的類型,network表示二類LSA;LS id用來描述對應DR接口ip地址;adv rtr用來描述產生此二類LSA的路由器的router id,即DR的router id;net mask用來描述該網段的網絡掩碼;attached router用來描述連接到該網段的路由器列表;基於上述字段信息,LS id和Net mask做與運算,即可算出該網絡的ip網絡號;上述信息中我們可以看到DR所在路由器的router id為1.1.1.1,DR所在接口的ip地址為12.0.0.1;對應網絡的子網掩碼為24,對應有兩台路由器連接在這個多路訪問網絡中;
驗證:查看DR是否是R1的g0/0/0接口?
提示:可以看到R1的g0/0/0接口就是DR,和上述的描述一樣;
查看lsdb
提示:現在R1的LSDB中,要比點到點網絡中的LSDB要多一條二類LSA;
總結:在多路訪問網絡中,光憑一類LSA並不能完全描述清楚對應接口鏈路狀態,需要借助二類LSA進行補充;對於二類LSA來說,它是由DR接口發出,主要目的是用來描述多路訪問網絡上所連接路由器的列表,以及對應網絡的子網掩碼;該類型LSA只會在對應網絡所屬的區域內泛洪,不能跨區域;綜上所述,一類LSA和二類LSA都只能在對應接口所屬區域內泛洪,不能跨區域;對於一類LSA來說,是區域內的每個路由器產生,主要用來描述對應接口鏈路狀態集合;而二類LSA只會在多路訪問網絡中產生,其原因是二類LSA是DR接口發出,主要用來描述多路訪問網絡上所連接的路由器以及對應網絡的掩碼;而只有在多路訪問網絡中才會選舉DR,所以二類LSA只會在多路訪問網絡中存在,對於點到點網絡中不會存在二類LSA;也就是說在ospf里一類LSA是必須要產生的,對於是否有二類LSA產生,取決對應網絡類型;
對於單區域,有一類LSA和二類LSA就能夠將對應網絡描述清楚,對於多區域,ospf區域與區域間該如何傳遞路由信息呢?
實驗:如下拓撲配置ospf
R1的配置

sys sys R1 int g0/0/0 ip add 12.0.0.1 24 ospf 1 router-id 1.1.1.1 area 0 net 12.0.0.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 ospf 1 router-id 3.3.3.3 area 1 net 23.0.0.3 0.0.0.0
在R2上查看lsdb
提示:可以看到在R2上查看lsdb就有兩個數據庫,在area 0和area 1中都多了一條sum-net類型的LSA;這兩條LSA都是由R2產生;
在R2上查看sum-net類型LSA內容
提示:類型為sum-net的LSA是三類LSA,其中LS id用來描述目標網絡地址;ada rtr用來描述此LSA產生的路由器的router id;net mask用來描述對應目標網段的子網掩碼;通過上述的信息,我們不難看到,該LSA就是在描述去往12.0.0.0/24的網絡信息;該LSA是由R2產生,其開銷為1;
在R1或R3上查看abr或asbr
提示:可以看到R2是abr(區域邊界路由器);
區域間路由傳遞
提示:上述描述了三類LSA傳遞的過程;在area 1中RTD首先會發送一條一類LSA在區域1里泛洪(回環接口的網絡類型是點到點類型,所以沒有二類LSA)其主要目的是描述自己有192.168.1.0/24網絡接口,在RTB收到對應一類LSA以后,它一看自己有多個區域,所以它會把區域1里的一類LSA匯總,然后以三類LSA的格式向區域0發送;此時區域0中的其他路由器收到該類型LSA就會學習到對應去往192.168.1.0/24網絡的路由,下一跳都指向對應路由器發送三類LSA的接口ip地址(RTB);當區域0中的RTC收到RTB發送的三類LSA以后,它一看自己又連接着多個區域,此時RTC就會把RTB發送的LSA中宣告者(adv rtr)字段修改成自己,然后再向區域2發送;此時區域2中的路由器收到此類LSA,就會把對應去往192.168.1.0/24網絡的路由,下一跳指向RTC發送三類LSA的接口ip地址;對應192.168.2.0/24網絡也是類似的過程;首先在區域2里是一類LSA,然后經過RTC,RTC就會以三類LSA向區域0發送,此時宣告者還是RTC,在經過RTB時,對應三類LSA的宣告者會被修改為RTB,然后再由RTB向區域1發送;我們可以理解三類LSA就是對應的路由信息;一條三類的LSA只能描述一條路由信息;所以區域間有多少個網段,對應就會發送多少條三類LSA;
總結:三類LSA是由ABR產生,其主要作用是描述和傳遞區域間的路由;該類型LSA會在所生成的區域內泛洪,再由其他區域的ABR重新生成;重新生成的目的是更換宣告者,以便其他路由器找到對應的宣告者;對於單純的ospf進程來說(除開外部路由),有了一類、二類LSA可以描述單區域路由,三類LSA可以描述區域間的路由;有了這三種類型LSA,對應ospf的lsdb,路由計算都可以正常完成;