0%

TCP/IP 路由技术 12:缺省路由和按需路由选择

路由汇总可以减少路由表的大小和路由通告的内容,从而节省网络资源。路由表越小、越简单,那么管理和故障诊断也越容易。0.0.0.0/0 是 IPv4 的缺省地址,指向 0.0.0.0/0 的路由是缺省路由。类似的,缺省 IPv6 地址 ::/0 可以汇总所有的 IPv6 地址。其他的每个 IP 地址都比缺省地址更准确,所以当路由表中存在缺省路由时,如果不能寻找到一个更加匹配的路由,那么都会匹配到缺省路由上。

缺省路由基本原理

当把路由器与 Internet 相连时,缺省路由是非常有用的。使用了缺省路由,路由器仅需要知道它自己内部管理系统中的目标网络。缺省路由将把去往其他地址的数据包转发给 Internet 服务提供商,这样就可以没有必要同服务提供商使用边界网关协议(BGP)去学习 Internet 路由表中的所有前缀。在处理大型路由表时,拓扑变化所产生的影响远远大于内存的需求,在大型网路中,拓扑频繁地发生变化,从而导致通告以及处理这些变化的系统活动明显增加。使用缺省路由可以有效地隐藏精确路由的变化,使得具有缺省路由的网络更加稳定。

缺省路由在星形(hub-and-sake)拓扑结构中也非常有用。如下所示,在所有的分支路由上使用缺省路由,那么仅中心路由器需要有关每个子网的路由。当分支路由器收到去往未知目标网络的数据包时,它将把数据包转发至中心路由器,中心路由器接着将数据包转发到正确的目的地。

在该网络中,分支路由器更准确地应该被称为末梢路由器。末梢路由器到其他路由器仅存在一条连接,在这种设备上路由决策就变得非常简单:目标网络要么是路由器的直连网络(末梢网络)之一,要么经邻居路由器可达,而且如果这台邻居路由器是下一跳路由器的唯一选择,那么末梢路由器就不需要知道详细的路由表,一条缺省路由就足够了。

正如使用汇总路由一样,缺省路由也会造成路由细节的损失。末梢路由器将不知道某个目标网络是否可达。所有去往未知目标网络的数据包都要被转发至中心路由器,然后确定网络是否可达。在网络中,很少会发生向不存在地址发送数据包的情况,但是如果发生,那么更好的设计选择是让末梢路由器运行路由协议,并从中心路由器获取路由以便尽快地确定未知网络。

路由细节损失所引起的另一个问题是,使用缺省路由隐藏路由细节可能会导致不理想的路由选择。

按需路由基本原理

在上面的星形网络中,虽然在中心路由器上配置静态路由非常简单,但是许多网络管理员仍然不喜欢使用静态路由,困难不在于每当新的末梢网络在线时需要添加路由,而是在末梢网络或末梢路由器离线时忘记删除路由。从 IOS 11.2 起,Cisco 开始向中心路由器提供另一种技术,叫做按需路由(On-Damand Routing,ODR)。

当末梢路由器仍然使用指向中心路由器的缺省路由时,中心路由器可以使用 ODR 可以自动地发现末梢网络。ODR 仅传送地址前缀,即地址的网络号,而不是整个地址,因此路由器必须支持 VLSM。由于在末梢路由器和中心路由器之间的链路上传输的路由信息很少,所以节省了带宽。

ODR 并不是真正意义上的路由选择协议,它可以发现有关末梢网络的信息,但是 ODR 不能向末梢路由器提供任何路由信息。链路信息通过数据链路协议进行传输,因而从末梢路由器到中心路由器后不会做进一步传输。但是,ODR 发现的路由可以被重新分配到动态路由协议中。

ODR 路由的传输机制是 Cisco 发现协议(Cisco Discovery Protocol,CDP),CDP 是一种专用的数据链路协议,它可以收集有关邻居网络设备的信息。CDP 运行在任何支持子网访问协议(SNAP)的介质上,这意味着 ODR 还依赖于 SNAP 的支持。

配置缺省路由和 ODR

缺省路由可以配置在每台需要缺省路由的路由器上,或者配置在向其对等路由器依次通告路由的路由器上。在有类别路由查询中,路由器将首先匹配主网地址,然后匹配子网。如果子网不匹配,那么数据包将被丢弃。有类别路由查询是 Cisco 路由器 IOS 11.3 及后继版本的缺省模式,对于早期版本,可以通过命令 ip classes 把有类别查询变换到无类别(甚至对有类别路由选择协议)查询方式。

任何使用缺省路由的路由器必须执行无类别路由查询。配置了 ip classless 后,那么它首先不会匹配主网络,而是执行最精确匹配。如果在路由表中没有发现匹配项,那么它将匹配到缺省路由。

案例研究:静态缺省路由

静态路由配置了缺省路由地址 0.0.0.0 和 ::/0,并且使用的掩码也是 0.0.0.0(对于 IPv6 来说前缀长度为 0)。第一次配置缺省路由的人经常犯的一个错误是使用全 1 掩码,而不是使用全 0 掩码。全 1 掩码会设置一条指向 0.0.0.0 的主机路由,而全 0 掩码全部是由不关心的位组成,它可以在任意位置匹配到任意位。

通过向 RIP 重新分配静态路由,可以把缺省路由通告给剩余的 RIP 路由器 。虽然 OSPF 和 IS-IS 不能使用命令 redistribution 通告缺省路由,但是它们也产生缺省路由。

缺省路由对于连接无类别路由选择域也是非常有用的。在如下所示的网络中,chimu 将一个 RIP 域和一个 EIGRP 域连接在一起:

Chimu 的配置如下:

Chimu 有一套来自 EIGRP 域的完整路由,但是 Chimu 没有将它们完整的重新分配到 RIP,相反,Chimu 仅通告了一条缺省路由。RIP 路由器将向 Chimu 转发所有去往未知网络的数据包,然后 Chimu 查找路由表,寻找一条到 EIGRP 域的最精确路由。

Chimu 的静态路由不是指向下一跳地址,而是指向空接口。如果转发给 Chimu 的数据包的目标属于一个不存在的子网,那么数据包不会被转发到 EIGRP 域,而是被丢弃。

案例研究:缺省网络命令

配置缺省路由的另一种方法是使用命令 ip default-network。该命令指明了用作缺省网络的网络地址,这个网络可以是由静态路由指定的直连网络,也可以是通过动态路由选择协议发现的网络。最开始该命令是和 IGRP 一起使用的,IGRP 不用 0.0.0.0 作为缺省路由,而是把实际的网络标记为缺省网络,该命令仅用于 IGRP、EIGRP 和 RIP。

命令 ip default-network 是一条全局命令,所以它会导致在支持这个命令的路由器上配置的所有路由协议都通告一条缺省路由。如果协议是 IGRP 和 EIGRP,那么缺省路由就是命令参数指定的网络,如果是 RIP,则是 0.0.0.0。

和 RIP 一样,如果静态路由 0.0.0.0 被配置,那么 EIGRP 将向邻居通告一条缺省路由,同时还会重新分配静态路由,EIGRP 会把重新分配的路由作为外部路由进行通告。

需要再次强调,命令 ip default-network 是一个全局命令,它不与特殊的路由选择协议相关联,也就是路由器上配置的任何路由选择协议都可以使用它,但前提是路由器要支持这条命令。因此使用这种方法通告缺省路由有一个固有的缺陷,如果路由器上配置了多个协议,使用命令 ip default-network 没有办法控制和限制由谁来通告缺省网络。

当向一个路由选择协议注入路由时,最好是选择一个可以提供最多控制的方法来最小化无目的路由的扩散。

案例研究:缺省信息始发命令

OSPF 的 ASBR 和 IS-IS 域间路由器不能自动地向它们的路由选择域通告缺省路由,即使在缺省路由存在的时候也一样。对于 OSPF,缺省路由必须以类型 5 的 LSA 方式被通告到 OSPF 域,这意味着该路由器必须是一个 ASBR。

命令 default-information originate 是重新分配命令的一个特例,它将导致一条缺省路由被重新分配到 OSPF 或 IS-IS。同 redistribute 一样,命令 default-information originate 通知 OSPF 路由器它成为一个 ASBR 或通知 IS-IS 路由器它成为一个域间路由器。而且还像 redistribute 一样指明被重新分配的缺省路由的度量,可以是 OSPF 外部度量类型,或者是 IS-IS 层级。命令 default-information originate 还可以向 OSPF 和 IS-IS 重新分配被其它路由选择进程发现的缺省路由。

缺省路由或汇总路由的好处是提供网络的稳定性,但是如果缺省路由自身不稳定,这可能会导致缺省路由相应的 LSA 被频繁地通告到所有非末梢区域。解决方法是使用关键字 always(仅在 OSPF 下可用,在 IS-IS 下不支持)。这样即使路由表中没有缺省路由,路由器也将始终通告一条缺省路由。当 OSPF 域外仅有单一的缺省路由时,关键字 always 可以安全地使用。如果不止不止一个 ASBR 通告了缺省路由,那么缺省出口应该是动态的:即缺省路由需要被实时通告。因为如果一个 ASBR 在它没有缺省路由时却声明有缺省路由,那么数据包将会被转发到它那里,而不是被转发到合理的 ASBR。

对于 IPv6,default-information originate 的工作方式类似。

案例研究:配置按需路由选择

使用命令 router odr 可以启用 ODR,不需要指明网络和其他参数。CDP 缺省情况下是被启用的,仅在因某种原因被关闭的情况下才需要被启用。在路由器上启用 CDP 进程的命令是 cdp run。为了在特定接口上启用 CDP,要使用命令 cdp enable。

ODR 还可以被重新分配,使用命令 redistribute odr 可以重新分配 ODR 发现的路由。