在有类路由选择协议中,同一主类网络被异主类网络隔开就会出现不连续子网的问题。不连续子网会导致路由丢失、错误的路由以及错误的负载均衡。这样说很难理解,我们来看一些例子吧。拓扑如下:
R1和R2通过12.1.1.0/24网段直连,R1和R2都把自己的直连网段和环回10网段路由宣告进RIP中,这就出现了不连续子网的问题。R1和R2的环回口都是同一主类的路由,但是他们的直连网络却是另一个主类网络。根据有类路由传递规则,R1会把10网段汇总成主类发送给R2,接着R2会产生10.0.0.0/8的路由条目,但是R2不会把这个路由条目加表,因为自己也有一个10网段的主类路由,而且是直连的,比学到RIP更优,所以没有加表。这样就造成了路由丢失。我们配置一下,看看结果,配置如下:
R1
version 1
network 10.0.0.0
network 12.0.0.0
R2
version 1
network 10.0.0.0
network 12.0.0.0
接着我们看看R1的路由表,如下:
我们可以看到R1接收R2发送过来的RIP更新包,但是不加表,这样R1就无法访问R2的环回口了。问题的所在就是R1把10网段传递给R2的时候汇总成主类了,我们如果让R1传递给R2的时候是子网,那么路由条目就可以在R2上加表了。一个可行的方案就是在直连接口配置辅助地址,也叫第二地址。我们在R1和R2的直连接口上配置一对10网段的24位子网地址,那么R1传递环回口的时候就会传递给R2路由器24位的10网段子网路由,然后成功加表。配置如下:
R1
ip address 10.1.12.1 255.255.255.0 secondary
ip address 12.1.1.1 255.255.255.0
R2
ip address 10.1.12.2 255.255.255.0 secondary
ip address 12.1.1.2 255.255.255.0
按照我们推理的结果,R1上应该就有一条10.1.2.0/24的路由条目了,效果如下:
我们可以看到已经学习到R2环回口的路由条目了,但是我们要注意的是R1上多出了一条10.0.0.0/24,这个网络是不存在的,是一条错误的路由,这个错误路由导致路由黑洞。我们来分析一下产生这个路由条目的过程。因为我们在一个接口上配置了两个IP地址,所以RIP在发送和接受路由条目的时候会有两种情况。如果匹配到了12.1.1.0/24这个网段,那么10网段会以10.0.0.0发送出去。到了R2上也会进行两次匹配,如果匹配到12.1.1.0/24上,那么会产生10.0.0.0/8的路由条目,但是不会加表;如果匹配到了10.1.1.0/24上,那么会产生10.0.0.0/24的路由条目,然后加表,这就是10.0.0.0/24产生的过程。如果R1的环回口发送出去的时候匹配到了10.1.12.0/24这个网段,那么10网段会以10.1.1.0发送出去。到了R2如果匹配到了12.1.1.0/24这个网段,那么直接会汇总成10.0.0.0/8,这个也是不会加表的;如果匹配到了10.1.12.0/24这个网段,那么会产生10.1.1.0/24的路由,直接加表。上面就是两条路由条目产生的原因了。
既然知道了产生路由条目的原因,我们就知道如何下手来解决这个问题。解决这个错误路由条目的原理就是不让直连12.1.1.0/24网段参与路由传递,最简单的方法就是不去宣告12.0.0.0网段。配置如下:
R1
version 1
network 10.0.0.0
R2
version 1
network 10.0.0.0
现在我们看看R2的路由表,如下:
现在这个网络中已经没有什么问题了,这只是两个路由器的情况,如果是多个路由器呢,我们来看看如下的拓扑:
首先我们按正常配置起RIP看看情况,配置如下:
R1
version 1
network 10.0.0.0
network 12.0.0.0
R2
version 1
network 12.0.0.0
network 23.0.0.0
R3
version 1
network 10.0.0.0
network 23.0.0.0
通过上面的配置,我们可以知道R2会从R1上学习到一条10.0.0.0/8的路由条目,同时R2也会从R3上学习到一条10.0.0.0/8的路由条目。这样R2上就会出现10.0.0.0/8的负载路由了,而且R1和R3都学不到对方的环回路由,效果如下:
这个负载并不是我们期望看到的。因为R1和R3上是不同子网的,而R2却学习成了同一主类网络的路由,这样R2去往R1或者R3的环回口就有一半的数据将会丢失。这是我们猜想的情况,而思科路由器高版本IOS默认开了CEF转发功能,CEF默认是基于目的转发的,去往同一个目的地的数据流会从同一个下一跳地址发出。这也就看不到我们想要的结果了,所以我们要先修改一下CEF的转发方式,在接口下配置 ip load-sharing per-packet 来让数据基于每个包去转发;另一种可行的方法就是关掉CEF。配置如下:
R1
ip address 12.1.1.1 255.255.255.0
ip load-sharing per-packet
R2
ip address 23.1.1.1 255.255.255.0
ip load-sharing per-packet
interface Serial1/0
ip address 12.1.1.2 255.255.255.0
ip load-sharing per-packet
R3
ip address 23.1.1.2 255.255.255.0
ip load-sharing per-packet
现在我们在R2上Ping一下R1和R3的环回口,效果如下:
Ping了6个包,都通了3个,这就是不连续子网出现错误汇总的问题。解决它的方法也是使用辅助地址,配置如下:
R1
ip address 10.1.12.1 255.255.255.0 secondary
ip address 12.1.1.1 255.255.255.0
ip load-sharing per-packet
R2
ip address 10.1.23.1 255.255.255.0 secondary
ip address 23.1.1.1 255.255.255.0
ip load-sharing per-packet
interface Serial1/0
ip address 10.1.12.2 255.255.255.0 secondary
ip address 12.1.1.2 255.255.255.0
ip load-sharing per-packet
router rip
version 1
network 10.0.0.0
network 12.0.0.0
network 23.0.0.0
R3
ip address 10.1.23.2 255.255.255.0 secondary
ip address 23.1.1.2 255.255.255.0
ip load-sharing per-packet
上面的配置后R2已经可以学习到R1和R3环回口的子网路由了,并且R1和R3都有了对方环回口的路由条目,效果如下:
现在整个网络已经可达了,但是和上面拓扑的问题一样,还是出现了10.0.0/24的错误路由,三个路由器上都有,我们还是利用上面的解决方法来解决这个问题,不去宣告非10网段的路由,配置如下:
R1
version 1
network 10.0.0.0
R2
version 1
network 10.0.0.0
R3
version 1
network 10.0.0.0
这样10网段的路由就会正常传递了,效果如下:
R1、R2和R3上的10.0.0.0/24路由已经消失,而且各个10网段子网路由也没问题。但是我们这里又会出现一个新的问题,R1上没有R2和R3直连网络的路由,R3上也没有了R1和R2直连网络的路由,这样其他路由器就没有去往这两个网络的路由了。但是我们又不能用network去通告他们,于是我们找到了另一个可行的方法,用重发布引入这两个直连网络。后面会说道重发布,这里的配置如下:
R2
version 1
redistribute connected
network 10.0.0.0
RIP在引入直连和静态路由的时候不用跟Metric,但是把其他路由协议的路由条目引入到RIP中记得加上Metric,因为默认引入的路由条目的Metric是16。配完后我们再来看看R1和R3的路由表,如下:
这样整个拓扑中的路由已经全部可以互相学习到了,不连续子网的问题也算是决绝掉了。上面这些不连续子网的问题,也是典型的有类路由选择协议所出现的问题,虽然我们可以用许多方法去解决这些问题,但是在部署有类路由选择协议的时候最后考虑到不连续子网的问题,以便避免不连续子网的出现。
最新评论