目录

简介

先决条件

要求

使用的组件

规则

背景信息

包括的过程

构建路由表

备份路由

调整管理距离

度量如何决定路由选择进程

前缀长度

做出转发决策

ip classless

摘要

相关信息

简介

本文档介绍路由器如何工作、如何配置以及如何为其选择路由。

先决条件

要求

本文档没有任何特定的前提条件。

使用的组件

本文档不限于特定的软件和硬件版本。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

规则

有关文档规则的详细信息，请参阅 Cisco 技术提示规则。

背景信息

Cisco路由器的一个方面是路由器如何在协议、手动配置和各种其他方法提供的路由中选择最佳路由。  路由选择需要了解Cisco路由器的工作方式。

包括的过程

在Cisco路由器中建立和维护路由表需要三个过程：

- 各种路由进程，实际上运行一个网络(或路由)协议，如增强的内部网关路由协议(EIGRP)、边界网关协议(BGP)、中间系统到中间系统(IS-IS)和开放式最短路径优先（OSPF）。

- 路由表本身接收路由进程的信息，并且回复转发进程的信息请求。

- 转发进程需要路由表中的信息来做出数据包转发决定。

您需要检查路由协议与路由表之间的交互，了解如何构建路由表。

构建路由表

构建路由表时的主要注意事项包括：

- 管理距离 - 这是路由来源的可信度度量。如果路由器从多个路由协议了解某个目的地，将对管理距离进行比较，为路由指定较短的管理距离。

- 权值---这是路由协议用于计算通过指定目的地的最佳路径的一种测量方法，如果需要了解通过同一目的地的多条路径。每种路由协议都使用一种不同的度量。

- 前缀长度

当每个路由进程接收更新和其他信息时，会选择到任一指定目的地的最佳路径，并尝试将该路径安装到路由表。例如，如果EIGRP得知通往10.1.1.0/24的路径，并确定此特定路径是该目的地的最佳EIGRP路径，会设法将已获悉的路径安装到路由表。

路由器决定是否安装由路由进程呈现的路由，取决于相关路由的管理距离。如果此路径具有到达此目标的最低管理距离（与表中的其他路由相比），则此路径将安装在路由表中。如果此路由不是具有最佳管理距离的路由，则会拒绝该路由。

例如，假设路由器运行四个路由进程：EIGRP、OSPF、RIP和IGRP。现在，通过这4道程序，获知了到192.168.24.0/24网络的各种路由，并且每个路由通过它的内部测量标准和程序选择了它到该网络的最佳路径。

这四个进程企图将它们到192.168.24.0/24的路由安装到路由表中。每个路由进程都分配了一个管理距离，用来决定安装哪个路由。

默认管理距离

已连接

0

静态

1

eBGP

20

EIGRP（内部）

90

IGRP

100

OSPF

110

IS-IS

115

RIP

120

EIGRP（外部）

170

iBGP

200

EIGRP汇总路由

5

由于内部EIGRP路由具有最佳管理距离（管理距离越小，优先级越高），因此会将其添加到路由表中。

备份路由

RIP、IGRP和OSPF等其他协议如何处理未安装的路由？如果首选路由发生故障，能从 EIGRP 了解到什么？Cisco IOS®软件使用两种方法解决此问题。第一种是让每个路由进程尝试定期安装其最佳路由。如果首选路由失败，则次佳路由（由管理距离决定）将在下一次尝试中成功。另一种解决方案是，未能在表中安装路由的路由协议挂起路由，并告知路由表进程报告最佳路径是否失败。

对于没有自己的路由信息表的协议（如IGRP），则使用第一种方法。每次IGRP接收路由更新时，它都尝试在路由表里安装更新的信息。如果路由表中已有通往同一目的地的路由，则安装尝试会失败。

对于拥有自己数据库的路由信息的协议，例如EIGRP、IS-IS、OSPF、BGP和RIP，初始尝试安装路由失败时，将注册备份路由。如果路由表中安装的路由由于某种原因而失败，路由表维护进程将调用已经注册了备份路由的每一个路由协议进程，并且要求它们将路由重新安装到路由表中。如果有多个协议具有注册的备用路由，将根据管理距离选择首选路由。

调整管理距离

默认管理距离并不总是适合您的网络；您可以调整它，使RIP路由优先于IGRP路由。但是，首先，如果更改管理距离，请查看影响。

更改路由协议的管理距离是非常危险的。它可能导致网络中的路由环路和其他异常。因此，请始终小心更改管理距离。在进行更改之前，请确保您对更改进行计划并了解更改的结果。

对于整个协议，很容易更改距离。只需在路由进程子配置模式下使用 distance命令。您还能够更改路由的距离，这些距离只能从某一些协议获得，您只能更改部分路由的距离。有关详细信息，请参阅在Cisco IOS路由器配置示例中调整路由选择的管理距离。

对于静态路由，要更改每条路由的距离，请在ip route命令后输入一个距离：

ip route network subnet mask next hop distance

您不能同时更改所有静态路由的管理距离。

度量如何决定路由选择进程

路由是根据路由协议的管理距离在路由表中选择和构建的。从路由协议获知的管理距离最短的路由将安装到路由表中。如果有多条路径使用一个路由协议通往同一个目的地，那么多条路径则具有相同的管理距离，并且依据测量标准选择最佳路径。度量是与特定路由相关的值，这些路由将它们从最优先到最不优先排序。用于确定度量的参数由于不同的路由协议而有所不同。带有最低权值的路径被选为最佳路径，并安装在路由表中。如果有多条带有相等权值的路径到达同一个目的地，将在这些相等成本的路径上执行负载平衡。有关负载均衡的详细信息，请参阅负载均衡的工作原理。

前缀长度

查看另一个场景，了解路由器如何处理另一个常见情况：前缀长度变化。再次假设路由器运行有四个路由进程，每个进程都收到了以下路由：

- EIGRP（内部）：192.168.32.0/26

- 安息：192.168.32.0/24

- OSPF:192.168.32.0/19

下列哪些路由可以添加到路由表中？由于EIGRP内部路由具有最佳管理距离，您可以假设可以安装第一个路由。但是，由于这些路由具有不同的前缀长度（子网掩码），因此它们被视为不同的目的地，并且它们都可以安装到路由表中。

下一部分提供路由表中的信息以做出转发决策。

做出转发决策

查看路由表中安装的三条路由，看看它们是如何在路由器上查找的。

router# show ip route

....

D   192.168.32.0/26 [90/25789217] via 10.1.1.1

R   192.168.32.0/24 [120/4] via 10.1.1.2

O   192.168.32.0/19 [110/229840] via 10.1.1.3

....

如果信息包到达指定到192.168.32.1的路由器接口，路由器会选择哪一条路由？它取决于子网中的前缀长度或子网掩码中的比特集数量。在转发数据包时，较长的前缀总是优先于较短的前缀。

在这种情况下，被指定到192.168.32.1的信息包受控于10.1.1.1，因为192.168.32.1属于192.168.32.0/26网络(192.168.32.0到192.168.32.63)。它也属于其他2个可用路由，但192.168.32.0/26具有路由表(26位与24或19位)中最长的前缀。

同样，如果发往192.168.32.100的数据包到达某个路由器接口，则会转发到10.1.1.2，因为192.168.32.100不属于192.168.32.0/26（192.168.32.0到192.168.32.63），而属于192.168.32.0/24目的地（192.168.32.0到1） 2.168.32.255)。它再一次进入192.168.32.0/19包括的范围，但192.168.32.0/24有一个更长的前缀。

ip classless

ip classless 配置命令在路由和转发进程中的位置经常让人困惑。实际上，IP无类只影响Cisco IOS中转发进程的运行；它不影响路由表的构建方式。如果未配置IP无类(使用no ip classless命令)，则路由器无法将数据包转发到超网。例如，再次将三条路由放入路由表，并通过路由器路由数据包。

注意：如果通过IS-IS或OSPF获取超网或默认路由，no ip classless配置命令将被忽略。在这种情况下，分组交换行为就像配置了ip classless一样

router# show ip route

....

172.30.0.0/16 is variably  subnetted, 2 subnets, 2 masks

D        172.30.32.0/20 [90/4879540] via  10.1.1.2

D       172.30.32.0/24  [90/25789217] via 10.1.1.1

S*   0.0.0.0/0 [1/0] via 10.1.1.3

172.30.32.0/24网络包含地址172.30.32.0到172.30.32.255，而172.30.32.0/20网络包含地址172.30.32.0到172.30.47.255，因此，您可以尝试通过此路由表交换三个数据包，并查看结果。

- 指定到172.30.32.1的信息包被转发到10.1.1.1，因为这是最长前缀匹配。

- 指定到172.30.33.1 的信息包被转发到10.1.1.2，因为这是最长的前缀匹配。

- 发往192.168.10.1的数据包将转发到10.1.1.3；由于路由表中不存在该网络，因此该数据包将转发到默认路由。

- 发往 172.30.254.1 的数据包被丢弃。

这四个问题的答案是最后一个被丢弃的数据包。丢弃该子网是因为其目标172.30.254.1位于已知的主网络172.30.0.0/16中，但路由器不知道该主网络中的这个特定子网。

这是有类路由的精髓：如果主网络的一部分已知，但数据包在该主网络内的目标子网未知，则数据包将被丢弃。

此规则最令人困惑的方面是，如果目的主网络在路由表中根本不存在，路由器只使用默认路由。

如果远程站点通过一条连接回网络其它部分，而不运行路由协议，则可能导致网络出现问题，如图所示。

不运行路由协议

远程站点路由器的配置如下：

interface Serial 0

ip address 10.1.2.2 255.255.255.0

!

interface Ethernet 0

ip address 10.1.1.1 255.255.255.0

!

ip route 0.0.0.0 0.0.0.0 10.1.2.1

!

no ip classless

使用此配置，远程站点的主机能够到达互联网中的目的地(通过10.x.x.x网云)，而不是10.x.x.x网云中(公司网络)的目的地。由于远程路由器知道10.0.0.0/8网络的某些部分（两个直接连接的子网，而10.x.x.x没有其它子网），因此它会假定这些其它子网不存在，并丢弃所有发往这些子网的数据包。但是，发往Internet的流量从未在10.x.x.x地址范围内拥有目标，因此通过默认路由正确路由。

如果在远程路由器上配置ip classless，则此问题会得到解决，因为它允许路由器忽略其路由表中网络的有类边界，而只是简单地路由到它可以找到的最长前缀匹配。

摘要

总之，做出转发决策包括三组进程：路由协议、路由表以及做出转发决策并交换数据包的实际进程。下图中演示了这三组过程及其关系：

三组路由进程

最长前缀匹配始终在路由表中安装的路由中胜出，而当路由安装到路由表中时，管理距离最小的路由协议始终获胜。

相关信息

- 负载均衡如何工作？

- 什么是管理距离？

- IP路由页

- “IP路由协议”页

- 思科技术支持和下载