前文我们了解了OSPF的网络类型、帧中继交换机映射以及路由器帧中继映射相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15195762.html;今天我们来聊一聊OSPF中的虚连接相关话题;
在ospf里,为了避免区域间的环路,ospf规定不允许直接在两个非骨干区域之间发布路由信息,只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息;因此,每个ABR(区域边界路由器)都必须连接到骨干区域;即要求所有非骨干区域必须和骨干区域相连,同时骨干区域也必须连续;但是由于网络设计、升级、合并、改造等因素,造成了不规范的区域架构,最终导致路由学习不完整,解决方法就是使用虚连接;什么是虚连接?虚连接就是一条逻辑的链路,作用有两个,第一个作用是将非骨干区域和骨干区域逻辑的连接在一起;第二个作用就是为骨干区域提供冗余备份的逻辑链路,当骨干区域链路故障时,通过虚连接仍然可以保证骨干区域在逻辑上的联通性;当然虚连接的存在增加了网络的复杂程度,使故障的排除更加困难;因此,在网络规划中我们要尽量避免使用虚连接;虚连接只是作为修复无法避免的网络拓扑问题的一种临时手段;如果一个网络架构里使用了虚连接,这也意味着该网络需要重新规划;
区域间路由环路的产生
提示:假设ospf允许非骨干区域间的ABR进行路由发布,那么上图就很明显是一个环路;当RTD在区域1里发布一条路由信息,对应RTB会学习到,同时RTB也会向RTC发送对应的路由信息,同样的道理RTC也会向RTE发送路由信息;最终RTD发送的路由信息,从RTE发回给RTD,这样一来就形成了区域间路由环路;为了避免这个多区域间路由环路,ospf就规定不允许非骨干区域间发送路由信息;如上图,正常情况RTE和RTD不能互相发送路由信息,这样环路就不会产生;
避免区域间路由环路
提示:为了防止区域间环路,ospf定义了骨干区域和非骨干区域以及三类LSA的传递规则;首先ospf划分了骨干区域和非骨干区域,所有非骨干区域均直接和骨干区域相连,并且骨干区域只有一个,非骨干区域之间的通许都要通过骨干区域中转,骨干区域ID是固定为0;ospf规定从骨干区域传来的三类LSA不再传回骨干区域;通过上述规定,我们不难想象对于ABR来说,它必须和骨干区域直连,是少有一个接口属于骨干区域;如果一个非骨干区域ABR没有一个接口属于骨干区域,那么对应网络区域设计就是一个不规范的设计;最终导致路由学习不完整;
不规范的OSPF区域设计
提示:上图区域2的ABR RTC并没有任何一个接口是属于区域0(骨干区域),所以类似这种区域设计是不规范的设计,在现网中应该尽量避免;
提示:对于这种骨干区域不连续的拓扑也是不规范的设计;对于ospf来说,骨干区域有且只有一个,并且所有非骨干区域必须和骨干区域相连才是规范的ospf区域设计;
不规范的ospf区域设计带来的问题
实验:如下拓扑图,配置ospf
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.0View Code
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.0View Code
R3的配置
sys sys R3 int g0/0/0 ip add 23.0.0.3 24 int g0/0/1 ip add 34.0.0.3 24 ospf 1 router-id 3.3.3.3 area 1 net 23.0.0.3 0.0.0.0 area 2 net 34.0.0.3 0.0.0.0View Code
R4的配置
sys sys R4 int g0/0/0 ip add 34.0.0.4 24 int lo 1 ip add 4.4.4.4 32 ospf 1 router-id 4.4.4.4 area 2 net 34.0.0.4 0.0.0.0 net 4.4.4.4 0.0.0.0View Code
验证邻居关系是否起来
在R1上验证邻居关系
在R2上验证邻居关系
在R3上验证邻居关系
在R4上验证邻居关系
提示:在各路由器上验证邻居关系,各邻居都已正常full起来;
验证:在R1上查看ospf学习到的路由
提示:可以看到在R1上ospf路由表中并没有学习到area 2里的路由以及R4的lo接口路由也没有学习到;
验证:在R4上查看ospf学习到的路由
提示:对于R4来说它也没有学习到area 0、area 1 以及R1的lo接口路由;其实原因很简单,就是因为上述拓扑架构不是规范的区域,对应区域2并没有和区域0相连,导致对应区域路由学习不完整;解决办法,使用虚链路将area 2和骨干区域相连;
在R2的g0/0/1口和R3的g0/0/0口建立虚链路
提示:vlink-peer 后面是对应要建立虚连接路由器的router id,是在同一个区域内的;简单讲虚连接只能在同一非骨干区域内建立,不能跨区域建立;
在R3的g0/0/0口上建立虚连接
提示:可以看到在R3的ospf里对应区域里建立虚连接后,对应提示我们邻居full了;
验证:在R2、R3上验证虚连接邻居
提示:可以看到在对应的路由器上查看ospf虚连接信息对应路由器都把邻居指向对端的router id 并且邻居状态都是full,这说明虚连接邻居建立成功;
验证:在R2的g0/0/1口抓包看看现在虚连接hello包和传统hello包有什么不同
提示:在R2上我们抓到了两种ospf hello包,一种是目标地址是224.0.0.5的组播包,一种是单播包;其中组播包里区域id都是1,单播包里区域id都是0;组播包是ospf 区域1正常hello包;单播包就是虚连接的hello包;
验证:再次查看R1是否学习到区域2 以及R4上的路由?
提示:可以看到现在R1能够正常学习到区域2以及R4lo接口的路由;
验证:R4是否能够正常学习到区域0、区域1 以及R1的路由呢?
提示:可以看到现在R4也能正常学习到区域0,区域1以及R1lo接口的路由;
虚连接给骨干区域带来逻辑链路冗余备份
提示:当骨干区域链路断开,对于原本走该链路的数据也就无法正常通过;此时我们可以通过在区域1建立逻辑的虚连接,让对应原本走骨干区域链路的流量,通过虚连接链路实现通信;当骨干区域链路恢复正常,对应流量又会自动切回到骨干区域链路;从而实现对骨干区域链路做冗余备份的效果;
实验:如下拓扑,配置ospf
分析:对于R1的来说,它访问R2的lo1接口,肯定走R1和R2的直连链路;如果在没有配置虚连接的情况下,当R1和R2的直连链路宕掉以后,对应通信就无法正常实现;
R1的配置
sys sys R1 int g0/0/0 ip add 12.0.0.1 24 int g0/0/1 ip add 13.0.0.1 24 int lo 1 ip add 1.1.1.1 32 ospf 1 router-id 1.1.1.1 a 0 net 12.0.0.1 0.0.0.0 net 13.0.0.1 0.0.0.0 net 1.1.1.1 0.0.0.0View Code
R2的配置
sys sys R2 int g0/0/0 ip add 12.0.0.2 24 int g0/0/1 ip add 24.0.0.2 24 int lo 1 ip add 2.2.2.2 32 ospf 1 router-id 2.2.2.2 a 0 net 12.0.0.2 0.0.0.0 net 24.0.0.2 0.0.0.0 net 2.2.2.2 0.0.0.0View Code
R3的配置
sys sys R3 int g0/0/0 ip add 13.0.0.3 24 int g0/0/2 ip add 35.0.0.3 24 ospf 1 router-id 3.3.3.3 area 0 net 13.0.0.3 0.0.0.0 area 1 net 35.0.0.3 0.0.0.0View Code
R4的配置
sys sys R4 int g0/0/0 ip add 24.0.0.4 24 int g0/0/2 ip add 46.0.0.4 24 ospf 1 router-id 4.4.4.4 area 0 net 24.0.0.4 0.0.0.0 area 1 net 46.0.0.4 0.0.0.0View Code
R5的配置
sys sys R5 int g0/0/0 ip add 35.0.0.5 24 int g0/0/1 ip add 56.0.0.5 24 ospf 1 router-id 5.5.5.5 area 1 net 35.0.0.5 0.0.0.0 net 56.0.0.5 0.0.0.0View Code
R6的配置
sys sys R6 int g0/0/0 ip add 46.0.0.6 24 int g0/0/1 ip add 56.0.0.6 24 ospf 1 router-id 6.6.6.6 area 1 net 46.0.0.6 0.0.0.0 net 56.0.0.6 0.0.0.0View Code
查看R1和R2的路由表
提示:可以看到R1通过ospf学习到R2lo接口的路由;
提示:同样R2也通过ospf学习到R1lo接口的路由;
在没有配置虚连接,看看R1到R2的lo1的路径
提示:可以看到正常情况下,R1到R2的lo1接口的流量走R1和R2的直连链路;
当直连链路宕掉以后,看看对应通信是否还能继续进行呢?
提示:可以看到当R1和R2的直连链路宕掉以后,对应去往R2的lo1接口的路由也随之被删除;此时R1并没有R2的lo1接口的路由,所以现在R1是无法正常和R2的lo1接口通信;
在R3上配置虚连接
在R4上配置虚连接
提示:虚连接需要在同一非骨干区域内的两个路由器上都配置对端为本端的邻居;从上面的实验可以看到我们在R3和R4的对应ospf 区域1里配置了虚连接以后,对应虚连接邻居就起来;
验证:现在看看R1上是否有到达R2的lo1接口的路由呢?
提示:可以看到虽然R1到R2的直连链路是down的状态,但通过R3和R4建立的虚连接,对应到达R2的lo1接口的路由还是能够正常学习到;
验证:现在在R1上和R2的lo1接口通讯,看看对应数据包走的链路
提示:可以看到现在R1和R2的lo1接口的通信可以走R3--->R5---->R6---->R4---->R2;
当R1和R2直连链路恢复正常,看看对应通讯链路是否会切换回去呢?
提示:当R1和R2直连链路恢复以后,对应ospf邻居也会重新建立;
现在R1和R2的lo1接口通信是否会切换到R1和R2的直连链路呢?
提示:可以看到对应骨干区域链路恢复正常以后,对应的通信路由也随之被切换到对应的骨干区域链路;