路由汇总技术背景
![115f82ea6036ab8d6b95e402c6c3c6f0.png](https://i-blog.csdnimg.cn/blog_migrate/438247b405e2e79db70f27376ca9294a.jpeg)
我们看上图,对于R1而言,如果要去往R2身后的172.16.1.0/24、172.16.2.0/24、172.16.3.0/24网络,那么自然是要有路由的,如果是采用静态路由的方式,意味着我们要给R1配置三条静态路由分别对应上述三个网段,上面我们已经说过了,这样的配置,一来工作量大,想想看,如果R2身后不仅仅有三个网络呢?如果有100个网络呢?再者这也意味着R1的路由表变得非常臃肿。
默认路由固然可以解决一部分的问题,但是默认路由的“路由颗粒度”太大,无法做到对路由更为细致的控制,而且如果R1左侧连接了一个网络出口并且已经占用了默认路由了,那么这里只能另想他法了。
路由汇总可以很好的解决这个问题:
![2a81a6b6cdc1bb375d85a1d8c59a5b38.png](https://i-blog.csdnimg.cn/blog_migrate/e8049c13a1777c125ba3d0b596797911.jpeg)
前一个场景,我们需使用3条明细路由,而在上图R1中,我们却仅仅使用一条路由即可实现相同的效果,这条路由是上一个场景中三条明细路由的汇总路由。这样配置的一个直接好处就是,路由器的路由表条目大大减少了。这种操作方式我们称为路由汇总。路由汇总是一个非常重要的网络设计思想,通常在一个大中型的网络设计中,必须时刻考虑网络及路由的可优化性,路由汇总就是一个我们时常需要关注的工具。这里实际上是部署了静态路由的汇总,当然除此之外我们也可以在动态路由协议中进行路由汇总,几乎所有的动态路由协议都支持路由汇总。
路由精确汇总的算法
路由的汇总实际上是通过对子网掩码的操作来完成的。对于下面的例子来说:
![f61257b3fe2b17fc79199853048cf572.png](https://i-blog.csdnimg.cn/blog_migrate/d197226a5f8d74c80d60df1e49161813.jpeg)
在R2上,为了到达R1下联的网络,R2使用路由汇总的工具,指了一条汇总路由:
[R2] ip route-static 172.16.0.0 16 10.1.12.1 #12.1为R1的接口IP
虽然这确实起到了网络优化的目的,但是,这条汇总路由太“粗犷”了,它甚至将R3这一侧的网段也囊括在内,我们称这种路由汇总行为不够精确。因此,一种理想的方式是,使用一个“刚刚好”囊括这些明细路由的汇总路由,这样一来就可以避免汇总不够精确的问题。
这里不得不强调一点,网络可以部署路由汇总的前提是我们网络中IP子网及网络模型设计具备一定的科学性和合理性,因此路由汇总和网络的IP子网及网络模型的设计是息息相关的。如果你的网络规划的杂乱无章,路由汇总部署起来就相当的困难了。
那么如何进行汇总路由的精确计算呢?下面我们来看一个例子:
现有明细路由:172.16.1.0/24至172.16.31.0/24,计算最精确的汇总路由
![b11c630a4d1880282374f29676ac69ba.png](https://i-blog.csdnimg.cn/blog_migrate/d0cd4b065ecb5c9f5ee893fe203a0ddf.jpeg)
我们要做的事情非常简单,这些个明细子网是连续的,我们只要挑出首位的两到三个网络号来计算就足够了:
- 将这些IP地址写成二进制形式,实际上,我们只要考虑第三个8位组即可,因为只有它是在变化的。
- 现在,我们要画一根竖线,这根线的左侧,每一个列的二进制数都是一样的,线的右侧则无所谓,可以是变化的,这根线的最终位置,就是汇总路由的掩码长度。注意这根竖线可以从默认的掩码长度,也就是/24开始,一格一格的往左移,直到你观察到线的左端每一列数值都相等,即可停下,这时候,这根线,所处的位置就刚刚好。
- 如上图,线的位置是16+3=19,所以我们得到汇总地址:172.16.0.0/19,这就是一个最精确的汇总地址。
因此,上面的例子,我们可以这么配置:
![1809902f846501a1229c622e7a09b9ed.png](https://i-blog.csdnimg.cn/blog_migrate/bfbfe770f90feeb32e92861d9ecea996.jpeg)
路由汇总的潜在问题
![82914b26d84e8c8d43f43a34ad3ce4f8.png](https://i-blog.csdnimg.cn/blog_migrate/a91bd30e9224f38bc2ba0ae1d112edfe.jpeg)
路由汇总是一个非常重要的网络优化工具,然而如果使用不当,也有可能带来问题,在上图中,R1左侧有192.168开头的一系列网络,为了让他们能够访问Internet,R1配置了指向R2的默认路由。而R2为了让数据能够回程,又为了精简路由表,配置了一条汇总路由192.168.0.0/16,并指向R1。这个网络看似没什么问题,但……
![b031246df1f5db0b6dd558af3e558358.png](https://i-blog.csdnimg.cn/blog_migrate/b2faa968b180195b6130e4f0e34144de.jpeg)
解决办法:
![53c83a06769cbadd3340d271345f8e04.png](https://i-blog.csdnimg.cn/blog_migrate/a7af3934db18c948d869b627cb6ef6e2.jpeg)
在R1上配置一条ip route-static 192.168.0.0 16 null0,即可解决上述问题,当R1收到扫描报文发往192.168网络下不存在的目的时,就会直接被R1丢弃,而不会再转发给R2了。这就解决了理由环路的问题。这个思路在路由汇总的时候非常关键,许多动态路由协议在使用命令执行路由汇总的时候,会在本地路由表中产生一条指向null0的汇总路由就是这个原因。
因此,无论是采用静态路由,或者是动态路由协议来部署路由汇总,都应格外留意路由汇总是否可能引发路由环路。