汤愈韬头像

OSPF的虚链路

骨干区域必须要连续,如果骨干区域变得不连续了,这个在OSPF协议中就会出现网络的中断。

1.0网络的路由会通过R2变成三类LSA,传递到area1,但是R4并不是ABR,所以并不能把1.0的LSA变成三类LSA传递到area2。

相同的道理,区域2中的5.0路由也传递不到区域1。

可以通过虚链路建立连接。虚链路在逻辑上是属于区域0的,虽然经过的是区域1,是在区域1创建的虚链路,但是虚链路本身永远属于区域0。相当于把区域0在逻辑上进行了延伸,延伸到了R4上。

这样就相当于区域2在逻辑上跟区域0连接在了一起。

虚链路:专门修补区域0不连续的。


虚链路使用场景

情况一:

情况二:

本来这个网络R1跟R4是连在一起的,这个时候区域0是连续的

如果R1跟R4之间的链路出现了故障,那么区域0就不连续了。可以在R2跟R3之间做一条虚链路,做一条备份路径

正常情况下走下面这条路径,如果下面的这条路径断掉了,区域0在逻辑上也还是连续的

情况三:

在R2跟R3之间建立一条虚链路,无中生有就出现一个区域0。虚链路之间是可以建邻居的。

建立虚链路的时候,两台路由器之间不需要直连,只要在同一个非骨干区域就行了。只要在非骨干区域的两台路由器上就可以建立虚链路。


重点:虚链路不管在哪个区域创建,虚链路永远属于区域0的链路。

把R1的换回口配置成24位的网段路由,网络类型配置成广播类型

改成广播型后,在描述这个环回口,就会按照实际的掩码去描述了,就不会当成32位的主机路由了。

之前的知识点:环回口不管配置成多少掩码,都会按照主机路由去描述。但是将环回口的网络类型改成广播型,就会按照实际的掩码去描述。

配置R1接口地址

R2配置

R3配置

R4配置

在R2跟R4上没有配置环回口地址,routerID是人为指定的

R5上配置

R5上有环回口,网络类型改成广播型链路

R1会产生类型1的1.1.1.0/24这条路由,这条类型1的会泛洪而R2,R2是ABR,所以会把这条由类型1计算出来的路由转换成在type3的2.2.2.2产生的路由(1.1.1.0/24)。并且会在R3跟R4上泛洪。在R4上可以看到这条类型3的LSA

在路由表中,R4也能正确的计算出1.1.1.0/24这条路由。

在R4上查看拓扑数据库

R4并不是ABR,所以在area 2中,R4并没有为1.1.1.0/24产生一条三类LSA传递到area 2中。

区域2中一条三类LSA都没有。

R4产生的一类LSA在area 1跟area 2中都没有说自己是ABR。

所以不会做ARR的工作。

这个时候就会导致R5无法计算1.1.1.0/24的路由。,3.3.3.0/24的路由其实R5也计算不出来。同理R4也不会把area 2中的路由变成area 1中的三类。

不好的区域规划就会导致路由无法正确计算。

这个拓扑图违反了非骨干没有和骨干直接相连的原则。

问题:如果是两个不连续的区域0为什么也通不了呢?

因为区域0的路由传到区域1变成非骨干区域的三类,非骨干区域的三类是不能够再传递到骨干区域的,所以这两个区域0就互相通不了了。

原则:非骨干区域的三类在ABR有区域0的邻居FULL的时候是不会计算的,不计算则在路由表里面没有,路由表里面都不存在,那么就不会产生三类的,也传不到区域0。

所以基于这样的防环规则,出现不连续的区域0时,这两个区域0也是通不了的。

现在希望区域2直接能跟区域0连在一起。

虚链路必然是在R2跟R4之间创建出来,这样子才能做到区域2跟区域0直接连在一起。

这种情况,建虚链路,R2跟R4是不能直接建虚链路的,因为跨了两个不同的非骨干区域,只能R2跟R3建虚链路,R3跟R4建虚链路。

虚链路的建立

通过分析可以发现,这个虚链路应该是area 1上建立。而且R2是跟区域1中的R4去建虚链路。

R2通过区域1肯定已经知道R4的存在。同一个区域的拓扑数据库是知道拓扑结构的。

在虚链路上就会周期性的发送Hello包(单播的)

虚链路我们看成是点到点的链路,

虚链路的开销值=2,这个2代表的是R4这台路由器到虚链路对端路由器的开销,这个通过区域1的SPF树能够被计算出来。

虚链路的开销 = 虚链路两端路由器的最短路径(开销 = 2)

R4没有接口在区域0,但是虚链路是在区域0,那么在区域0就会产生自己的一类LSA,声明自己是ABR,在区域1中产生的一类LSA也会说自己是ABR,还会表明自己在区域1是虚链路。

但是并没有说自己在区域0存在虚链路。  --  因为区域0中是不能创建虚链路的。

R4在区域2中产生的一类LSA,只说自己是ABR,并没有说自己有虚链路。

R2在区域1中产生的一类LSA,说自己是ABR,并且也说自己存在虚链路,所以对于R3而言,他就知道在区域1中是在R2跟R4之间创建了虚链路。(R3是能分析出来的)


画拓扑

R1自己产生的一类,发现连着一个广播型的链路,伪节点是10.1.12.2,通过10.1.12.1连接这个伪节点,到这个伪节点的开销是1。

入托看到TransNet则必然有一个二类的LSA。

由R1的一类摸到了伪节点,由伪节点产生的二类摸到了2.2.2.2的存在

那么就必然有2.2.2.2作为名字的一类LSA的存在,通过2.2.2.继续摸

摸到了同一个伪节点10.1.12.2。

除此之外,R2还通过虚链路连接一台路由器4.4.4.4,这同样也证明虚链路属于区域0。

也就是说虚链路是R2产生的一类LSA中在区域0中去进行描述的。

虚链路是放在R2产生的一类LSA中,并且在区域0中去描述的。


为了便于观察实验现象,把R1跟R2的网络类型改成点到点。

画出拓扑图

R产生的一类LSA泛洪给R2,R2通过虚链路直接泛洪给R4,所以R4对于1.1.1.0/24的路由的计算:

首先在R4上肯定拥有类型1 的1.1.1.1的携带1.1.1.0/24路由的。

R2是一个ABR,本身就会把通过区域0算出来的1.1.1.0/24直接变成区域1中的三类传传导区域1,所以在R4上也会有一条类型3的,由2.2.2.2产生的1.1.1.0/24的路由。

所以,R4在计算1.1.1.0/24的路由时,理论上来讲应该由一类去计算,一类的是优于三类的。

在R4上也一定有一条类型3的由4.4.4.4产生的1.1.1.0/24在区域2中的

5.5.5.0/24路由传递过程

R4首先通过一类的LSA算出5.5.5.0/24,同时直接生成区域0中的三类传到R1,同时会生成区域1中的三类传到R1。

R1知道在这个区域0中有两个ABR。

现在也能ping通

现在观察R4在区域1中的现象:

现在只有R2产生的三类进来了区域1,R4并没有产生三类的进入区域1,但是在区域2中,有R4产生的1.1.1.0的三类,但是并没有在区域1中产生三类。

如果把虚链路想象成物理链路,那么R4其实也是要往区域1中产生3类的,有虚链路相当于是有区域0了。但是是虚链路之后,就没有往区域1中产生三类了。

结论:通过虚链路产生的 type 1 , type 2, type 3 不会再转换成虚链路穿越区域的type 3 LSA  --  防环机制。

如果R4再将1.1.1.0/24变成三类传回给区域1,但是对于R3来讲,R3通过R2也能算出1.1.1.0/24,通过R4也能算出1.1.1.0/24。那么对于R3来讲,就有两个ABR可以到1.1.1.0/24。

而事实上,假设R3通过R4去访问1.1.1.0/24,而R4实际上又要通过R3才能到1.1.1.0/24,那么R3跟R4关于1.1.1.0/24就会产生环路了。


如果让R2不把1.1.1.0/24的路由变成三类 

R2是否可以在区域1中不要产生1.1.1.0/24的三类?

可以,在IP路由表中过滤,就不会产生了

现在R2在区域1中就没有产生1.1.1.0/24的三类了

现在R4上也没有1.1.1.0/24这条路由了

但是在R4的区域0中依然有1.1.1.1产生的一类

也就是说这片叶子在R4的树上还是存在的,就是说目前在R4上在区域0的树里面,1.1.1.0/24确实是存在的,就是目前在R4上这个1.1.1.0/24确实是存在的,但是R4并没有算出这条路由,一类并没有拿出来算。导致这条一类的无法进行正确的计算。

同时R4并不会在区域2中产生1.1.1.0/24的三类。

问题:为什么R4不用区域0中的一类去计算路由呢?

现在R4是没有三类的,但是还是有一类的。

原因:这条一类的是虚链路传过来的,R4现在有个推测:R4去1.1.1.0/24肯定是通过虚链路去走的。现在R4发现虚链路是在区域1中去创建的,但是在区域1中算不出这个1.1.1.0/24的路由,也就意味着R3算不出1.1.1.0/24的路由。

从物理的世界去看,R3必须要有1.1.1.0/24的路由才能够为R4提供1.1.1.0/24的转发服务。

如果R4判断在这个虚链路所经过的区域1中都算不出1.1.1.0/24的话,那么R4用虚链路传过来的1一类的去计算路由那是没有链路基础的,算出来把报文发给R3,R3都不知道怎么去1.1.1.0/24,所以R4都不会去计算1.1.1.0/24的路由。

结论

ABR通过虚链路计算出的区域内/区域间路由,也要在虚链路所经过的区域也能计算出来,才使用虚链路计算出的路由并加入IP路由表。

现在如果在R2上把路由过滤取消掉,R2就会产生1.1.1.0/24的三类在区域1中泛洪。R4就会判断我通过1类的算出1.1.1.0/24,我通过虚链路所经过的区域1也能算出这条1.1.1.0/24,(虚链路是通过一类计算的,区域1是三类算的),这样R4就知道区域1中的路由器是有能力到1.1.1.0/24的。

未来R4通过虚链路算出来的1.1.1.0/24本身是依赖这个区域1去转发的。现在只要区域1中的路由器中有,R4就敢算,也敢把它传到区域2。

可以保证网络是通的

虽然在逻辑上,在算法上把虚链路当成逻辑的链路,但是这条链路本身在物理上是区域1的,在报文转发的实际的层面上是区域1的。

一般情况下不建议使用虚链路。

有虚链路之后,数据库会特别繁杂。


虚链路的第三个坑点:

虚链路导致无法在虚链路所在的区域做区域0的路由汇总。

如果R2通过区域0把1.1.1.0/24的路由计算出来了,然后变成了区域1中的三类。

如果现在在R2上对区域0中的1.1.1.0/24的这条路由进行汇总,汇总成1.0.0.0/8的路由,并且在区域1中变成三类的传进去(R2在区域0中算出的1.1.1.0/24是一类算出来的,然后在R2上针对这个1.1.1.0/24的区域0的路由进行汇总,把他变成汇总后的网络号1.0.0.0/8形成三类的传到区域1)

这个时候在R4上通过区域1学习到的是一条汇总后的1.0.0.0/8的区域1的路由。

R4在区域0中可以算出类型1的1.1.1.1产生的1.1.1.0/24的路由

这个时候会出现矛盾

R4在虚链路学到的路由是24位的,但是在区域1并没有学到24位的路由。所以会到底1.1.1.0/24的路由没法正确计算了。于是区域2上就不会有这条1.1.1.0/24这条三类LSA了。

相同的路由:网络号一样,掩码要一样

在R2上做路由汇总

但是再次查看,并没有路由汇总

也就是说这条命令做不了,这个时候如果想做区域0的路由汇总,这是做不了的。因为一旦做了R4就无法正确计算路由了,会导致R5无法跟1.1.1.0/24进行通信。

要做路由汇总的话:可以在R4上做区域0的路由汇总。

R4上并没有配置区域0 ,只有虚链路。

查看R4的拓扑数据库

因此在R5上得到的就是一条1.0.0.0/8的汇总后的路由

所以在虚链路这种场景下,应该在R4上正确去汇总,让区域2的路由表变小。但是在区域1汇总不了。


虚链路出现环路的场景

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_38200548/article/details/168425529

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--