路由基础 —— 汇总路由的精确计算(IPv4 + IPv6)

前言

随着业务对网络的需求不断增加,网络规模在逐渐变大。对于一个大规模的网络来说,路由器或者其他具备路由功能的设备势必需要维护大量的路由表项,未来维护臃肿的路由表,这些设备就不得不耗费大量的资源。

当然,在一个规模更大的路由表中进行查询时,路由器也会显得更加吃力。因此在保证网络中的路由器到各个网段都具备 IP 可达性的同时,如何减少设备的路由表规模就是一个非常重要的课题。

路由汇总定义

一个网络如果具备科学的 IP 编址,并且进行合理的规划,是可以利用多种手段减少设备路由表规模的。其中一个非常常见而且又有效的办法就是使用路由汇总(Route Summarization 或者 Route Aggregation)。

路由汇总又称为路由聚合,是将一组有规律的路由汇聚成一条路由,从而达到减小路由表规模以及优化设备资源利用率的目的。

我们把汇聚之前的这组路由称为精细路由或者是明细路由,把汇聚之后的这条路由称为汇总路由或者是聚合路由

路由汇总过程

【1】在图中,对于 R1 而言,如果要达到 R2 右侧的 192.168.1.0/24、192.168.2.0/24…192.168.255.0/24,自然是要用路由的,若手工为每个网段配置一条静态路由,这意味着要给 R1 手工配置 255 条静态路由,显然工作量太大了,R1 的路由表也将变得非常臃肿。

img

在这个场景中如果不在 R1 上配置这些静态路由,而是使用一条指向 R2 得默认路由似乎就可以解决问题,通过这条默认路由,R1 能够到达 R2 右侧得所有网段,而且其路由表极其的精简,但是默认路由的 “颗粒度” 太大了,无法做到对路由更为细致的控制,如果 R1 的其他接口还连接了一条出口链路并且已经在这个出口上使用了默认路由,那么这里只能另谋出路了。

路由汇总可以很好的解决这个问题。原来需要使用 255 条明细路由,而运用路由汇总的思想后,仅仅使用一条路由即可实现相同的效果,例如在 R1 上进行如下配置

ip route-static 192.168.0.0 16 10.1.12.2

以上的配置便是在 R1 上创建一条静态的汇总路由,改路由的目的网络地址及掩码长度为 192.168.0.0/16。

192.168.0.0/16 实际上是将 192.168.1.0/24、192.168.2.0/24…192.168.255.0/24 这些网段都 “囊括” 在内。

在 R1 上使用这样的配置,一个直接的好处就是其路由表条目数量大大减少了。几乎所有的动态路由协议也都支持路由汇总功能

【2】路由的汇总实际上是通过对目的网络地址和网络掩码的灵活操作实现的,形象的理解就是,用一个能够囊括这些小网段的大网段来替代它们。然而汇总路由的计算是要非常谨慎和精确的,否则可能导致路由的紊乱,如图。

img

为了让 R2 能够到达 R1 左侧的网段,出于网络优化的目的,我们为其配置了一条静态的汇总路由:

 ip route-static 172.16.0.0 16 10.1.12.1

虽然这确实起到了网络优化的目的,但是,这条汇总路由太 “粗犷” 了,它甚至将 R3 右侧的网段也囊括在内,如此一来,去往 R3 右侧网段的数据包在到达 R2 后,就有 可能被 R2 转发到 R1, 从而导致数据包的丢失,我们称这种路由汇总行为不够精确。因 此,一种理想的方式是,为 R2 配置一条 “刚刚好” 囊括所有明细路由(例如 R1 左侧的 这些网段)的汇总路由,这样一来就可以避免汇总不够精确的问题。

注意:一个网络能够部署路由汇总的前提是该网络中 IP 编址及网络设计具备一定的科学性和合理性,如果网络规划的杂乱无章,路由汇总部署起来就相当困难甚至完全不具备可实施性了。

汇总路由的精确计算

现有明细路由:172.16.1.0/24、172.16.2.0/24…172.16.31.0/24,请计算出关于明细路由的,最精确的汇总路由(换句话说,计算出一个掩码长度最长的汇总路由)。

要做的事情非常简单,将明细路由的目的网络地址都换算成二进制,然后排列起来,找出所有目的网络地址中 “相同的比特位”。

由于这些明细路由的目的网络地址是连续的,因此实际上只要挑出首尾的两到三个目的网络地址来计算就足够了。具体的过程如下:

(1)将这些 IP 地址写成二进制格式,如图所示进行排列,实际上只要考虑第三个 8 位组就可以了,因为只有它在变化的。

(2)画一根竖线,线的左侧每一列的二进制数值都是一样的,而线的右侧则无所谓,可以是变化的,这根线的最终位置,就标识了汇总路由的掩码长度。

注意,从默认的掩码长度,例如 24 开始,竖线一格一格地往左移,直到线的左侧每一列数值都相等时即可停下,这时线所处的位置的左侧就是所有的明细路由的目的网络地址中的共同比特位。

(3)如图所示,线的位置是 19,经过计算得到的汇总路由的目的网络地址及网络掩码是 172.16.0.0/19,这就是一个最精确的汇总地址,换句话说,是一个掩码最长的汇总地址。

img

因此,可以在 R2 上进行如下的配置:

 ip route-static 172.16.0.0 19 10.1.12.1 
 ip route-static 172.16.32.0 19 10.1.23.1

也就是将 R1 左侧的网段进行精确汇总,得到汇总网络地址及网络掩码长度:172.16.0.0/19,然后在 R2 上配置相应的静态汇总路由,将下一跳配置为 R1;将 R3 右侧的网段进行精确汇总,得到汇总网络地址及掩码长度: 172.16.32.0/19,然后也在 R2 上配置相应的静态汇总路由,并将下一跳配置为 R3。

路由汇总是一个非常重要的网络优化思维,然而如果处理不当,也有可能带来数据转发的环路。如下图,R1 左侧连接着 192.168.0.0/24、192.168.1.0/24 及 192.168.2.0/24 三个网段,为了让他们能够访问 Internet。R1 配置了指向 R2 的默认路由。

img

而为了让这些网段访问 Internet 的回程流量能够顺利返回,又为了精简路由表,R2 配置了一条静态汇总路由 192.168.0.0/22,并且下一跳是 10.1.12.1,R1;这样做看起来没有问题。

但是存在一个不小的问题,考虑这样的一种情况,有一个网络攻击者连接到了 R1,它开始向 R1 发送大量的垃圾流量(数据包),这些数据包的目的 IP 地址为 192.168.3.0/24 子网的随机地址(该子网在 R1 上并不存在),以发往 192.168.3.1 的垃圾报文为例,该报文首先被发送到 R1,后者通过路由表查询后发现数据包的目的 IP 地址只能匹配默认路由,因此将其转发给默认路由的下一跳 192.168.0.0/22,因此又将数据包转发给 R1,R1 又将报文转发回 R2,至此就产生了环路,发往 192.168.3.1 的垃圾报文将不断的在 R1 与 R2 之间来回转发,直到他们的 TTL(Time To Live)值递减到 0 时才丢弃。

设想一下,如果攻击者持续发送大量的垃圾数据包,那么 R1 及 R2 的性能势必受到极大的冲击,并且两者之间的互联链路的带宽耶将迅速抢占,合法的网络流量势必受到影响,业务可能会出现卡顿甚至中断的现象。

数据转发路径若出现环路,产生的危害是非常大的,针对本案例的解决办法很简单,在 R1 上增加一条黑洞路由:

ip route-static 192.168.0.0 22 Null0

这条路由的出接口非常特殊,是 Null0,这是一个系统保留的逻辑接口,当路由器在转发某些数据包时,如果使用出接口为 Null 0 的路由,那么这些报文将被直接丢弃,就像被扔进了一个黑洞里

利用 Null 0 路由来解决路由汇总场景中的数据转发环路问题,是一种有效并且常见的解决方案。


IPv6 静态路由及路由汇总 配置与详解(Cisco)

实验目的

1、掌握基本的 IPv6 的配置方法。
2、掌握基于 IPv6 的静态路由及路由总结配置。

实验拓扑

img

配置三台路由器的 IPv6 地址,配置如下:

R1 (config)# ipv6 unicast-routing 
// 启用 IPv6 路由
R1 (config)#interface loopback 0
R1 (config-if)# ipv6 address 2001:ab1:0:8::1/64
// 配置 IPv6 地址。
// 由于在 IPv6 网络中,一个接口可以拥有多个网段,所以此处在配置其它地址,
// 并没有像 IPv4 一样,使用 secondary 关键字。
R1 (config-if)# ipv6 address 2001:ab1:0:9::1/64
R1 (config-if)# ipv6 address 2001:ab1:0:a::1/64 
R1 (config-if)# ipv6 address 2001:ab1:0:b::1/64
R1 (config-if)# ipv6 address 2001:ab1:0:c::1/64 
R1 (config)#interface f0/0
R1 (config-if)# ipv6 address 2001:ab1:0:2::2/64
R1 (config-if)# no shutdown 
 
R2 (config)# ipv6 unicast-routing 
R2 (config)# interface f0/0
R2 (config-if)# ipv6 address 2001:ab1:0:2::2/64
R2 (config-if)# no shutdown 
R2 (config-if)# interface f0/1                 
R2 (config-if)# ipv6 address 2001:ab1:0:3::1/64
R2 (config-if)# no shutdown 
 
R3 (config)# ipv6 unicast-routing 
R3 (config)# interface loopback 0
R3 (config-if)# ipv6 address 2001:ab1:0:4::1/64
R3 (config)#interface f0/1
R3 (config-if)# ipv6 address 2001:ab1:0:3::2/64
R3 (config-if)# no shutdown

在 R2 路由器上使用 ping 测试与 R1 与 R3 之间的互通性:

R2# ping 2001:ab1:0:2::1
 
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:AB1:0:2::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/1/4 ms
 
R2#ping 2001:ab1:0:3::2
 
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:AB1:0:3::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/46/72 ms

查看 R1 的路由表:

R1# show ipv6 route
 
C   2001:AB1:0:2::/64 [0/0]
     via ::, FastEthernet0/0
//C 关键字前缀指出本地连接的网段。
L   2001:AB1:0:2::2/128 [0/0]
     via ::, FastEthernet0/0
//L 关键字前缀,指出此为本地直接主机地址。
C   2001:AB1:0:8::/64 [0/0]
     via ::, Loopback0
L   2001:AB1:0:8::1/128 [0/0]
     via ::, Loopback0
C   2001:AB1:0:9::/64 [0/0]
     via ::, Loopback0
L   2001:AB1:0:9::1/128 [0/0]
     via ::, Loopback0
C   2001:AB1:0:A::/64 [0/0]
     via ::, Loopback0
L   2001:AB1:0:A::1/128 [0/0]
     via ::, Loopback0
C   2001:AB1:0:B::/64 [0/0]
     via ::, Loopback0
L   2001:AB1:0:B::1/128 [0/0]
     via ::, Loopback0
C   2001:AB1:0:C::/64 [0/0]
     via ::, Loopback0
L   2001:AB1:0:C::1/128 [0/0]
     via ::, Loopback0
L   FE80::/10 [0/0]
     via ::, Null0
//FE80 地址前缀为链路本地单播地址,其主要用于 OSPF 等路由协议更新时作为其更新源地址。
L   FF00::/8 [0/0]
     via ::, Null0
// 多播地址。

在所有路由器上配置到其它非直连网络的静态路由,配置如下:

R1 (config)# ipv6 route 2001:ab1:0:3::/64 2001:ab1:0:2::1
R1 (config)# ipv6 route 2001:ab1:0:4::/64 2001:ab1:0:2::1
//IPv6 的静态路由配置与 IPv4 类似。
// 具体解释是:到达 2001:ab1:0:3::/64 的网络,其下一跳为 2001:ab1:0:2::1
 
R2 (config)# ipv6 route 2001:ab1:0:4::/64 2001:ab1:0:3::2
R2 (config)# ipv6 route 2001:ab1:0:8::/62 2001:ab1:0:2::2
R2 (config)# ipv6 route 2001:ab1:0:c::/64 2001:ab1:0:2::2

IPv6 网络的子网汇总与 v4 网络类似。需要注意的是一个 IPv6 的地址字符为 16 进制,每缩减一个字符,对应二进制为四位。如下表所示,即针对 R1 路由器的环回口汇总方法,简单的说,仍然是找同相同的前缀。

2001:ab1:0:8::12001:ab1:0:0000 0000 0000 10 00::12001:ab1:0:8::/62
2001:ab1:0:9::12001:ab1:0:0000 0000 0000 10 01::1
2001:ab1:0:a::12001:ab1:0:0000 0000 0000 10 10::1
2001:ab1:0:b::12001:ab1:0:0000 0000 0000 10 11::1
2001:ab1:0:c::12001:ab1:0:0000 0000 0000 11 00::12001:ab1:0:c::/62
R3 (config)# ipv6 route ::/0 2001:ab1:0:3::1
// 本例中 R3 路由器可以将其认为是 stub 网络路由器,可以配置静态默认路由,简化路由的配置。

查看 R2 和 R3 路由表,确认静态路由配置:

R2# show ipv6 route
 
C   2001:AB1:0:2::/64 [0/0]
     via ::, FastEthernet0/0
L   2001:AB1:0:2::1/128 [0/0]
     via ::, FastEthernet0/0
C   2001:AB1:0:3::/64 [0/0]
     via ::, FastEthernet0/1
L   2001:AB1:0:3::1/128 [0/0]
     via ::, FastEthernet0/1
S   2001:AB1:0:4::/64 [1/0]
     via 2001:AB1:0:3::2
// 手工配置的静态路由,其管理距离为 1。
S   2001:AB1:0:8::/62 [1/0]
     via 2001:AB1:0:2::2
S   2001:AB1:0:C::/64 [1/0]
     via 2001:AB1:0:2::2
L   FE80::/10 [0/0]
     via ::, Null0
L   FF00::/8 [0/0]
     via ::, Null0
R3# show ipv6 route
 
S   ::/0 [1/0]
     via 2001:AB1:0:3::1
…………………………

在 R3 上测试静态路由有效性:

R3# ping 2001:ab1:0:9::1
 
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:AB1:0:9::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/51/84 ms

在 R1 上测试静态路由有效性:

R1# ping 2001:ab1:0:4::1
 
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:AB1:0:4::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 56/59/60 ms

via:

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值