一、动态路由协议的发展历程
动态路由协议自上个世纪八十年代初期开始应用于网络。1982 年第一版 RIP 协议问世,不过,其中的一些基本算法早在 1969 年就已应用到 ARPANET 中。
随着网络技术的不断发展,网络的愈趋复杂,新的路由协议不断涌现。右图显示了路由协议的分类情况。
作为最早的路由协议之一,RIP(路由信息协议)目前已经演变到 RIPv2 版。但新版的 RIP 协议仍旧不具有扩展性,无法用于较大型的网络。为了满足大型网络的需要,两种高级路由协议——OSPF(开放最短路径优先)协议和 IS-IS(中间系统到中间系统)协议应运而生。Cisco 也推出了面向大型网络的 IGRP(内部网关路由协议)和 EIGRP(增强型 IGRP)协议。
此外,不同网际网络之间的互联也提出对网间路由的需求。现在,各 ISP 之间以及 ISP 与其大型专有客户之间采用 BGP(边界网关路由)协议来交换路由信息。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_11.PNG)
二、网络发现和路由表维护
路由协议由一组处理进程、算法和消息组成,用于交换路由信息,并将其选择的最佳路径添加到路由表中。路由协议的用途如下:
a) 发现远程网络
b) 维护最新路由信息
c) 选择通往目的网络的最佳路径
d) 当前路径无法使用时找出新的最佳路径
路由协议由哪些部分组成?
a) 数据结构 - 某些路由协议使用路由表和/或数据库来完成路由过程。此类信息保存在内存中。
b) 算法 - 算法是指用于完成某个任务的一定数量的步骤。路由协议使用算法来路由信息并确定最佳路径。
c) 路由协议消息 - 路由协议使用各种消息找出邻近的路由器,交换路由信息,并通过其它一些任务来获取和维护准确的网络信息。
所有路由协议都有着相同的用途 - 获取远程网络的信息,并在网络拓扑结构发生变化时快速作出调整。所用的方式由该协议所使用的算法及其运行特点决定。动态路由协议的运行过程由路由协议类型及协议本身所决定。一般来说,动态路由协议的运行过程如下:
a) 路由器通过其接口发送和接收路由消息。
b) 路由器与使用同一路由协议的其它路由器共享路由消息和路由信息。
c) 路由器通过交换路由信息来了解远程网络。
d) 如果路由器检测到网络拓扑结构的变化,路由协议可以将这一变化告知其它路由器。
三、动态路由协议的分类
可以按路由协议的特点将其分为不同的类别。以下为常用的一些路由协议:
- RIP - 一种距离矢量内部路由协议
- IGRP - Cisco 开发的距离矢量内部路由协议(12.2 IOS 及后续版本已不再使用)
- OSPF - 一种链路状态内部路由协议
- IS-IS - 一种链路状态内部路由协议
- EIGRP - Cisco 开发的高级距离矢量内部路由协议
- BGP - 一种路径矢量外部路由协议
注: IS-IS 和 BGP 的内容不在本课程范围内,我们将在 CCNP 课程中对其进行讨论。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_12.PNG)
四、IGP和EGP
AS(自治系统) - 也称为路由域,是指一个共同管理区域内的一组路由器。例如公司的内部网络和 Internet 服务提供商的网络。由于 Internet 基于自治系统,因此既需要使用内部路由协议,也需要使用外部路由协议。这两类协议如下:
IGP(内部网关协议),用于在自治系统内部路由
EGP(外部网关协议),用于在自治系统之间路由
下图简单对比了 IGP 与 EGP 的区别。本章将详细介绍自治系统的概念。
IGP 用于在路由域的内部进行路由,此类网络由单个公司或组织管理。自治系统通常由许多属于公司、学校或其它机构的独立网络组成。IGP 用于在自治系统内部路由,同时也用于在独立网络内部路由。例如,CENIC 网络是一个由加利福尼亚各个学校、院校和大学组成的自治系统。CENIC 在其自治系统内部使用 IGP 路由来实现所有这些机构的互联。同时,CENIC 的各个教育机构网络也使用自己选择的 IGP 协议实现各自网络的路由。如同 CENIC 使用 IGP 来确定自治系统内部的最佳路由路径一样,各个教育机构也通过 IGP 来确定其各自路由域内部的最佳路径。适用于 IP 协议的 IGP 包括 RIP、IGRP、EIGRP、OSPF 和 IS-IS。
路由协议(更具体地说是路由协议所使用的算法)使用度量来确定到达某个网络的最佳路径。RIP 路由协议使用的度量是跳数,即一个数据包在到达另一个网络过程中必须经过的路由器数量。OSPF 使用带宽来确定最短路径。
与 IGP 不同,EGP 用于不同机构管控下的不同自治系统之间的路由。BGP 是目前唯一使用的一种 EGP 协议,也是 Internet 所使用的路由协议。BGP 属于路径矢量协议,可以使用多种不同的属性来测量路径。对于 ISP 而言,除了选择最快的路径之外,还有许多更为重要的问题需要考虑。BGP 通常用于 ISP 之间的路由,有时也用于公司和 ISP 之间的路由。BGP 不属于本课程 (CCNA) 的内容,会在 CCNP 中进行讲述。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_13.PNG)
练习(Packet Tracer Activity)
五、距离矢量和链路状态
内部网关协议 (IGP) 可以划分为两类:
a) 距离矢量路由协议
b) 链路状态路由协议
距离矢量是指以距离和方向构成的矢量来通告路由信息。距离按跳数等度量来定义,方向则是下一跳的路由器或送出接口。距离矢量协议通常使用贝尔曼-福特 (Bellman-Ford) 算法来确定最佳路径。
某些距离矢量协议会定期向所有邻近的路由器发送完整的路由表。在大型网络中,这些路由更新的数据量会愈趋庞大,因而会在链路中产生大规模的通信流量。
六、有类和无类
有类路由协议在路由信息更新过程中不发送子网掩码信息。 最早出现的路由协议(如 RIP)都属于有类路由协议。那时,网络地址是按类(A 类、B 类或 C 类)来分配的。路由协议的路由信息更新中不需要包括子网掩码,因为子网掩码可以根据网络地址的第一组二进制八位数来确定。
尽管直至现在,某些网络仍在使用有类路由协议,但由于有类协议不包括子网掩码,因此并不适用于所有的网络环境。如果网络使用多个子网掩码划分子网,那么就不能使用有类路由协议。也就是说,有类路由协议不支持 VLSM(可变长子网掩码)。
有类路由协议的使用还有其它一些限制,比如,不支持非连续网络。有关有类路由协议、非连续网络和 VLSM 的内容,将在后面的章节中讨论。
有类路由协议包括 RIPv1 和 IGRP。
在无类路由协议的路由信息更新中,同时包括网络地址和子网掩码。如今的网络已不再按照类来分配地址,子网掩码也就无法根据网络地址的第一个二进制八位数来确定。如今的大部分网络都需要使用无类路由协议,因为无类路由协议支持 VLSM、非连续网络以及后面章节中将会讨论到的其它一些功能。
在下图中,您可以看到,无类网络在同一拓扑结构中同时使用了 /30 和 /27 子网掩码,还可以看到该拓扑结构采用的是非连续网络设计。
无类路由协议包括 RIPv2、EIGRP、OSPF、IS-IS 和 BGP 等。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_14.PNG)
七、收敛
收敛是指所有路由器的路由表达到一致的过程。当所有路由器都获取到完整而准确的网络信息时,网络即完成收敛。收敛时间是指路由器共享网络信息、计算最佳路径并更新路由表所花费的时间。网络在完成收敛后才可以正常运行,因此,大部分网络都需要在很短的时间内完成收敛。
收敛过程既具协作性,又具独立性。路由器之间既需要共享路由信息,各个路由器也必须独立计算拓扑结构变化对各自路由过程所产生的影响。由于路由器独立更新网络信息以与拓扑结构保持一致,所以,也可以说路由器通过收敛来达成一致。
收敛的有关属性包括路由信息的传播速度以及最佳路径的计算方法。 可以根据收敛速度来评估路由协议。收敛速度越快,路由协议的性能就越好。通常,RIP 和 IGRP 收敛较慢,而 EIGRP 和 OSPF 收敛较快。
八、度量
有的时候,路由协议知道多条通往同一目的地的路径。要选择最佳路径,路由协议必须能够评估和区分所有可用的路径。度量的作用就在于此。度量是指路由协议用来分配到达远程网络的路由开销的值。有多条路径通往同一远程网络时,路由协议使用度量来确定最佳的路径。
每一种路由协议都有自己的度量。例如,RIP 使用跳数,EIGRP 使用带宽和延迟,Cisco 版本的 OSPF 使用的是带宽。可以想象,跳数是最简单的度量。跳数是指数据包到达目的网络必须通过的路由器的数量。对于下图中的 R3 而言,距离网络 172.16.3.0 有 2 跳,也就是相隔两台路由器。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_15.PNG)
不同的路由协议使用不同的度量。一种路由协议使用的度量可能会与另一种路由协议存在差异。由于使用的度量不同,两种不同的路由协议对于同一目的网络可能会选择不同的路径。
比如,RIP 会选择跳数最少的路径,而 OSPF 则会选择带宽最高的路径。
IP 路由协议中使用的度量如下:
a) 跳数 - 一种简单的度量,计算的是数据包所必须经过的路由器数量
b) 带宽 - 通过优先考虑最高带宽的路径来做出选择
c) 负载 - 考虑特定链路的通信量使用率
d) 延迟 - 考虑数据包经过某个路径所花费的时间
e) 可靠性 - 通过接口错误计数或以往的链路故障次数来估计出现链路故障的可能性
f) 开销 - 由 IOS 或网络管理员确定的值,表示优先选择某个路由。开销既可以表示一个度量,也可以表示多个度量的组合,还可以表示路由策略。
各路由协议的度量如下:
RIP:跳数 - 选择跳数最少的路由作为最佳路径。
IGRP 和 EIGRP:带宽、延迟、可靠性和负载 - 通过这些参数计算综合度量值,选择综合度量值最小的路由作为最佳路径。默认情况下,仅使用带宽和延迟。
IS-IS 和 OSPF:开销 - 选择开销最低的路由作为最佳路径。Cisco 采用的 OSPF 使用的是带宽。IS-IS 将在 CCNP 中讨论。
路由协议根据度量值最低的路由来选择最佳路径。
请参考下图中的示例。此处的路由器使用的是 RIP 路由协议。通过命令 show ip route 可以查看与特定路由关联的度量值。对于路由表条目,括号中的第二个值即为度量值。在右图中,R2 到网络 192.168.8.0/24 的路由距离为 2 跳。
R 192.168.8.0/24 [120/2] via 192.168.4.1, 00:00:26, Serial0/0/1
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_16.PNG)
九、负载均衡
我们前面说过,各个路由协议使用度量来确定到达远程网络的最佳路由。但是,如果通往同一目的网络的多条路由具有相同的度量值,那该如何处理?路由器如何确定使用哪一条路径来转发数据分组?在这种情况下,路由器不只是选择一条路由。它会在这些开销相同的路径之间进行“负载均衡”,数据分组会使用所有路由开销相同的路径转发出去。
要查看负载均衡是否起作用,可检查路由表。如果路由表中有多个路由条目与同一目的网络关联,则负载均衡正在起作用。
注:负载均衡既可以根据数据包实施,也可以根据目的网络实施。至于路由器在开销相同的路径间如何对数据分组进行负载均衡,这由交换过程来控制。交换过程将在后面的章节中详细讨论。
R2 使用两条开销相同的路径对通往 PC5 的通信量进行负载均衡。
运行 show ip route 命令后可以看到,可以通过 192.168.2.1 (Serial 0/0/0) 和 192.168.4.1 (Serial 0/0/1) 到达目的网络 192.168.6.0。
R 192.168.6.0/24 [120/1] via 192.168.2.1, 00:00:24, Serial0/0/0
[120/1] via 192.168.4.1, 00:00:26, Serial0/0/1
对于本课程中讨论的所有路由协议,默认情况下,最多只能自动在 4 条开销相同的路由上实施负载均衡。EIGRP 还可以在多条路由开销不相同的路径上进行负载均衡,此功能将在 CCNP 中讨论。
十、管理距离
我们知道,路由器通过静态路由和动态路由协议来了解与其直连的邻近网络以及远程网络的信息。实际上,路由器可能会从多个来源获悉通往同一网络的路由。例如,为某一网络/子网掩码配置静态路由后,动态路由协议(如 RIP)又动态了解到该网络/子网掩码。 路由器需要选择在路由表中添加哪条路由。
注:您可能想知道有关等价路径的内容。只有当通往同一网络的多条路由都来自相同的路由来源,它们才能同时添加到路由表中。例如,等价路由必须都是静态路由,或者都是 RIP 路由,才能添加到路由表中。
在同一网络中可以部署多个动态路由协议,不过这种情况很少见。在某些情况下,有必要使用多个路由协议(如 RIP 和 OSPF)来路由同一网络地址。由于不同的路由协议使用不同的度量(例如,RIP 使用跳数,而 OSPF 使用带宽),因此,不能通过比较度量值来确定最佳路径。
那么,当路由器从多个路由来源获取到同一网络的路由信息时,将如何确定在路由表中添加哪条路由?
管理距离 (AD) 定义路由来源的优先级别。对于每个路由来源(包括特定路由协议、静态路由又或是直连网络),使用管理距离值按从高到低的优选顺序来排定优先级。如果从多个不同的路由来源获取到同一目的网络的路由信息,Cisco 路由器会使用 AD 功能来选择最佳路径。
管理距离是从 0 到 255 的整数值。值越低表示路由来源的优先级别越高。管理距离值为 0 表示优先级别最高。只有直连网络的管理距离为 0,而且这个值不能更改。
可以修改静态路由和动态路由协议的管理距离。相关内容将在 CCNP 中讨论。
管理距离值为 255 表示路由器不信任该路由来源,并且不会将其添加到路由表中。
注:在定义管理距离时,通常使用“可信度”这个术语。管理距离值越低,路由的可信度越高。
下图中是 show ip route的显示。
对于路由表条目,括号中的第一个值即为 AD 值。可以看到,R2 有一条通往 192.168.6.0/24 网络的路由,其 AD 值为 90。
D 192.168.6.0/24 [90/2172416] via 192.168.2.1, 00:00:24, Serial0/0/0
R2 当前同时使用 RIP 和 EIGRP 路由协议。(请记住:通常情况下,路由器很少会使用多个动态路由协议,此处只是为了说明管理距离的工作原理。)R2 使用 EIGRP 从 R1 获悉通往 192.168.6.0/24 的路由,同时,也使用 RIP 从 R3 获悉了该路由。RIP 的管理距离值为 120,而 EIGRP 的管理距离值相对较低,为 90。这样,R2 会将 EIGRP 所获悉的路由添加到路由表中,并且将发往 192.168.6.0/24 网络的所有数据包转发到路由器 R1。
下图中是 show ip rip database的显示。
如果到 R1 的链路无法使用,会发生什么情况?如果是这样,R2 似乎就没有到 192.168.6.0 网络的路由了。而实际上,R2 在 RIP 数据库中仍旧保存了有关 192.168.6.0 网络的 RIP 路由信息。这可以通过 show ip rip database 命令来查看。此命令可以显示 R2 了解到的所有 RIP 路由,包括添加在路由表中的 RIP 路由和没有添加的 RIP 路由。
您在第 2 章已了解到,管理员可以通过输入静态路由来配置到达目的网络的最佳路径。因此,静态路由的默认 AD 值为 1。也就是说,除了直连网络(默认 AD 值为 0),静态路由是优先级别最高的路由来源。
有时,管理员配置的静态路由与使用动态路由协议到达的目的网络相同,但使用不同的路径。静态路由所配置的 AD 值将大于路由协议的 AD 值。如果动态路由协议所使用的路径出现链路故障,该路由协议添加的路由将会从路由表中删除。管理员指定的静态路由便成为唯一的路由来源,并会自动添加到路由表中。这种方式称为浮动静态路由,将在 CCNP 中讨论。
无论是使用下一跳 IP 地址的静态路由,还是使用送出接口的静态路由,其默认 AD 值均为 1。不过,如果使用特定的送出接口来配置静态路由,运行 show ip route 命令后不会列出其 AD 值。并且命令输出中会将目的网络显示为通过该接口直连网络。
请单击右图中的 show ip route 按钮。
到 172.16.3.0 的静态路由显示为 directly connected(直连)。但没有列出 AD 值信息。这常常会给人造成误解,认为此路由的 AD 值一定是 0,因为它确实显示为“directly connected”。但这种推论是错误的。任何静态路由,包括使用送出接口配置的静态路由,其默认 AD 值均为 1。请记住,只有直连网络的 AD 值才可以为 0。这可以通过使用带 [route] 参数的 show ip route 命令来验证。在该命令中指定 [route] 参数,可以显示路由的详细信息,包括距离(即 AD 值)。
请单击右图中的 show ip route 172.16.3.0 按钮。
通过 show ip route 172.16.3.0 命令可以看到,实际的管理距离为 1。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_21.PNG)
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_22.PNG)
在接口上配置 IP 地址并启用之后,路由表中就会显示相应的直连网络。直连网络的 AD 值为 0,表示该网络是优先级别最高的路由来源。对于路由器而言,最好的路由莫过于与其接口直连的网络。因此,直连网络的管理距离不能更改,并且其它路由来源的管理距离不能为 0。
十一、路由协议和子网划分
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_24.PNG)
子网划分练习:下载
十二、距离矢量路由协议
顾名思义,距离矢量意味着用距离和方向矢量通告路由。距离使用诸如跳数这样的度量确定,而方向则是下一跳路由器或送出接口。
使用距离矢量路由协议的路由器并不了解到达目的网络的整条路径。该路由器只知道:
应该往哪个方向或使用哪个接口转发数据包
自身与目的网络之间的距离
一些距离矢量路由协议需要路由器定期向各个邻居广播整个路由表。这种方法效率很低,因为这些路由更新不仅消耗带宽,而且处理起来也会消耗路由器的 CPU 资源。
距离矢量路由协议有一些共同特征。
按照一定的时间间隔发送定期更新(RIP 的间隔为 30 秒,IGRP 的间隔为 90 秒)。即使拓扑结构数天都未发生变化,定期更新仍然会不断地发送到所有邻居那里。
邻居是指使用同一链路并配置了相同路由协议的其它路由器。路由器只了解自身接口的网络地址以及能够通过其邻居到达的远程网络地址,对于网络拓扑结构的其它部分则一无所知。使用距离矢量路由的路由器不了解网络拓扑结构。
广播更新均发送到 255.255.255.255。配置了相同路由协议的相邻路由器将处理此类更新。所有其它设备也会在第 1、2、3 层处理此类更新,然后将其丢弃。一些距离矢量路由协议使用组播地址而不是广播地址。
定期向所有邻居发送整个路由表更新(但其中也有一些特例,我们将在稍后讨论)。接收这些更新的邻居必须处理整个更新,从中找出有用的信息,并丢弃其余的无用信息。某些距离矢量路由协议(如 EIGRP)不会定期发送路由表更新。
距离矢量协议的核心是算法。算法用于计算最佳路径并将该信息发送给邻居。
算法是用于完成特定任务的步骤,开始于给定的初始状态并终止于定义好的结束状态。不同的路由协议使用不同的算法将路由添加到路由表中、将更新发送给邻居以及确定路径。
用于路由协议的算法定义了以下过程:
a) 发送和接收路由信息的机制。
b) 计算最佳路径并将路由添加到路由表的机制。
c) 检测并响应拓扑结构变化的机制。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_25.PNG)
当路由器冷启动或通电开机时,它完全不了解网络拓扑结构。它甚至不知道在其链路的另一端是否存在其它设备。路由器唯一了解的信息来自自身 NVRAM 中存储的配置文件中的信息。当路由器成功启动后,它将应用所保存的配置。如第 1 章和第 2 章所述,如果正确配置了 IP 地址,则路由器将首先发现与其自身直连的网络。
初次网络发现
在右图所示的范例中,当路由器冷启动后,在开始交换路由信息之前,路由器将首先发现与其自身直连的网络以及子网掩码。以下信息会添加到路由器的路由表中:
R1
10.1.0.0 available through interface FastEthernet 0/0
10.2.0.0 available through interface Serial 0/0/0
R2
10.2.0.0 available through interface Serial 0/0/0
10.3.0.0 available through interface Serial 0/0/1
R3
10.3.0.0 available through interface Serial 0/0/0
10.4.0.0 available through interface FastEthernet 0/0
配置路由协议后,路由器就会开始交换路由更新。一开始,这些更新仅包含有关其直连网络的信息。收到更新后,路由器会检查更新,从中找出新信息。任何当前路由表中没有的路由都将被添加到路由表中。
配置路由协议后,路由器就会开始交换路由更新。一开始,这些更新仅包含有关其直连网络的信息。收到更新后,路由器会检查更新,从中找出新信息。任何当前路由表中没有的路由都将被添加到路由表中。
网络收敛所需的时间与网络的规模成直接比例。在动画中,区域 4 的分支路由器 (B2-R4) 正在冷启动。从动画中可以看出,新的路由信息随着相邻路由器之间传播的更新信息而不断扩散。通过五轮定期更新后,区域 1、2 和 3 内的大多数分支路由器都已获知由 B2-R4 通告的新路由。我们可以根据路由协议传播此类信息的速度 - 即收敛速度来比较路由协议的性能。
达到收敛的速度包含两个方面:
路由器在路由更新中向其邻居传播拓扑结构变化的速度。
使用收集到的新路由信息计算最佳路径路由的速度。
网络在达到收敛前无法完全正常工作,因此,网络管理员更喜欢使用收敛时间较短的路由协议。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_26.PNG)
十三、RIP1的特征和消息格式
RIP 消息格式:RIP 报头
RIP 报头长度为四个字节,这四个字节被划分为三个字段,如图中橙色区域所示。命令字段指定了消息类型,我们将在下一节详细讨论这一话题。版本字段设置为 1,表示为 RIPv1。第三个字段被标记为必须为零。“必须为零”字段用于为协议将来的扩展预留空间。
RIP 消息格式:路由条目
消息的路由条目部分包含三个字段,其内容分别是:地址类型标识符(设置为 2 代表 IP 地址,但在路由器请求完整的路由表时设置为 0)、IP 地址以及度量。路由条目部分代表一个目的路由及与其关联的度量。一个 RIP 更新最多可包含 25 个路由条目。数据报最大可以是 512 个字节,不包括 IP 或 UDP 报头。
为什么很多字段都设置为零?
RIP 开发得比 IP 更早,以前是用于其它网络协议(如 XNS)。BSD 也对其产生一定影响。最初添加额外的空间是为了今后支持更大的地址空间。我们将在第 7 章中看到,RIPv2 目前已经使用了这些空字段的绝大部分。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_27.PNG)
十四、启用RIP
要启用动态路由协议,请进入全局配置模式并使用 router 命令。如图所示,如果在空格后键入问号,屏幕上将显示 IOS 所支持的所有可用路由协议列表。
要进入路由器配置模式进行 RIP 配置,请在全局配置模式提示符处输入 router rip。请注意提示符将从全局配置模式提示符变成以下提示符:
R1(config-router)#
该命令并不直接启动 RIP 过程。但通过它用户可以进入该路由协议的配置模式。此时不会发送路由更新。
如果您需要从设备上彻底删除 RIP 路由过程,请使用相反的命令 no router rip。该命令会停止 RIP 过程并清除所有现有的 RIP 配置。
十五、 指定网络
进入 RIP 路由器配置模式后,路由器便按照指示开始运行 RIP。但路由器还需了解应该使用哪个本地接口与其它路由器通信,以及需要向其它路由器通告哪些本地连接的网络。要为网络启用 RIP 路由,请在路由器配置模式下使用 network 命令,并输入每个直连网络的有类网络地址。
Router(config-router)#network directly-connected-classful-network-address
network 命令的作用如下:
在属于某个指定网络的所有接口上启用 RIP。相关接口将开始发送和接收 RIP 更新。
在每 30 秒一次的 RIP 路由更新中向其它路由器通告该指定网络。
注: 如果您输入子网地址,IOS 会自动将其转换到有类网络地址。例如,如果您输入命令 network 192.168.1.32,路由器将把它转换为 network 192.168.1.0。
现在我们使用 network 命令配置所有三台路由器的直连网络,如右图所示。注意只能输入有类网络。
当使用 network 命令进行 RIP 配置时,如果您输入了子网地址或接口的 IP 地址而不是有类网络地址,会发生什么情况?
R3(config)#router rip
R3(config-router)#network 192.168.4.0
R3(config-router)#network 192.168.5.1
在本例中,我们输入了接口 IP 地址而不是有类网络地址。您会发现 IOS 并没有给出错误消息。相反,IOS 自动更正了输入,将其变为有类网络地址。这可以通过下面的命令输出得到验证。
R3#show running-config
!
router rip
network 192.168.4.0
network 192.168.5.0
!
如果路由表中缺少某个网络,可以使用 show ip protocols 命令来检查路由配置。show ip protocols 命令会显示路由器当前配置的路由协议。其输出可用于检验大多数 RIP 参数,从而确认:
是否已配置 RIP 路由
发送和接收 RIP 更新的接口是否正确
路由器通告的网络是否正确
RIP 邻居是否发送了更新
此命令对于检验其它路由协议的工作情况也非常有用,后面讨论 EIGRP 和 OSPF 时也会用到它。
十六、被动接口
不必要的 RIP 更新会影响网络性能
您在前面的示例中可以看到,尽管 R2 FastEthernet0/0 接口连接的 LAN 上并没有 RIP 设备,R2 仍然会从该接口发送更新。R2 无法得知该 LAN 上是否有 RIP 设备,因此每 30 秒就会发送一次更新。在 LAN 上发送不需要的更新会在以下三个方面对网络造成影响:
1. 带宽浪费在传输不必要的更新上。因为 RIP 更新是广播,所以交换机将向所有端口转发更新。
2. LAN 上的所有设备都必须逐层处理更新,直到传输层后接收设备才会丢弃更新。
3. 在广播网络上通告更新会带来严重的风险。RIP 更新可能会被数据包嗅探软件中途截取。路由更新可能会被修改并重新发回该路由器,从而导致路由表根据错误度量误导流量。
停止不需要的 RIP 更新
您可能会想到使用 no network 192.168.3.0 命令从配置中删除 192.168.3.0 网络,从而停止该更新,但这样做的后果是 R2 将不会在发往 R1 和 R3 的更新中通告该 LAN。正确的解决方法是使用 passive-interface 命令,该命令可以阻止路由更新通过某个路由器接口传输,但仍然允许向其它路由器通告该网络。在路由器配置模式下输入 passive-interface 命令。
Router(config-router)#passive-interface interface-type interface-number
该命令会停止从指定接口发送路由更新。但是,从其它接口发出的路由更新中仍将通告指定接口所属的网络。
如右图所示,我们首先使用 passive-interface 命令配置 R2,以阻止 FastEthernet0/0 上的路由更新,因为该 LAN 没有 RIP 邻居。然后使用 show ip protocols 命令检验被动接口。请注意,该接口将不再在 Interface 下列出,而是列在一个新的部分 - Passive Interface(s) 下。还请注意,网络 192.168.3.0 仍然列在 Routing for Networks 之下,这表示该网络仍然作为路由条目包含在发送到 R1 和 R3 的 RIP 更新中。
所有的路由协议都支持 passive-interface 命令。进行常规路由配置时,您应在适当的时候使用 passive-interface 命令。
十七、环回接口
环回接口是一种纯软件接口,用于模拟物理接口。与其它接口一样,我们也可以为环回接口指定 IP 地址。其它路由协议(例如 OSPF)也会出于各种各样的目的而使用环回接口。第 11 章 OSPF 中会介绍相关内容。
在实验环境中,环回接口非常有用,它可用来创建额外的网络而不需要在路由器上添加实际接口。环回接口可以 ping 通,其子网也可在路由更新中加以通告。因此,环回接口非常适合用来模拟连接到同一路由器的多个网络。在我们的示例中,R3 无需四个 LAN 接口就能演示多个子网和 VLSM,我们可以使用环回接口。
要在 R2 上配置静态超网路由,请使用以下命令:
R2(config)#ip route 192.168.0.0 255.255.0.0 Null0
您应该还记得,路由总结允许使用一个高级别路由条目来代表多条低级别路由,从而达到缩小路由表大小的目的。R2 上的静态路由使用 /16 掩码来总结从 192.168.0.0/24 到 192.168.255.0/24 的 256 个网络。
静态总结路由 192.168.0.0/16 代表的地址空间实际并不存在。为了模拟此静态路由,我们使用了一个空接口作为送出接口。您不需要使用任何命令来创建或配置空接口。它始终为开启状态,但不会转发或接收流量。发送到空接口的流量会被它丢弃。在本示例中,空接口将作为静态路由的送出接口。第 2 章“静态路由”介绍过,静态路由必须具有活动的送出接口才会被添加到路由表中。虽然属于总结网络 192.168.0.0/16 的网络实际并不存在,但有了这个空接口,R2 便能在 RIP 中通告此静态路由。
需要输入的第二条命令是 redistribute static 命令:
R2(config-router)#redistribute static
重分布是指获取来自某个路由源的路由,然后将这些路由发送到另一个路由源。在示例拓扑结构中,我们希望 R2 上的 RIP 过程重分布静态路由 (192.168.0.0/16),即将该路由导入 RIP,然后使用 RIP 过程发送给 R1 和 R3。后面我们将会看到此过程是否确实发生,以及没有发生的原因是什么。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_28.PNG)
十八、RIPv1和RIPv2
RFC 1723 中对 RIPv2 进行了定义。与第 1 版一样,RIPv2 封装在使用 520 端口的 UDP 数据段中,最多可包含 25 条路由。虽然 RIPv2 与 RIPv1 的基本消息格式相同,但 RIPv2 添加了两项重要扩展。
RIPv2 消息格式的第一项扩展是添加了子网掩码字段,这样 RIP 路由条目中就能包含 32 位掩码。因此,接收路由器在确定路由的子网掩码时,不再依赖于入站接口的子网掩码或有类掩码。
RIPv2 消息格式的第二项重要扩展是添加了下一跳地址。下一跳地址用于标识比发送方路由器的地址更佳的下一跳地址(如果存在)。如果此字段被设为全零 (0.0.0.0),则发送方路由器的地址便是最佳的下一跳地址。有关下一跳地址使用方式的详细信息不在本课程范围内。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_30.PNG)
大多数路由协议(在 IP 数据包中)使用 IP 发送路由更新和其它路由信息。但 IS-IS 例外,这一点将在 CCNP 课程中讨论。任何路由协议都可能收到无效路由更新,这是一个安全隐患。造成这些无效路由更新的原因可能是恶意攻击者试图中断网络,或者是他们试图通过欺骗路由器将更新发送到错误目的地来截取数据包。错误配置的路由器也会产生无效路由更新。另外,如果用户在不知情的情况下将运行着本地网络路由协议的主机接入网络,也会造成这个问题。
例如,右图中 R1 正在向路由域中的所有其它路由器传播默认路由。但是,有人错误地将路由器 R4 添加到该网络,该路由器同样会传播默认路由。一些路由器可能会转发默认流量到 R4,而不是真正的网关路由器 R1。这些数据包将被黑洞吞噬,永远消失。
对路由器之间传输的路由信息进行身份验证可有效杜绝此类问题。RIPv2、EIGRP、OSPF、IS-IS 和 BGP 都可以配置为对路由信息进行身份验证。通过这种方式,我们便可确保路由器只接受配置了相同密码或身份验证信息的路由器发送的路由信息。注意:身份验证不会加密路由表。
注:因为 RIP 已逐渐被其它路由协议所取代,所以本章不讨论 RIPv2 身份验证的详细配置。有关将路由协议配置为使用身份验证的信息将在后面的课程中与其它安全问题一同讨论。
十九、路由表结构
让我们详细查看路由表条目,了解 1 级路由和 2 级路由。
C 192.168.1.0/24 is directly connected, Serial0/0/1
1 级路由是指子网掩码等于或小于网络地址有类掩码的路由。192.168.1.0/24 属于 1 级网络路由,因为它的子网掩码等于网络有类掩码。/24 是 C 类网络(如 192.168.1.0 网络)的有类掩码。
1 级路由可用作:
默认路由 - 是指地址为 0.0.0.0/0 的静态路由。
超网路由 - 是指掩码小于有类掩码的网络地址。
网络路由 - 是指子网掩码等于有类掩码的路由。网络路由也可以是父路由。在下一节我们将会讨论有关父路由的内容。
1 级路由的来源可以是直连网络、静态路由或动态路由协议。
1 级路由 192.168.1.0/24 可进一步定义为最终路由。最终路由是指包括以下内容的路由:
下一跳 IP 地址(另一路径)
和/或送出接口
直连网络 192.168.1.0/24 属于 1 级网络路由,因为它的子网掩码与有类掩码相同。同时该路由也是一条最终路由,因为它包含送出接口 Serial 0/0/1。
C 192.168.1.0/24 is directly connected, Serial0/0/1
在下一个主题中,我们即将看到,2 级路由也属于最终路由。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_31.PNG)
在上一主题中,我们了解到某条路由可以既是 1 级网络路由,同时也是最终路由。现在,我们开始学习另一种类型的 1 级网络路由 - 父路由。右图显示了 R2 的 172.16.3.1/24 接口的配置以及 show ip route 命令的输出。请注意,现在路由表中实际上多了两个条目。一个条目是父路由,另一个条目是子路由。为什么会出现两个条目而不是一个条目呢?
请单击图中的“父路由”和“子路由”按钮。
在向路由表中添加 172.16.3.0 子网时,也添加了另一条路由 172.16.0.0。第一个条目 172.16.0.0/24 中不包含任何下一跳 IP 地址或送出接口信息。此路由称为1 级父路由。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_32.PNG)
1 级父路由是指不包含任何网络的下一跳 IP 地址或送出接口的网络路由。父路由实际上是表示存在 2 级路由的一个标题,2 级路由也称为子路由。只要向路由表中添加一个子网,就会在表中自动创建 1 级父路由。也就是说,只要向路由表中输入一条掩码大于有类掩码的路由,就会在表中生成父路由。子网是父路由的 2 级子路由。在本示例中,自动生成的 1 级父路由为:
172.16.0.0/24 is subnetted, 1 subnets
2 级路由是指有类网络地址的子网路由。与 1 级路由一样,2 级路由的来源可以是直连网络、静态路由或动态路由协议。在本示例中,2 级路由实际上是我们在配置 FastEthernet 0/0 接口时被添加到网络中的子网路由:
C 172.16.3.0 is directly connected, FastEthernet0/0
注:请记住,Cisco IOS 中的路由表以有类路由方案组织。1 级父路由是子网路由的有类网络地址。即使子网路由的来源是无类路由协议也同样如此。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_35.PNG)
由于两条子路由的子网掩码相同,因此父路由仍旧保留 /24 掩码,只不过现在显示了两个子网。在我们讨论路由查找过程时将会分析父路由的作用。
注:在仅有一条 2 级子路由的情况下,如果将该子路由删除,那么 1 级父路由也将随之自动删除。必须至少有一条 2 级子路由,1 级父路由才能存在。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_36.PNG)
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_54.PNG)
在本节讨论中,我们将会用到右图中的拓扑结构。利用 RouterX 与图中所示的 VLSM 配置,我们可以研究 VLSM 对路由表的影响。RouterX 有三个直连网络。这三个子网都属于有类网络 172.16.0.0/16,因此都是 2 级子路由。
单击xia图中的按钮 2、3 和 4。
请注意,这三条子路由并不像上面的有类示例中那样共用同一个子网掩码。在本例中,我们实施的是使用 VLSM 的网络编址方案。
单击xia图中的按钮 1。
无论何时,只要存在属于同一有类网络但具有不同子网掩码的两条或多条子路由,路由表中的显示就会稍有不同,这表明此父网络经过了可变子网划分。
虽然这样的父/子关系使用有类架构来显示网络及其子网,但这种格式既可用于有类寻址也可用于无类寻址。无论网络使用何种寻址方案(有类还是无类),路由表都会使用有类方案。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_37.PNG)
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_57_search_route.PNG)
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_58_search_route.PNG)
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_60_search_route.PNG)
在前面的路由查找讨论中,用到了最佳匹配这个术语。那么什么是最佳匹配呢?最佳匹配也可称为最长匹配。
首先我们应清楚什么是匹配。路由表中的路由与数据包的目的 IP 地址的最左侧开始,必须达到一个最少的匹配位数。这个最少匹配位数由路由表中相应路由的子网掩码决定。(请记住,IP 数据包仅包含 IP 地址,不包含子网掩码。)
最佳匹配(最长匹配)是指路由表中与数据包的目的 IP 地址从最左侧开始存在最多匹配位数的路由。通常情况下,最左侧有着最多匹配位数(最长匹配)的路由总是首选路由。
例如,在右图中我们看到一个目的地址为 172.16.0.10 的数据包。路由表中的许多路由都可能会 与该数据包的目的 IP 地址匹配。图中显示了三条都 与该数据包匹配的路由:172.16.0.0/12、172.16.0.0/18 和 172.16.0.0/26。三条路由中,172.16.0.0/26 路由的匹配位数最长。请记住,这几条路由必须达到其子网掩码所指定的最少匹配位数,才会被视为匹配路由。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_67_longest_match.PNG)
用于确定最长匹配的子网掩码并不总是明确的。让我们通过几个示例详细的分析一下其中的原因。
单击“播放”观看动画。
在本例中,PC1 向 R3 上的 192.168.1.2 接口发送了一个 ping 命令。R1 收到了该数据包。
单击右图中的“路由信息”,然后单击“R1 路由表”。
还记得路由查找过程中步骤 1 的第一个部分吗?右图演示了这个步骤。
单击右图中的“步骤 1”按钮。
路由器首先检查 1 级路由,以查找最佳匹配。在我们的示例中,目的 IP 地址 192.168.1.2 与 1 级最终路由 192.168.1.0/24 匹配。
单击右图中的“步骤 1a”按钮。
R 192.168.1.0/24 [120/1] via 172.16.2.2, 00:00:25, Serial0/0/0
R1 使用此路由并从 Serial 0/0/0 将数据包转发出去。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_68_longest_match_1level_route.PNG)
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_68_longest_match_routing_table.PNG)
为什么数据包目的地址与 1 级路由 192.168.1.0/24 匹配,而不是与 172.16.0.0 子网的某条路由匹配呢?答案似乎是显而易见的。我们会说:“路由器当然会使用 192.168.1.0/24 了”。但实际上,路由查找过程是通过比较 32 位的地址与 32 位的路由条目来查找最长匹配的。
IOS 用于搜索路由表的算法不在本章谈论范围之内。对我们来说,重要的是明白路由条目与数据包目的 IP 地址匹配的原因以及不匹配的原因。
为什么数据包的地址与路由表中所有的 172.16.0.0/24 子网都不匹配呢?
172.16.0.0/24 是三个子网(即三条子路由)的父路由。数据包的目的 IP 地址与父路由的有类地址(即 172.16.0.0/16)必须匹配,才能检查子路由是否与该目的 IP 地址匹配。
那么,父路由最左侧是否有至少 16 位与数据包目的 IP 地址 192.168.1.2 的前 16 位匹配呢?很明显,答案是没有。不过,在右图中,您会看到路由器实际上是先检查第一位,发现第一位匹配,然后接着检查第二位。因为第二位不匹配,所以查找过程会转而搜索其它路由条目。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_68_longest_match_1721600mask16_1level_route.PNG)
现在让我们看看,路由器是如何发现数据包的目的 IP 地址 192.168.1.2 与路由表中的下一条路由 192.168.1.0/24(一条最终路由)匹配的。
R 192.168.1.0/24 [120/1] via 172.16.2.2, 00:00:25, Serial0/0/0
路由 192.168.1.0 是 1 级最终路由,因此它也包含子网掩码 /24。在右图中可以注意到,最左侧的前 24 位都与数据包的目的 IP 地址匹配。
如图所示,该路由和目的 IP 地址不仅达到了至少 24 位的匹配要求,而且总共有 30 位匹配。这一点是否重要?在后面我们会看到,路由表中可能存在多条与同一目的 IP 地址匹配的路由。那么究竟哪一条是首选路由呢?答案是匹配位数最多的那一条。
在本例中,目的 IP 地址 192.168.1.0 与 1 级最终路由 192.168.1.0/24 匹配。由于没有更长、更具体的匹配条目,因此路由器会将该数据包从送出接口 Serial 0/0/0 转发出去。
注:请记住,对于仅有下一跳 IP 地址而没有送出接口的路由,路由查找进程需要执行递归查找。要回顾有关递归查找的内容,请参阅第 2 章“静态路由”。
让我们分析一下数据包目的地址与 1 级父路由匹配时会出现什么样的情况。
单击右图中的“路由信息”按钮。
如图所示,父路由既不包括下一跳地址也不包括送出接口,它只是其 2 级子路由(子网)的“标题”。
图中,子路由的子网掩码 /24 显示在父路由 172.16.0.0 中。
只有 1 级父路由的有类地址与数据包的目的 IP 地址匹配,路由器才会检查 2 级子路由是否与该目的 IP 地址匹配。
示例:1 级父路由和 2 级子路由
在右图的示例中,PC1 向地址为 172.16.3.10 的 PC2 发送了一个 ping 命令。R1 收到该数据包,开始搜索路由表以查找匹配路由。
单击右图中的“步骤 1b”按钮。
首先匹配的是 1 级父路由 172.16.0.0。请记住,对于非 VLSM 子网,不会显示父路由的有类掩码。只有父路由的有类地址与数据包的目的 IP 地址匹配,路由器才会检查子路由(子网)是否与该目的 IP 地址匹配。
由于第一个路由条目是 1 级父路由,它与目的地址匹配(路由查找过程中的步骤 1b),因此路由查找过程会继续步骤 2。
单击右图中的“步骤 2”按钮。
由于父路由与数据包的目的地址匹配,因此将会检查 2 级子路由,看其是否与该目的地址匹配。不过,这一次是使用实际的子网掩码 /24 来确定最左侧必须匹配的最少位数。
单击右图中的“步骤 2a”按钮。
路由查找过程搜索子路由,看其是否与该目的地址匹配。在本例中,必须至少有 24 位匹配。
让我们看看路由器是如何从 2 级子路由中找到匹配路由的。
首先,路由器检查父路由,看其是否与数据包的目的地址匹配。在本例中,IP 地址的前 16 位与父路由的前 16 位必须匹配,因为这 16 位是父路由的有类掩码(/16)。
如果父路由与数据包的目的地址匹配,路由器接下来会检查路由 172.16.1.0。只有父路由的有类掩码与数据包的目的地址匹配时,路由器才会继续检查子路由。
单击右图中的按钮 2。
检查第一个子网 172.16.1.0,发现第 23 位不匹配;由于前 24 位不匹配,因此该路由被拒绝。
单击右图中的按钮 3。
随后,路由器检查路由 172.16.2.0/24。由于第 24 位不匹配,该路由也被拒绝。必须至少有 24 位匹配。
单击右图中的按钮 4。
路由器检查最后一条子路由 172.16.3.0/24,发现该路由与数据包的目的地址匹配。由于前 24 位都匹配,因此路由表进程会使用路由 172.16.3.0/24 将目的 IP 地址为 172.16.3.10 的数据包从送出接口 Serial 0/0/0 转发出去。
R 172.16.3.0 [120/1] via 172.16.2.2, 00:00:25, Serial0/0/0
如果路由器中没有路由条目,会出现什么情况?这种情况下,路由器会丢弃数据包。
对于使用了 VLSM 编址方案的 RouterX 拓扑结构,会出现什么样的情况?查找过程会有什么变化?
使用 VSLM 不会改变路由查找过程。在 VLSM 寻址方案下,有类掩码 /16 显示在 1 级父路由中(图中的 172.16.0.0/16)。
与非 VLSM 网络相同,如果数据包的目的 IP 地址与 1 级父路由的有类掩码匹配,则会对 2 级子路由进行搜索。
使用 VLSM 唯一的不同是子路由显示自身具体的子网掩码。这些子网掩码用于确定最左侧必须与数据包目的 IP 地址匹配的位数。例如,要与 172.16.1.4 子路由匹配,最左侧至少要有 30 位匹配,这是因为子网掩码是 /30。
路由查找过程的下一步(步骤 3)会涉及到路由行为。路由行为会影响使用 no ip classless 或 ip classless 命令搜索首选路由的过程。
有类和无类路由行为 不同于有类和无类路由协议。有类和无类路由协议 影响路由表的填充方式。而有类和无类路由行为 则确定在填充路由表后如何搜索路由表。如右图所示,路由来源(包括有类路由协议和无类路由协议)为路由表提供信息。而路由行为则由 ip classless 或 no ip classless 命令指定,确定在步骤 3 中如何继续查找过程。
如您所见,路由协议和路由行为彼此之间是完全独立的。路由表可以使用无类路由协议 (如 RIPv2)提供的路由信息来填充,但如果配置了 no ip classless 命令,则会执行有类路由行为。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_73_no_ip_or_ip_classless.PNG)
拓扑结构变化
在第 7 章 “RIPv2” 中,我们了解到 RIPv1 这样的有类路由协议不支持不连续网络。尽管当前的拓扑结构中存在不连续的网络,但我们可以配置到达这些网络的静态路由。
单击xia图中的“R2 配置”按钮。
首先,我们在 R2 上添加一个静态的“全零”路由,以便将默认流量发送到 R3。然后我们将 default-information originate 命令添加到 RIP 路由过程,这样,R2 就会向 R1 发送默认路由。由此,R1 和 R2 便可以与所有其它网络通信,包括 R3 的 172.16.4.0/24。最后,我们输入命令 no network 192.168.1.0,因为我们不想再与 R3 交换 RIP 更新信息。
单击xia图中的“R3 配置”按钮。
为了完成配置,我们删除 R3 上的 RIP 路由,并在 R3 上添加了一条静态路由,以便可以将主网络 172.16.0.0/16 的流量发送到 R2(这些流量在 R3 的路由表中没有更长的匹配条目)。
此处我们不测试网络的连通性,在后面的章节中再进行测试。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_74_no_ip_classless_behavior.png)
no ip classless 和 ip classless 命令属于全局配置命令,可以输入 show running-config 命令进行查看。在 IOS 版本 11.3 和之后的版本中,ip classless 命令是默认路由行为,即执行无类路由查找过程。
如果所有的路由器都使用 no ip classless 命令进行配置,那么有类路由行为会有什么表现?
R1(config)#no ip classless
R2(config)#no ip classless
R3(config)#no ip classless
让我们分析一下,如果路由器执行的是有类路由行为(即配置了 no ip classless 命令),会发生什么样的情况。
在路由表查找过程中,步骤 3a 表明:如果使用有类路由行为 (no ip classless),查找过程将不会继续搜索路由表中的 1 级路由。如果数据包与父网络路由的子路由不匹配,则路由器会丢弃数据包。让我们看一个例子。
示例:执行有类路由行为的 R2
在本例中,R2 收到发往 PC3 (172.16.4.10) 的数据包。
单击图中的“R2 路由表”按钮和“父路由”按钮。
如图所示,路由过程搜索路由表,找到了有 16 位匹配的父路由 172.16.0.0。根据路由过程的步骤 1b,如果数据包的目的 IP 地址与父路由匹配,则会检查子路由。
现在让我们看看在检查子路由时,实际的位的匹配过程。
单击右图中的按钮 1、2 和 3。
可以注意到,没有一条子路由的前 24 位与目的 IP 地址 172.16.4.10 匹配。这些路由中最多也只有 21 位匹配。2 级子路由中没有匹配的路由。
那么,接下来会怎样呢?路由器 R2 会丢弃这个数据包。
请单击右图中的“不匹配”按钮。
由于此时路由器 R2 使用的是有类路由行为 (no ip classless),路由器不会搜索除这些子路由以外的匹配位数更少的路由。
单击右图中的“丢弃数据包”按钮。
路由表过程不会使用默认路由 0.0.0.0/0 或其它任何路由。
一种常见的错误判断是,认为路由器在没有找到更佳匹配的情况下,总是 会使用默认路由。在本示例中,尽管 R2 的默认路由符合匹配条件,但是路由器不会检查或使用该默认路由。如果网络管理员不了解有类路由行为和无类路由行为之间的区别,常常会对这种结果感到惊讶。
注:在第 9 章 “EIGRP” 中,我们还将看到另一个示例,在该示例中,了解路由表查找过程将有助您了解不使用默认路由(甚至是在执行无类路由行为的情况下)的原因。
为什么有类路由行为会按照这样的方式执行呢?人们对有类路由行为的普遍 观念源自于所有网络都属于有类网络的那个时代。在 Internet 发展初期,公司/组织获取到的都是 A 类、B 类或 C 类主网络地址。如果一个公司/组织获得了一个有类主网络 IP 地址,那么该有类地址的所有子网都归该公司/组织掌管。该公司/组织的所有路由器都会知道这个主网络的所有子网。如果某个子网不在路由表中,则意味着该子网不存在。正如您在第 6 章“VLSM 和 CIDR”中了解到的,如今 IP 地址已不再按类来分配。
让我们再次回到我们的拓扑结构示例,看看当使用无类路由行为 (ip classless) 时,位的匹配情况。
示例:执行无类路由行为的 R2
单击图中的“R2 路由表”按钮和“父路由”按钮。
R2 再次收到发往 PC3 (172.16.4.10) 的数据包。如图所示,就像有类路由行为一样,路由器搜索路由表,找到了有 16 位位匹配的父路由 172.16.0.0。按照路由过程中的步骤 1b,如果数据包的目的地址与父路由匹配,则会检查子路由。
单击右图中的按钮 1、2 和 3。
与上面有类路由行为时的情况一样,没有一条子路由的前 24 位与目的 IP 地址 172.16.4.10 匹配。这些路由中最多也只有 21 位匹配。2 级子路由中没有匹配的路由。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_86_ip_classless.PNG)
由于我们使用的是无类路由行为 (ip classless),路由器会继续搜索路由表中除该父路由及其子路由以外的其它路由。路由过程将继续搜索路由表中子网掩码少于前面父路由的子网掩码(16 位)的路由。也就是说,现在路由器会继续搜索路由表中的其它路由,这些路由中可能匹配的位较少,但仍然算是匹配。
单击xia图中的“网络路由”。
192.168.1.0/24 路由的前 24 位与目的 IP 地址不匹配。
C 192.168.1.0/24 is directly connected, Serial0/0/1
单击xia
图中的“默认路由”。
那么默认路由是否匹配?需要多少位匹配?
S* 0.0.0.0/0 is directly connected, Serial0/0/1
默认路由的掩码是 /0,也就是说需要 0 位匹配,或者说不需要匹配。默认路由是匹配位数最少的路由。在无类路由行为中,即使数据包的目的 IP 地址与其它路由都不匹配,仍会与默认路由匹配。
单击xia
图中的“转发数据包”。
在这种情况下,路由器将使用默认路由,因为它是最匹配的路由。数据包将从 Serial 0/0/1 接口转发出去。
R3 上的有类路由
请单击xia
图中的“R3 路由表”。
R3 会如何处理返回到 PC2 (172.16.2.10) 的流量呢?在右图中,您会看到在 R3 的路由表中,172.16.4.0/24 子网路由和 172.16.0.0/16 有类网络路由都是 172.16.0.0/16 父路由的 2 级子路由。无论何时,只要同时存在有类网络子网的路由以及有类网络路由自身的路由,则此有类路由和子网一样会被视为 2 级子路由。
在本例中,R3 使用 172.16.0.0/16 子路由将流量从 Serial 0/0/1 接口发回到 R2。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_92_ip_classless_search.PNG)
二十、SPF算法简介
Dijkstra 算法通常称为 SPF(最短路径优先)算法。此算法会累计每条路径从源到目的地的开销。尽管 Dijkstra 算法称为最短路径优先算法,但事实上,优先最短路径是所有路由算法的目的。
如图所示,每条路径都标有一个独立的开销值。从 R2 向连接到 R3 的 LAN 发送数据包的最短路径开销为 27。请注意,并非从所有路由器通向连接到 R3 的 LAN 的开销均为 27。每台路由器会自行确定通向拓扑中每个目的地的开销。换句话说,每台路由器都会站在自己的角度计算 SPF 算法并确定开销。随着本章内容的展开,这一点将逐步明显。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_38_dijkstra.PNG)
二十一、链路状态路由过程
那么,链路状态路由协议的具体工作原理如何呢?拓扑中的所有路由器都会完成下列链路状态通用路由过程来达到收敛:
1. 每台路由器了解其自身的链路(即与其直连的网络)。这通过检测哪些接口处于工作状态来完成。
2. 每台路由器负责“问候”直连网络中的相邻路由器。与 EIGRP 路由器相似,链路状态路由器通过直连网络中的其它链路状态路由器互换 Hello 数据包来达到此目的。
3. 每台路由器创建一个链路状态数据包 (LSP),其中包含与该路由器直连的每条链路的状态。这通过记录每个邻居的所有相关信息(包括邻居 ID、链路类型和带宽)来完成。
4. 每台路由器将 LSP 泛洪到所有邻居,然后邻居将收到的所有 LSP 存储到数据库中。接着,各个邻居将 LSP 泛洪给自己的邻居,直到区域中的所有路由器均收到那些 LSP 为止。每台路由器会在本地数据库中存储邻居发来的 LSP 的副本。
5. 每台路由器使用数据库构建一个完整的拓扑图并计算通向每个目的网络的最佳路径。就像拥有了地图一样,路由器现在拥有关于拓扑中所有目的地以及通向各个目的地的路由的详图。SPF 算法用于构建该拓扑图并确定通向每个网络的最佳路径。
二十二、了解直连的网络
对于链路状态路由协议来说,链路是路由器上的一个接口。与距离矢量协议和静态路由一样,链路状态路由协议也需要下列条件才能了解链路:正确配置接口的 IP 地址和子网掩码并将链路设置为 up 状态。还有一点相同的是:必须将接口包括在一条 network 语句中,该接口才能参与链路状态路由过程。
如图所示,R1 直连到四个网络:
通过 FastEthernet 0/0 接口连接到 10.1.0.0/16 网络
通过 Serial 0/0/0 接口连接到 10.2.0.0/16 网络
通过 Serial 0/0/1 接口连接到 10.3.0.0/16 网络
通过 Serial 0/0/2 接口连接到 10.4.0.0/16 网络
有关各条链路的状态的信息称为链路状态. 如图所示,这些信息包括:
接口的 IP 地址和子网掩码
网络类型,例如以太网(广播)链路或串行点对点链路。
该链路的开销。
该链路上的所有相邻路由器。
注:我们将会看到 Cisco 所实施的 OSPF 将链路开销(OSPF 路由度量)指定为外发接口的带宽。但出于学习本章的目的,我们采用人为指定的开销值来简化演示。
二十三、向邻居发送hello数据包
链路状态路由过程的第二步为:
每台路由器负责“问候”直连网络中的相邻路由器。
采用链路状态路由协议的路由器使用 Hello 协议来发现其链路上的所有邻居。这里,邻居 是指启用了相同的链路状态路由协议的其它任何路由器。
二十四、创建链路状态数据包
我们现在处于链路状态路由过程的第三步:
每台路由器创建一个链路状态数据包 (LSP),其中包含与该路由器直连的每条链路的状态。
单击图中的 R1。
路由器一旦建立了相邻关系,即可创建链路状态数据包 (LSP),其中包含与该链路相关的链路状态信息。来自 R1 的 LSP 的简化版如下:
1. R1;以太网 10.1.0.0/16;开销 2
2. R1 -> R2;串行点对点网络;10.2.0.0/16;开销 20
3. R1 -> R3;串行点对点网络;10.3.0.0/16;开销 5
4. R1 -> R4;串行点对点网络;10.4.0.0/16;开销 20
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_40.PNG)
二十五、将链路状态数据包泛洪到邻居
如图所示,链路状态路由过程的第四步为:
每台路由器将 LSP 泛洪到所有邻居,然后邻居将收到的所有 LSP 存储到数据库中。
每台路由器将其链路状态信息泛洪到路由区域内的其它所有链路状态路由器。路由器一旦接收到来自相邻路由器的 LSP,立即将该 LSP 从除接收该 LSP 的接口以外的所有接口发出。此过程在整个路由区域内的所有路由器上形成 LSP 的泛洪效应。
路由器接收到 LSP 后,几乎立即将其泛洪出去,不经过中间计算。距离矢量路由协议则不同,该协议必须首先运行贝尔曼-福特 (Bellman-Ford) 算法来处理路由更新,然后 才将它们发送给其它路由器;而链路状态路由协议则在泛洪完成后 再计算 SPF 算法。因此,链路状态路由协议达到收敛状态的速度比距离矢量路由协议快得多。
请记住:LSP 并不需要定期发送,而仅在下列情况下才需要发送:
在路由器初始启动期间,或在该路由器上的路由协议进程启动期间
每次拓扑发生更改时,包括链路接通或断开,或是相邻关系建立或破裂
除链路状态信息外,LSP 中还包含其它信息(例如序列号和过期信息),以帮助管理泛洪过程。每台路由器都采用这些信息来确定是否已从另一台路由器接收过该 LSP 以及 LSP 是否带有链路信息数据库中没有的更新信息。此过程使路由器可在其链路状态数据库中仅保留最新的信息。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_41.PNG)
二十六、构建链路状态数据库
链路状态路由过程的最后一步为:
每台路由器使用数据库构建一个完整的拓扑图并计算通向每个目的网络的最佳路径。
每台路由器使用链路状态泛洪过程将自身的 LSP 传播出去后,每台路由器都将拥有来自整个路由区域内所有路由器的 LSP。这些 LSP 存储在链路状态数据库中。现在,路由区域内的每台路由器都可以使用 SPF 算法来构建您之前了解过的 SPF 树。
让我们看看 R1 的链路状态数据库以及使用 SPF 算法所得的 SPF 树。
单击图中的“R1 链路状态数据库”。
经过泛洪传送,路由器 R1 已获悉其路由区域内的每台路由器的链路状态信息。图中所示为 R1 已接收到并存储在其链路状态数据库中的链路状态信息。请注意,R1 的链路状态数据库中还包括 R1 自己的链路状态信息。
单击图中的“R1 SPF 树”。
有了完整的链路状态数据库,R1 现在即可使用该数据库和 SPF(最短路径优先)算法来计算通向每个网络的首选路径(即最短路径)。如图所示,R1 不使用直接连接 R4 的路径来到达拓扑中的任何 LAN(包括 R4 所连接的 LAN),因为经过 R3 的路径开销更低。同样,R1 也不使用 R2 与 R5 之间的路径来访问 R5,因为经过 R3 的路径开销更低。拓扑中的每台路由器都站在自己的角度确定最短路径。
注:链路状态数据库和 SPF 树仍会包含那些直连的网络,那些链路在图中加了阴影。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_42.PNG)
二十七、SFP树
下面详细分析 R1 构建 SPF 树的过程。R1 的当前拓扑仅包括其邻居。不过,通过从其它路由器收到的链路状态信息,R1 现在可以开始构建整个网络的 SPF 树,它自己处于树的根部。
注:本节所述的过程仅为 SPF 算法和 SPF 树的概要,以便于理解。
SPF 算法首先处理来自 R2 的下列 LSP 信息:
1. 连接到网络 10.2.0.0/16 上的邻居 R1,开销为 20
2. 连接到网络 10.9.0.0/16 上的邻居 R5,开销为 10
3. 带有一个网络 10.5.0.0/16,开销为 2
R1 可以忽略第一个 LSP,因为 R1 已经知道它连接到网络 10.2.0.0/16 上的 R2(开销为 20)。R1 可以使用第二个 LSP 并创建一个从 R2 到另一路由器 (R5) 的链路,该链路所在的网络为 10.9.0.0/16,开销为 10。此信息被添加到 SPF 树中。通过第三个 LSP,R1 可获悉 R2 带有一个网络 10.5.0.0/16,该网络的开销为 2,且 R2 在该网络上无邻居。此链路被添加到 R1 的 SPF 树中。
SPF 算法现在处理来自 R3 的 LSP:
1. 连接到网络 10.3.0.0/16 上的邻居 R1,开销为 5
2. 连接到网络 10.7.0.0/16 上的邻居 R4,开销为 10
3. 带有一个网络 10.6.0.0/16,开销为 2
R1 可以忽略第一个 LSP,因为 R1 已经知道它连接到网络 10.3.0.0/16 上的 R3(开销为 5)。R1 可以使用第二个 LSP 并创建一个从 R3 到路由器 R4 的链路,该链路所在的网络为 10.7.0.0/16,开销为 10。此信息被添加到 SPF 树中。通过第三个 LSP,R1 可获悉 R3 带有一个网络 10.6.0.0/16,该网络的开销为 2,且 R3 在该网络上无邻居。此链路被添加到 R1 的 SPF 树中。
SPF 算法现在处理来自 R4 的 LSP:
1. 连接到网络 10.4.0.0/16 上的邻居 R1,开销为 20
2. 连接到网络 10.7.0.0/16 上的邻居 R3,开销为 10
3. 连接到网络 10.10.0.0/16 上的邻居 R5,开销为 10
4. 带有一个网络 10.8.0.0/16,开销为 2
R1 可以忽略第一个 LSP,因为 R1 已经知道它连接到网络 10.4.0.0/16 上的 R4(开销为 20)。R1 还可以忽略第二个 LSP,因为 SPF 已经知道网络 10.7.0.0/16 来自 R3 且开销为 10。
不过,R1 可以使用第三个 LSP 来创建从 R4 到路由器 R5 的链路,该链路所在的网络为 10.10.0.0/16,开销为 10。此信息被添加到 SPF 树中。通过第四个 LSP,R1 可获悉 R4 带有一个网络 10.8.0.0/16,该网络的开销为 2,且 R4 在该网络上无邻居。此链路被添加到 R1 的 SPF 树中。
SPF 算法现在处理最后一个 LSP(来自 R5):
1. 连接到网络 10.9.0.0/16 上的邻居 R2,开销为 10
2. 连接到网络 10.10.0.0/16 上的邻居 R4,开销为 10
3. 带有一个网络 10.11.0.0/16,开销为 2
R1 可以忽略前两个 LSP(分别来自网络 10.9.0.0/16 和网络 10.10.0.0/16),因为 SPF 已经获悉这些链路并已将它们添加到了 SPF 树中。通过第三个 LSP,R1 可获悉 R5 带有一个网络 10.11.0.0/16,该网络的开销为 2,且 R5 在该网络上无邻居。此链路被添加到 R1 的 SPF 树中。
R1 使用 SPF 算法处理了所有的 LSP 后,便生成完整的 SPF 树。链路 10.4.0.0/16 和链路 10.9.0.0/16 未用于访问其它网络,因为存在开销更低(即更短)的路径。不过,这些网络仍然存在于该 SPF 树中,用于访问这些网络中的设备。
注:实际上,SPF 算法在构建 SPF 树的同时便会确定最短路径。此处我们将其分为两步来阐述,是为了便于理解该算法。
图示为 R1 的 SPF 树。使用此树,SPF 算法的结果可以指出通向每个网络的最短路径。表格中仅显示了 LAN,但 SPF 还可用于确定通向每个 WAN 链路网络的最短路径。在本例中,R1 确定通向每个网络的最短路径如下:
网络 10.5.0.0/16:通过 R2,serial 0/0/0,开销为 22
网络 10.6.0.0/16:通过 R3,serial 0/0/1,开销为 7
网络 10.7.0.0/16:通过 R3,serial 0/0/1,开销为 15
网络 10.8.0.0/16:通过 R3,serial 0/0/1,开销为 17
网络 10.9.0.0/16:通过 R2,serial 0/0/0,开销为 30
网络 10.10.0.0/16:通过 R3,serial 0/0/1,开销为 25
网络 10.11.0.0/16:通过 R3,serial 0/0/1,开销为 27
每台路由器使用来自其它所有路由器的信息独立构建自己的 SPF 树。为确保正确路由,所有路由器上用于创建 SPF 树的链路状态数据库必须相同。在第 11 章 "OSFP" 中,我们将详细讨论这一点。
![](https://images.cnblogs.com/cnblogs_com/jcsu/Network/ccna_exploration_2_50.PNG)
通过 SPF 算法确定最短路径信息后,可将这些路径添加到路由表中。图示为将下列路由添加到 R1 的路由表的过程:
10.5.0.0/16:通过 R2 的 Serial 0/0/0 接口,开销 = 22
10.6.0.0/16:通过 R3 的 Serial 0/0/1 接口,开销 = 7
10.7.0.0/16:通过 R3 的 Serial 0/0/1 接口,开销 = 15
10.8.0.0/16:通过 R3 的 Serial 0/0/1 接口,开销 = 17
10.9.0.0/16:通过 R2 的 Serial 0/0/0 接口,开销 = 30
10.10.0.0/16:通过 R3 的 Serial 0/0/1 接口,开销 = 25
10.11.0.0/16:通过 R3 的 Serial 0/0/1 接口,开销 = 27
路由表还会包括所有直连的网络以及来自其它来源的路由(例如静态路由)。现在即可按照路由表中的这些条目转发数据包了。
与距离矢量路由协议相比,链路状态路由协议有几个优点。
创建拓扑图
链路状态路由协议会创建网络结构的拓扑图(即 SPF 树),而距离矢量路由协议没有此功能。使用距离矢量路由协议的路由器仅有一个网络列表,其中列出了通往各个网络的开销(距离)和下一跳路由器(方向)。因为链路状态路由协议会交换链路状态信息,所以 SPF 算法可以构建网络的 SPF 树。有了 SPF 树,每台路由器使可独立确定通向每个网络的最短路径。
快速收敛
收到一个链路状态数据包 (LSP) 后,链路状态路由协议便立即将该 LSP 从除接收该 LSP 的接口以外的所有接口泛洪出去。使用距离矢量路由协议的路由器需要处理每个路由更新,并且在更新完路由表后才能将更新从路由器接口泛洪出去,即使对触发更新也是如此。因此链路状态路由协议可更快达到收敛状态。不过 EIGRP 是一个明显的例外。
由事件驱动的更新
在初始 LSP 泛洪之后,链路状态路由协议仅在拓扑发生改变时才发出 LSP。该 LSP 仅包含与受影响的链路相关的信息。与某些距离矢量路由协议不同的是,链路状态路由协议不会定期发送更新。
注:OSPF 路由器会 每隔 30 分钟泛洪其自身的链路状态。这称为强制更新,将在后面的章节中讨论。而且,并非所有距离矢量路由协议都定期发送更新。RIP 和 IGRP 会定期发送更新,但 EIGRP 不会。
层次式设计
链路状态路由协议(如 OSPF 和 IS-IS )使用了区域的原理。. 多个区域形成了层次状的网络结构,这有利于路由聚合(总结),还便于将路由问题隔离在一个区域内。多区域 OSPF 和 IS-IS 将在 CCNP 课程中进一步讨论。
二十八、链路状态路由协议的要求
现代链路状态路由协议设计旨在尽量降低对内存、CPU 和带宽的影响。使用并配置多个区域可减小链路状态数据库。划分多个区域还可限制在路由域内泛洪的链路状态信息的数量,并可仅将 LSP 发送给所需的路由器。
例如,当拓扑发生变化时,仅处于受影响区域的那些路由器会收到 LSP 并运行 SPF 算法。这有助于将不稳定的链路隔离在路由域中的特定区域内。如图所示,有三个独立的路由域:区域 1、区域 0 和区域 51。如果区域 51 内的一个网络发生故障,包含此故障链路的相关信息的 LSP 仅会泛洪给该区域内的其它路由器。仅区域 51 内的路由器需要更新其链路状态数据库,重新运行 SPF 算法,创建新的 SPF 树,并更新其路由表。其它区域内的路由器也会获悉此路由器发生了故障,但这是通过一种特殊的链路状态数据包来实现。路由器接收到这种数据包时,无需重新运行 SPF 算法,即可直接更新其路由表。其它区域内的路由器可以直接更新其路由表。
注:多区域 OSPF 和 IS-IS 将在 CCNP 课程中讨论。
二十九、不同链路状态路由协议的比较
如今,用于 IP 路由的链路状态路由协议有两种:
OSPF(开放最短路径优先)
IS-IS(中间系统到中间系统)
OSPF
OSPF 由 IETF(Internet 工程工作小组)的 OSPF 工作组设计,该组织如今仍然存在。OSPF 开发始于 1987 年,如今正在使用的有两个版本:
OSPFv2:用于 IPv4 网络的 OSPF(RFC 1247 和 RFC 2328)
OSPFv3:用于 IPv6 网络的 OSPF (RFC 2740)
OSPF 的大部分工作由 John Moy 完成,大多数有关 OSPF 的 RFC 都是他写的。他的著作OSPF, Anatomy of an Internet Routing Protocol(OSPF,剖析 Internet 路由协议)提供了有关 OSPF 开发的富有趣味的见解。
注:OSPF 将在下一章讨论。多区域 OSPF 和 OSPFv3 将在 CCNP 课程中讨论。
IS-IS
IS-IS 由 ISO(国际标准化组织)设计,在 ISO 10589 中论述。此路由协议的雏形由 DEC (Digital Equipment Corporation) 开发,名为 DECnet Phase V,该 IS-IS 路由协议的首席设计师是 Radia Perlman。
IS-IS 最初是为 OSI 协议簇而非 TCP/IP 协议簇而设计。后来,集成化 IS-IS(即双 IS-IS)添加了对 IP 网络的支持。尽管 IS-IS 路由协议一直主要供 ISP 和电信公司使用,但已有越来越多的公司开始使用 IS-IS。
OSPF 和 IS-IS 既有很多共同点,也有很多不同之处。有很多分别拥护 OSPF 和 IS-IS 的派别,它们从未停止过对双方优缺点的讨论和争辩。这两种路由协议都提供了必要的路由功能。您可在 CCNP 课程中进一步了解 IS-IS 和 OSPF,从而就双方孰优孰劣作出自己的判断。
三十、OSPF数据包类型
在上一章中,我们介绍了链路状态数据包 (LSP)。图示为 OSPF LSP 的五种类型。每种数据包在 OSPF 路由过程中发挥各自的作用:
1. Hello — Hello 数据包用于与其它 OSPF 路由器建立和维持相邻关系。Hello 协议将在下一主题中详细讨论。
2. DBD — DBD(数据库说明) 数据包包含发送方路由器的链路状态数据库的简略列表,接收方路由器使用本数据包与其本地链路状态数据库对比。
3. LSR — 随后,接收方路由器可以通过发送链路状态请求 (LSR) 数据包来请求 DBD 中任何条目的有关详细信息。
4. LSU — 链路状态更新 (LSU) 数据包用于回复 LSR 和通告新信息。LSU 包含七种类型的链路状态通告 (LSA)。LSU 和 LSA 将在下一主题中简略讨论。
5. LSAck - 路由器收到 LSU 后,会发送一个链路状态确认 (LSAck) 数据包来确认接收到了 LSU。