路由器在诸多路由协议、手工配置和路由策略下,是如何选择最佳路由的?理解这个问题,对于掌握路由器的工做原理大有裨益。
路由选择牵涉到三个方面:
一、
各类路由协议的处理,包括
rip
,
igrp
eigrp
,
ospf
,
is-is
,
bgp
等,每一个协议都经过
IP
数据包在路由器间传递网络的路由信息,为路由表的创建提供信息。
二、
路由表,它从路由协议那里接受信息,
并为转发数据包提供所须要的信息。
三、
转发过程,它从路由表那里请求所须要
信息,为正确转发数据包作出决策。
下面从几个方面对此进行讨论。
创建路由表
每一个路由协议处理路由更新时,选择到目的地址的最佳路由,并试图安装到路由表中。若是只有多个动态路由协议运行,存在争先安装路由的问题。必须有机制来管理路由的安装。该机制就是根据各个路由协议的优先级来决定安装过程。每一个路由协议都有缺省的管理距离值,值愈小其优先级愈高。各路由协议的缺省管理距离值如:
假设路由器运行
EIGRP
、
OSPF
、
RIP
、
IGRP
四种路由协议,它们都获得了到网络
192.168.24.0/24
的路由,但只有
EIGRP
(
internal
)可将其路由安装到路由表中,由于其管理距离值最小,优先权最高。
备份路由
其余协议对于未安装的协议怎么处理?
EIGRP
安装的路由失败了怎么办?对此有两种解决方法,一是每一个路由协议周期性地尝试安装它们的路由到路由表中,若是
EIGRP
安装的路由失效了,
IGRP
会将它的相应路由安装到路由表中。另外一个办法是将未安装的路由挂靠在路由表中,若是先前安装的路由失效了,将挂靠的路由正式安装到路由表中。
对于没有自身路由信息表的路由协议,好比
IGRP
,将采起第一种方法,每次收到路由更新都尝试安装到路由表中。
对于
EIGRP
、
IS-IS
、
OSPF
、
BGP
、
RIP
这样的有自身路由信息表的路由协议,将采起第二种办法,安装失败的路由将登记在路由表中,当原路由条目失效时,将通知作登记的路由协议的处理进程来安装它们的路由,若是有多个进程来安装,管理距离小的协议优先。
调整管理距离值
改变路由协议的缺省距离值是比较慎重的动做,有可能致使路由循环或其余奇怪的问题,必须很是当心!其命令为
distance
后跟具体的值。也能够只改变从某一协议分布进来的路由的管理距离值。在静态路由的最后也能够跟上一个值,改变原来的缺省值
1
。
前缀长度
不一样前缀长度的路由将视为不一样的路由,将同时安装到路由表中,好比三个路由协议分别获得如下路由:
l
EIGRP (internal): 192.168.32.0/26
l
RIP: 192.168.32.0/24
l
OSPF: 192.168.32.0/19
三个路由的前缀长度(子网掩码)不一样,因此获得不一样目的网络的路由,同时安装到路由表中。
转发决策
先看一下路由器刚才安装的三个路由条目:
router#show ip route
....
D 192.168.32.0/26 [90/25789217] vi
a 10.1.1
.1
R 192.168.32.0/24 [120/4] vi
a 10.1.1
.2
O 192.168.32.0/19 [110/229840] vi
a 10.1.1
.3
若是目的地址为
192.168.32.1
,将选择哪条路由呢?这依赖于所匹配的前缀长度,最长匹配的前缀长度优先。匹配是用路由条目中的掩码与目的地址相与后再与网络地址比较,相赞成味着匹配。该地址与这三条路由都匹配,但第一条匹配的路由前缀(
26
)最长,因此该包将被转发到
10.1.1
.1
。
若是目的地址为
192.168.32.100
,它与第一条路由不匹配,与第2、第三条路由匹配,因此将被转发到
10.1.1
.2
。
具体的路由查找速度依赖于路由表的结构与硬件速度,如采用二叉树结构的路由表,那么
32
位的
IP
地址最多查找
32
次就能够决定是否找到适应的路由条目。
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] vi
a 10.1.1
.1
S*
0.0.0
.0/0 [1/0] vi
a 10.1.1
.3
假设
ip classless
命令没有配置,那么:
l
到
172.30.32.1
的包被转发到
10.1.1
.1
,由于
该路由是最长匹配。
l
到
172.30.33.1
的包被转发到
10.1.1
.2
,由于
该路由是最长匹配。
l
到
192.30.32.1
的包被转发到
10.1.1
.3
,由于
无对应的网络路由,用缺省路由转发。
l
到
172.30.100.1
的包没法转发,被丢弃。为什
么不用缺省路由?由于该目的地址的主网络部分在路由表中已知,并有子网路由,故路由器查找对应的子网路由,结果没有匹配的路由,最终丢弃该包。若是用
IP classless
命令进行了配置,那么最终将应用缺省路由将数据包转发到
10.1.1
.3
。
总结
数据包的转发决定依赖于三部分的进程:路由协议、路由表、实际的转发交换,这三者的关系图示以下:
选择路由时采起最长匹配的原则,而路由协议安装路由的优先级取决于管理距离值。