前面我们学习了OSPF单个区域内的路由计算过程以及相关LSA的作用,这时候我们的一个区域内的OSPF已经完成了,但是一个以太网环境可能有非常多的设备,这些设备全部放入一个OSPF区域就会造成区域内的LSA过多,导致LSDB数据库负担过大,设备运算量增多,降低了数据转发性能。并且无法统一管理,一旦出现故障点还不易排查。
这时候就需要引入OSPF区域的概念
OSPF的区域本来应该在学习基础时就安排上的,但是在基础中涉及OSPF区域的知识点并不多,因此我讲区域的知识点放在了这章域间路由来学习。
我们之前也说过,OSPF通过划分区域来解决单区域设备过多导致的一些问题。
而OSPF的区域总的分为两种(后面还会讲到其他的特殊区域):
骨干区域 | 我们按照区域编号划分,编号为0(area 0)为骨干区域,一个多区域OSPF网络环境中必须要有一个骨干区域,作为其他区域互通的中转。 |
---|---|
非骨干区域 | 区域编号为1-4294967295,也就是除了骨干区域外其他的区域,正常情况下非骨干区域下接在骨干区域下,且非骨干区域下不能在接其他区域以防止产生域间环路,非骨干区域之间的通信通过骨干区域进行。 |
一个简单的区域划分如上图所示,同样的划分区域后设备也会有着自己身份,就像单个区域内设备可以是DR或者BDR,当然DR/BDR更多的是指设备接口身份。而在不同区域下,设备的身份就是指代设备本身在OSPF中的身份。如上图所示R1在OSPF中属于internal router(区域内部路由器),同理R3,R5也是internal router,而R2,R4一半属于骨干区域,一半属于非骨干区域的设备我们称它为ABR(area border router)区域边界路由器。
IR(internal router) | 区域内部路由器 | 所有接口都在同一区域下的设备,维护本区域内的链路状态信息,并计算本区域内的最优路由 |
---|---|---|
ABR(area border router) | 区域边界路由器 | 接口分别连接2个或2个以上区域的设备,同时维护多个区域的链路状态信息,作为区域之间通信的桥梁,传递路由信息。 |
ASBR(AS Boundary Router) | 自治系统边界路由器 | 将外部路由引入OSPF的路由器,可以是OSPF中的任何设备,只要将外部路由引入进OSPF,该设备就是ASBR。 |
每个区域都会维护自己的LSDB,像我们的R1,R2属于area 1,他们会进行域内的路由算法进行生成SPF树然后,计算路由信息来选取路径,同样的R2与R3,R4同属于area 0,他们也会进行域内计算。但是area 1 与area 0之间怎么进行通信呢?如果R1想去R3,但是单纯一类,二类LSA并不包含R3的路由信息,这时候就需要我们的三类LSA登场了。
三类LSA,只有ABR能产生,用来描述本区域内的网段信息,发送给全部区域,这里的本区域可以指代ABR所属的所有区域不单单是一个区域。
一条三类LSA携带的信息如上图所示
Link State ID | 表示这个网段的IP地址 |
---|---|
Advertising Router | 表示产生此LSA的router ID |
Netmask | 表示该网段的子网掩码,与IP地址组成网段信息 |
Metric | 表示ABR到达此网段的开销 |
一个三类LSA只能代表了一条路由信息,若是有多条路由信息需要发布则会发布多条三类LSA例如下图所示:
在R2上使用命令dis ospf lsdb summary self-originate查看自己产生的三类LSA
可以看到设备RID为2.2.2.2,且要往骨干区域area 0发布一条LSA,这条LSA的类型时Sum-Net表示是三类LSA,Ls id表示该LSA包含的网段IP地址,adv rtr表示产生此LSA的ABR的RID,然后Net mask表示网段掩码,这是一条R2发往骨干区域的三类LSA,表示了area 1中12网段的路由信息,并且R2到达该网段的开销为1。
往下还有三条三类LSA,表示R2将area 0与area 2的网段信息传递进area 1中,我们也同样可以在R1上看到这三条路由信息,只需要在R1上执行命令:
dis ospf lsdb summary
到这里我们的R1已经知道了这三条网段的路由信息,并且将他们添加进自己的IP路由表中,因为这三条路由没有一个条与R1直连因此不会出现被直连替代的情况,然后这三条的开销分别是1,2,3,但是这里的开销指的是ABR到达这些网段的开销,对于R1来说还要加上R1到达ABR的开销 :1,因此R1到达23,34,45的开销分别是2,3,4,且下一跳均为ABR即R2。我们来看下R1的IP路由表来看下是否正确。
我们可以看到除了与R1直连的12网段,23,34,45网段的开销分别是2,3,4与我上面所说一致,同样下一跳也均为192.168.12.2,这个IP地址是R2上的IP地址,表示R1下一跳为R2也与我说的一致。因此我们可以看到三类LSA并不是用来生成SPF树的,它传递的就是区域间的路由信息,因此直接将信息与自身的来的路由信息进行对比,将最优的填入到IP路由表即可。这样是三类LSA的路由计算方式。
我们以下面的拓扑来进行举例
RID:R1为1.1.1.1,R2为2.2.2.2以此类推
网段:R1-R2为192.168.12.0/24 , R2-R3为192.168.23.0/24以此类推
为方便大家看图,我就不把信息标上去了显得混乱。
在该网络环境中,R3要去往12,45网段该怎么走,我们不以拓扑为基础,我们自己来画出拓扑树。
首先我们来看下R3上收到的三类LSA,因为我们想去其他区域的网段,因此先查看三类LSA,在R3上执行dis ospf lsdb summary可以看到2个条目
第一个条目,表示45网段的路由信息,要去往45网段必须通过ABR R4(4.4.4.4),且R4到达该网段的开销为1 ,这时候我们就能简单的画出R3去往45网段的路由图:
这时候我们虽然知道了ABR到达45网段的开销,但是我们怎么到达ABR呢,虽然本拓扑网络环境非常简单,但实际网络环境中设备到达ABR有可能有多条路径,因此我们需要结合area 0区域内的路由信息进行参考。同理去往12网段的路由信息我们也画出来先:
然后我们在来画出area 0内的路由信息,首先我们要先画出SPF树,这里就不过多赘述,详细过程参考上个博客“OSPF域内LSA与路由计算”。
Area 0 区域内的以R3为根节点的拓扑信息:
可以看到我们R3到达4.4.4.4需要开销1,且通过接口192.168.34.3,而到达2.2.2.2需要开销1,通过接口192.168.23.3,这样我们R3到达12,45网段该有的信息都具备了。而实际上R3去往12,34网段的过程:先是通过域内SPF算法与路由算法算出路由,根据路由到达ABR,在由ABR转交给其他区域内,通过其他区域内的路由进行寻路。一步一步的到达其他区域的网段。因此我们的LSA三类与一类,二类共同作用使得区域间能够正常通信。
我们之前看到的OSPF区域都是正规的方式,非骨干区域下接在骨干区域下,但是呢现网中常常会发生特殊的情况,主要是因为,早期OSPF并没有指定该规则,区域之间的划分也非常的随意,这就导致了区域间环路的形成
例如上图所示
1.0网段通过ABR在区域间不停地发布,形成了环路,而避免这个环路的方式也很简单,就像我们之间讲的骨干区域与非骨干区域之间连接的规则:
1.OSPF划分了骨干区域和非骨干区域,所有非骨干区域均直接和骨干区域相连且骨干区域只有一个,非骨干区域之间的通信都要通过骨干区域中转,骨干区域ID固定为0。
2.OSPF规定从骨干区域传来的三类LSA不再传回骨干区域。
且对于ABR来说,OSPF要求必须有一个接口处于骨干区域下。
这里说到的是避免发生这种情况,但是已经发生这种情况该怎么办呢?总不能重新部署一遍吧,这样既耗时又耗力,为此出现了虚连接的方式。
虚连接用来解决没有按照规则进行区域划分的问题,虚连接可以使非骨干区域不用物理地连接在骨干区域下,只需要逻辑上的下接在骨干区域即可,如下图所示:
至此我们学习完了OSPF区域内与区域间的路由计算过程,也了解了区域间通信的基本过程,但这时候又有一个问题,我们上面讲了一大堆都只是针对我们运行OSPF动态路由的以太网环境下,如果我们需要与其他网络进行连接呢,比如互联网或者其他的以太网环境,并且该网络环境有可能还运行着不同的路由协议,例如rip,isis或者BGP。这时候我们就需要特殊的LSA来帮助我们处理外部路由信息。
能引入的路由有许多种:
1.静态 | 通过手工配置的静态路由 |
---|---|
2.动态 | 例如OSPF,RIP,ISIS,BGP等动态路由协议产生的路由 |
3.直连 | 没啥好说的,direct! |
而引入外部路由的设备被称为ASBR(自治系统边界路由器)
本网络环境中,R1通过引入直连路由,因此R1称为了ASBR。
要引入外部路由,直接在R1上进入ospf进程并输入命令import-route direct
后面可以跟不同的路由,除了在我们的ospf内配置引入外,R6上也要配置一个默认路由 例:ip route-static 0.0.0.0 0 192.168.6.2,意思是不管数据目的地是多少,我都直接发往R1,如果不配默认路由的话,OSPF虽然知道了R6怎么走,但是R6并不知道回应给谁。
我们可以在R6上查看路由表发现R6的路由条目,且由外部路由引入的OSPF标记为O_ASE,优先级为150。
然后我们来看下ASBR产生的LSA,是如何将外部路由信息发布给我们的OSPF内的。
首先,ASBR产生的LSA为五类LSA,AS-External-LSA
由ASBR产生并泛洪给全部OSPF区域
Link State ID | 引入的网段的IP地址 |
---|---|
Advertising Router | 产生此LSA的RID |
Netmask | 引入网段的掩码 |
External Type | 引入路由的类型,分为1类和2类,主要是引入开销的计算方式不同,默认为2类 |
Metric | ASBR到达该网段的开销 |
External Route Tag | 五类LSA专有的字段表示引入路由的额外信息 |
除了五类LSA外,还有个四类LSA(Network-Summary-LSA),四类LSA在ABR收到五类LSA后并向区域内进行泛洪后泛洪四类LSA,四类LSA的作用是通告该区域内设备ASBR的位置,每个ABR收到五类LSA后都会向自己的区域泛洪四类LSA。
Link State ID | ASBR的RID |
---|---|
Advertising Router | 产生此LSA的RID |
Netmask | 掩码在此无意义 |
Metric | ABR到达ASBR的开销 |
四类LSA只能在一个区域内泛洪,五类LSA每泛洪到一个区域,相应区域的ABR都会生成一条新的四类LSA来描述如何到达ASBR。因此描述到达同一个ASBR的四类LSA可以有多条,其Adv rtr是不同的,表示是由不同的ABR生成的。
外部路由的计算过程与我们的区域间非常类似,五类LSA也是路由信息,并不包含拓扑信息。只要根据域内路由到达ASBR后交由ASBR进行后续处理即可。
这里的外部路由类型不是指路由条目的类型而是指引入时使用的开销计算方式。我们之前看到了五类LSA有个External Type字段,默认为2,这里表示引入的路由使用开销计算方式为2类,那么1类与2类有什么区别呢
Type | Cost |
---|---|
第一类外部路由(External Type-1) | AS内部开销值+AS外部开销值 |
第二类外部路由(External Type-2) | AS外部开销值 |
第一类外部路由的AS外部开销值被认为和AS内部开销值是同一数量级的,因此第一类外部路由的开销值为AS内部开销值(路由器到ASBR的开销)与AS外部开销值之和;这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。
第二类外部路由的AS外部开销值被认为远大于AS内部开销值,因此第二类外部路由的开销值只包含AS外部开销,忽略AS内部开销(默认为第二类),这类路由的可信度比较低。默认情况下选择第二类。
我们可以在引入路由时进行修改,修改方式是
在引入路由时在后面添加type命令并使用1类,也可以直接修改引入的COST值,不过并不建议这么做。