前文我們了解了OSPF外部路由類型以及forwarding address字段的作用,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15225673.html;今天我們來聊一聊OSPF LSA更新規則以及路由匯總相關話題;
LSA更新規則
我們知道在ospf的LSDB中,每個LSA都有一個序列號,最小以80000001開始,每更新一次LSA對應序列號都會加1(除刪除);默認情況下,如果一個LSA沒有什么變化,ospf會每個30分鍾自動更新一次;如果對應LSA有改動,則是立即更新;總之對應路由有變動對應LSA就會更新,每次更新都會表現在對應序列號的增加(除刪除);這意味着序列號越大,對應LSA就表示越新;除此之外在LSA的報文中還有一個LS Age,該字段主要用來描述對應LSA的生存時間,單位是秒,隨着時間的增長而增長;該字段的數字越小,表示對應LSA越新;一條LSA在向外泛洪之前,LS age的值需要增加inftransdelay(該值默認是1秒,表示在鏈路上傳輸的延遲);如果一條LSA的LS Age這個字段的值達到了LSRefreshTime(30分鍾),對應LSA會被重新生成,對應序列號加1;如果一條LSA的 LS Age字段的值被設置為3600,則表示對應LSA會被刪除;我們可以理解為路由器要想刪除某條LSA,對應LSU中的LSA的LS age的值會被置為3600,意思就是告訴其他路由器把對應LSA從LSDB中刪除;
實驗:如下拓撲,配置ospf
R3的配置

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

sys sys R1 int g0/0/1 ip add 13.0.0.1 24 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 area 1 net 13.0.0.1 0.0.0.0
R2的配置

sys sys R2 int g0/0/0 ip add 12.0.0.2 24 int lo 1 ip add 192.168.17.17 32 ospf 1 router-id 2.2.2.2 area 0 net 12.0.0.2 0.0.0.0 net 192.168.17.17 0.0.0.0
查看R1或R2、R3的LSDB數據庫
提示:可以看到對應LSA age字段隨時間的增長而增長,對應序列號沒有什么變化;
在R3上新建lo3接口,並將對應ip地址宣告在ospf中,抓包看看對應LSA中的ls age的值
提示:可以看到對應一類LSA的序列號加1,並且對應age也重新計時了;
抓包查看對應LSA
提示:在抓包的數據包中,對應lsa的age是1;表示該LSA已經生存了1秒;其實這個1主要是inftransdelay的值;
在R2上刪除lo1接口ip在ospf中的宣告,在R3上抓包查看對應lsa的age字段的值
抓包查看對應LSA中的ls age信息
提示:可以看到R2上的ospf中取消lo1接口ip在ospf中宣告,對應R3收到了一條3類LSA,其中對應LSA的LS Age字段的值是3600,表示刪除該LSA;
驗證:在R3上查看lsdb,看看對應192.168.17.17網絡的三類LSA是否被刪除了呢?
提示:可以看到對應R3上192.168.17.17網絡的三類LSA被刪除了;
LSA更新過程
提示:上圖是當路由器收到一條LSU的處理過程;首先路由器會查看對應LSU中LSA是否在lsdb中存在,如果不存在則添加對應LSA到lsdb中,然后發送LSACK,泛洪LSA,最后計算路由;如果收到LSU中LSA在lsdb中存在,則首先查看對應lsa的序列號是否相同,如果相同則表示是重復的LSA,此時路由器會忽略對應LSA;如果序列號不同,則比較對應收到的LSA序列號是否比lsdb中數據庫中對應LSA序列號高,如果收到的LSA序列號高於LSDB中的序列號,則表示收到的LSA是最新的LSA,則會把對應LSA更新到LSDB中,然后對應LSA會重新計時,序列號加1,然后,發送lsack,泛洪lsa,計算路由,更新路由信息;
總結:ospf lsa的更新規則主要由LS Age這個字段和對應序列號控制,該字段主要用來描述對應LSA存活時長,數字越小表示LSA越新;為了防止LSA條目達到最大生存時間按而被刪除,這個字段默認情況是每30分鍾更新一次(定時更新);對應LSA的序列號會加1;在ospf中LS Age的值如果被置為3600,表示刪除該LSA;序列號的作用有兩個,第一個是對比是否是重復LSA;其次是比較LSA的新舊;數字越大,表示LSA越新;除此之外當對應路由,鏈路狀態發生變動,比如更改了開銷,對應LSA的ls age字段會重新計時,對應序列號會加1(除刪除LSA);即當鏈路狀態發生變化后,立即發送LSU,更新LSDB(觸發更新);
ospf路由匯總
首先ospf不支持自動匯總路由信息,匯總必須是手動匯總;匯總路由信息的目的是精簡lsdb數據庫,路由條目,從而優化路由器的性能;對於匯總來說,匯總只能匯總區域間的路由和外部路由,即匯總三類LSA和五類LSA;
實驗:如下拓撲,配置ospf,並進行匯總
分析:我們要匯總外部路由和內部路由,對於上述拓撲來講,匯總外部路由我們只能在asbr上配置,即R3上進行匯總;匯總內部路由我們需要在abr配置,即R1上配置,因為abr發送三類LSA到其他區域;對於R2來說,它的lo接口都是內部網絡,所以R2上只需要在對應ospf區域中宣告對應網絡即可;
匯總內部路由
在R2的ospf區域中宣告對應lo接口網絡
在R1或R3上查看lsdb
提示:可以看到在R3上lsdb中三類LSA多了4條;
在R1上匯總R2宣告的lo接口網絡
提示:匯總需要看在那個區域匯總,即匯總那個區域的路由,就在對應區域匯總即可;上述命令表示把區域0里的三類LSA匯總為一條LSA;該LSA必須包含上述lo接口網絡;
驗證:在R3或R1上查看LSDB,看看對應三類LSA是否精簡成一條了?
提示:可以看到在R1的區域1的數據庫中,對應三類LSA從原來的4條變為了1條,表示我們剛才匯總的區域間路由成功了;
驗證:在R3上ping R2的lo接口,看看是否能夠ping通?
提示:可以看到R3還是可以正常和R2的lo接口正常通信;
匯總外部路由
在R3上創建lo接口,並配置ip地址,然后引入對應lo接口網絡至ospf進程
在R1或R2上查看lsdb
提示:可以看到對應R1的lsdb中就多了5條5類LSA,這是因為R3導入了直連路由;
在asbr(R3)上匯總外部路由
提示:外部路由不屬於ospf任何區域,所以我們匯總也只能在進程下配置,不能進入區域配置;上述命令表示匯總外部路由;
驗證:在R1或R2上查看lsdb,看看對應五類LSA是否被匯總成一條?
提示:可以看到之前4條5類LSA,現在匯總成一條了;
驗證:在R1或R2上pingR3的lo接口,看看對應是否能夠正常ping通?
提示:可以看到對應通信是完全沒有問題;
總結:匯總就是把多個子網匯聚成一個大的子網,其目的主要是精簡LSA、路由條目,提高路由器的性能;需要注意的是,匯總只能匯總區域間的三類LSA和外部五類LSA;區域間路由匯總,需要在對應abr上的對應區域下配置;匯總外部路由需要在對應asbr的ospf進程下配置,不能進區域;