前文我们了解了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地址为1.1.1.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的接口(RTB);当区域0中的RTC收到RTB发送的三类LSA以后,它一看自己又连接着多个区域,此时RTC就会把RTB发送的LSA中宣告者(adv rtr)字段修改成自己,然后再向区域2发送;此时区域2中的路由器收到此类LSA,就会把对应去往192.168.1.0/24网络的路由,出接口指向RTC发送三类LSA的接口;对应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,路由计算都可以正常完成;