摘要:《非常网管——网络基础》通过大量来自第一现场的案例,读者能够系统掌握计算机网络的基础知识和技术,并能对相关网络设备,从其工作原理到设备选型再到应用有一个全面的认识。本文介绍了动态路由、静态路由和默认路由协议及配置。标签:网管网络基础路由器
13.10 动态路由、静态路由和默认路由协议及配置
按照路由的学习方式,路由协议可以分为静态路由(Static Routing)和动态路由(Dynamic Routing),其相应的路由表称为静态路由表和动态路由表。
13.10.1 动态路由协议
动态路由协议随网络拓扑的变化而动态的修改它的路由表。通过动态路由协议的相应修改,路由器可以保持路由信息的一致性,因此动态路由能够实时地适应网络结构的变化。如果路由更新信息表明网络拓扑发生了变化,路由协议就会重新计算路由,并发出新的路由更新信息,这些信息通过网络,引起其他路由器重新计算路由,并且更新各自的路由表以动态地反映网络拓扑的变化。以上这个过程称为路由协议的汇聚(Convergence),如图13-3所示。

图13-3 动态路由

动态路由适用于网络规模较大、网络拓扑复杂的网络。当然,各种动态路由协议会不同程度地占用网络带宽和CPU资源,如RIP、IGRP、OSPF、EIGRP、IS-IS都是常见的动态路由协议。
13.10.2 静态路由
静态路由是网络管理员根据网络的情况手动在路由器上设定的路由,它不会随着网络拓扑的变化而动态地修改,静态路由一经设定就存在于路由表中。在网络结构发生变化后,网络管理员必须手工地修改路由表。
由于静态路由不能对网络的改变做出反映,因此两个运行静态路由的路由器之间是无需进行路由信息交换的,这样就可以节省网络的带宽、提高路由器CPU和内存的利用率。静态路由一般用于网络规模不大、拓扑结构固定的网络中(尤其是广域网接入链路)。
静态路由的优点是简单、高效、可靠,但是它的网络扩展性较差,配置烦琐,如果要在网络上增加一个新网络域网段,管理者必须在所有路由器上增加相应的路由,这里因为静态度路由不能随网络拓扑的变化而自动发生变化,因此也就限制了静态路由的使用范围。
静态路由和动态路由有各自的特点和适用范围,因此静态路由通常作为动态路由的补充在大规模的复杂网络中使用。由于静态路由的可管理距离最低,因此当一个数据包在路由器中进行寻径时,路由器首先查找静态路由,如果查到则根据相应的静态路由转发数据,否则再查找动态路由。
13.10.3 静态路由的配置
通过配置静态路由,用户可以人为地指定对某一网络访问时所要经过的路径,在网络结构比较简单且到达某一网络所经过的路径惟一的情况下,建议采用静态路由。静态路由的命令格式如下:

ip route network [mask] {address | interface} [distance] [tag tag][permanent]

静态路由中各参数的解释如表13-4所示。
表13-4 对静态路由中相关参数的解释

network
所要到达的目标网络
mask
目标网络子网掩码
address
下一个跳的IP地址,即相邻路由器的端口IP地址
interface
本地网络接口,通过这个接口可到达目的网络
distance
管理距离(可选),默认为1
tag tag
tag值(可选),在策略路由中,作为路由标记
permanent
指定此路由条目在路由表中永远存在

下面以如图13-4所示的网络为例,介绍静态路由的配置方法。

图13-4 静态路由

我们在路由器A上设置访问172.16.1.0网络的下一跳地址为172.16.2.1,即当路由器A收到发往172.16.1.0网路的数据包时,就将数据包发送给172.16.2.1(路由器B)。
路由器A的主要配置如例13-44所示(//后面的文字为说明性文字)。
例13-44 路由器A上静态路由的配置:

RouterA(config)#interface Serial0
RouterA(config-if)#ip address 172.16.2.2 255.255.255.0
//配置路由器接口的IP地址
RouterA(config-if)#exit
RouterA(config)#ip route 172.16.1.0 255.255.255.0 172.16.2.1
//配置静态路由

其中ip route 172.16.1.0 255.255.255.0 172.16.2.1命令行是配置路由器A的静态路由,其中:
·ip route表示静态路由配置命令;
·172.16.1.0 255.255.255.0为目标网络的子网IP及对应的子网掩码;
·172.16.2.1为下一跳路由器的IP地址,即与路由器A直接相连的路由器B的接口地址。
配置完静态路由以后,可以通过show ip route 命令来查看路由器A的路由表,如例13-45所示。
例13-45 利用show ip route命令查看路由器的路由表信息:

routerA#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default
U - per-user static route, o - ODR
T - traffic engineered routeGateway of last resort is not set172.16.0.0/24 is subnetted, 2 subnets
S 172.16.1.0 [1/0] via 172.16.2.1
C 172.16.2.0 is directly connected, Serial0
10.0.0.0/24 is subnetted, 1 subnets

在以上输出信息中,可以看到路由器A的路由表,其中:
·阴影部分的“S”代表这个路由条目是通过静态路由学习到的;
·172.16.1.0 代表是目标网络;
·[1/0] 代表是可管理距离是1、度量值是0;
·via 172.16.2.1代表到达目标网络的下一条地址为172.16.2.1(路由器B)。
在定义静态路由时,也可以在命令中将下一跳定义为本路由器上的出口,而不是下一跳路由器的地址,例如,可以将上例中的下一跳地址172.16.2.1替换成路由器A上的Serial0(即图13-4中的S0)。相关的配置和验证分别如例13-46和例13-47所示。
例13-46 在路由器A上通过接口配置静态路由:

RouterA(config)#interface Serial0
RouterA(config-if)#ip address 172.16.2.2 255.255.255.0
RouterA(config)# ip route 172.16.1.0 255.255.255.0 serial0

例13-47 利用show ip route命令查看路由器A的路由表:

routerA#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B – BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E – EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default
U - per-user static route, o – ODR
T - traffic engineered route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 2 subnets
S 172.16.1.0 is directly connected, Serial0
C 172.16.2.0 is directly connected, Serial0
10.0.0.0/24 is subnetted, 1 subnets

可以看到例13-47的show ip route输出和例13-45的输出有些差别,在例13-47的输出中没有显示静态路由条目的可管理距离和度量值,也无下一条地址,它只显示了到目标网络是经过Serial0可到达。这种情况下静态路由的可管理距离是0。
虽然这两种定义静态路由的方法最终产生的效果是一样的,但是在有些情况下,只能使用定义出口方式,例如,将企业边缘路由器连接到Internet时,不知道下一跳路由器的IP地址,只知道与之相连的接口类型。
为了效验路由配置的正确性,可以使用Ping命令进行检测,如例13-48所示。
例13-48 利用ping命令检测网络的连通性:

routerA#ping 172.16.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds:
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms

注意
静态路由不像动态路由协议那样可以由路由器相互学习,它是手动输入,并且是单向性的。这里的单项性是指要在链路的两端分别定义静态路由,在这个例子中,除了要为路由器A定义到网络172.16.1.0的路由外,还要为路由器B手动添加一条到10.0.0.0网络的静态路由。
在路由器B上配置指向路由器A的一条静态路由,如例13-49所示。
例13-49 在路由器B上配置一条指向路由器A的静态路由:

RouterB(config)# ip route 10.0.0.0 255.0.0.0 172.16.2.2

13.10.4 默认路由及其配置
默认路由实际上就是静态路由的一个“变种”,它的命令格式和静态路由相似。为路由器配置默认路由后,当路由器在路由表里没有找到去往特定目标网络的路由条目时,它自动将该目标网络的所有数据发送到默认路由指定的下一跳路由器。默认路由的命令格式为:

ip route 0.0.0.0 0.0.0.0 {address | interface} [distance] [tag tag][permanent]

表13-5是对默认路由命令中相关参数的介绍。
表13-5 默认路由命令中相关参数介绍

参数
解释
所要到达的目的网络,前面的0.0.0.0代表所有的网络,后面的0.0.0.0代表相应的子网掩码
address
下一个跳的IP地址,即相邻路由器的端口IP地址
interface
本地网络接口,通过这个接口可到达目的网络
distance
管理距离(可选),默认为0
tag tag
tag值(可选),在策略路由中,作为路由标记
permanent
此路由在路由表中永久存在

如图13-5所示的是一个使用默认路由的网络,路由器B的相关配置如例13-50所示。

图13-5 默认路由

例13-50 对图12-25中路由器B默认路由的配置:

RouterB(config)#int serial0
RouterB(config-if)#ip address 192.168.1.2 255.255.255.0
RouterB(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1

配置完毕后,可以使用show ip rout查看路由器B的路由表,如例13-51所示。
例13-51 利用show ip route命令查看路由器B的路由表信息:

routerB#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default
U - per-user static route, o - ODR
T - traffic engineered route
Gateway of last resort is 0.0.0.0 to network 0.0.0.0
10.0.0.0/24 is subnetted, 1 subnets
C 10.1.1.0 is directly connected, Loopback0
C 192.168.1.0/24 is directly connected, Serial0
S* 0.0.0.0/0 is directly connected, Serial0

从例13-51的输出结果中可以看到:默认路由的标识为S*,其中*表示默认,S表示静态路由,S*表示静态默认路由。
这条命令规定了当路由器B在路由表中找不到目标网络的路由条目时,就把数据包发送到下一跳地址192.168.1.1。默认路由的应用非常简单,它的优点也是简单、高效、可靠。
默认路由也可以将下一跳指定为出去的接口,例13-52是它的另一种配置。
例13-52 在路由器B上通过接口配置静态路由:

RouterB(config)#ip route 0.0.0.0 0.0.0.0 serial 0