0×1.RIPv2增强特性
RIPv2与RIPv1的相同点:
也用跳数作为度量值,最大值为15;也是距离矢量路由协议;也容易产生路由环路,使用最大跳计数,水平分隔,触发更新,路由中毒和抑制定时器来防止路由环路;也是周期更新,默认每30秒发送一次路由更新;
RIPv2的增强特性:
在路由更新中携带有子网掩码的路由选择信息,因此支持VLSM和CIDR;提供身份验证功能,支持明文和MD5验证;在路由更新信息中包含下一跳路由器的IP地址;使用外部标记;使用组播地址224.0.0.9代替RIPv1的广播更新;可以关闭自动汇总,并支持手动汇总;
0×2.RIPv2基本配置
1
Router(config)#router
rip
2
/使用RIPv2,如果不使用这条命令默认是使用RIPv1/
3
Router(config-router)#
version
2
4
/和RIPv1相同,都是宣告主类网络号/
5
Router(config-router)#
network
主类网络号
a.RIPv2支持VLSM实例
在上一篇关于RIPv1的缺陷中有涉及到下面这张拓扑的配置,现在使用RIPv2去配置,看看结果会有何不同:
R1配置:
01
R1(config)#
int
s 0/0
02
R1(config-if)#
ip
add
192.168.1.65 255.255.255.252
03
R1(config-if)#
no
shut
04
R1(config-if)#
int
lo0
05
R1(config-if)#
ip
add
192.168.1.1 255.255.255.192
06
R1(config-if)#
no
shut
07
R1(config-if)#router
rip
08
R1(config-router)#
version
2
09
R1(config-router)#
net
192.168.1.0
10
R1(config-router)#
end
R2配置:
01
R2(config)#
int
s 0/1
02
R2(config-if)#
ip
add
192.168.1.66 255.255.255.252
03
R2(config-if)#
no
shut
04
R2(config-if)#
int
lo
0
05
R2(config-if)#
ip
add
192.168.1.129 255.255.255.192
06
R2(config-if)#
no
shut
07
R2(config-if)#router
rip
08
R2(config-router)#
ver
2
09
R2(config-router)#
net
192.168.1.0
10
R2(config-router)#
end
在R1上查看路由表并测试连通性:
01
/可以看到R1支持VLSM/
02
R1#
show
ip
route
03
04
192.168.1.0/24 is variably subnetted, 3 subnets, 2 masks
05
C 192.168.1.64/30 is directly connected, Serial0/0
06
C 192.168.1.0/26 is directly connected, Loopback0
07
R 192.168.1.128/26 [120/1] via 192.168.1.66, 00:00:01, Serial0/0
08
09
/*
ping
R2的回环接口,成功*/
10
R1#
ping
192.168.1.129
11
!!!!!
通过Debug调试RIPv2查看输出:
01
R1#debug
ip
rip
02
RIP protocol debugging is on
03
R1#
04
*Mar 1 00:22:31.687: RIP: sending v2 update to 224.0.0.9 via Serial0/0 (192.168.1.65)
05
*Mar 1 00:22:31.687: RIP: build update entries
06
*Mar 1 00:22:31.687: 192.168.1.0/26 via 0.0.0.0, metric 1, tag 0
07
R1#
08
*Mar 1 00:22:52.391: RIP: received v2 update from 192.168.1.66 on Serial0/0
09
*Mar 1 00:22:52.391: 192.168.1.128/26 via 0.0.0.0 in 1 hops
10
R1#u all
11
All possible debugging has been turned off
12
R1#
13
14
/*
15
- 从输出可以看到,发送和接收的版本均为RIPv2(sending v2、received v2)
16
- 发送更新分组使用的是组播地址
"update to 224.0.0.9"
17
- 发送和接收的更新分组中携带了子网掩码长度
"/26"
18
- 发送的更新分组中使用了路由标记
"tag 0"
19
*/
b.RIPv2支持CIDR实例
如下图所示,假设R2上面有多个192.168.*.0/24网络,可以在RIPv2中以CIDR的方式把路由宣告出去;
R1配置:
1
R1(config)#
int
s 0/0
2
R1(config-if)#
ip
add
12.1.1.1 255.255.255.0
3
R1(config-if)#
no
shut
4
R1(config-if)#router
rip
5
R1(config-router)#
ver
2
6
R1(config-router)#
net
12.0.0.0
7
R1(config-router)#
end
R2配置:
01
/R2上配置了4个回环接口/
02
R2(config)#
int
s 0/1
03
R2(config-if)#
ip
add
12.1.1.2 255.255.255.0
04
R2(config-if)#
no
shut
05
R2(config-if)#
int
lo
0
06
R2(config-if)#
ip
add
192.168.1.1 255.255.255.0
07
R2(config-if)#
no
shut
08
R2(config-if)#
int
lo
1
09
R2(config-if)#
ip
add
192.168.2.1 255.255.255.0
10
R2(config-if)#
no
shut
11
R2(config-if)#
int
lo
2
12
R2(config-if)#
ip
add
192.168.3.1 255.255.255.0
13
R2(config-if)#
no
shut
14
R2(config-if)#
int
lo
3
15
R2(config-if)#
ip
add
192.168.4.1 255.255.255.0
16
R2(config-if)#
no
shut
17
R2(config-if)#
exit
18
/生成一条静态路由192.168.0.0/16/
19
R2(config)#
ip
route
192.168.0.0 255.255.0.0 null 0
20
R2(config)#router
rip
21
R2(config-router)#
ver
2
22
R2(config-router)#
net
12.0.0.0
23
/将静态路由重发布出去/
24
R2(config-router)#
redistribute
static
25
R2(config)#
end
这个时候在R1上查看路由表,就能看到R2重发布过来的超网路由:
1
/如果使用的是RIPv1,就不会看到192.168.0.0/16这条超网信息,因为RIPv2不支持CIDR/
2
R1#
show
ip
route
3
4
12.0.0.0/24 is subnetted, 1 subnets
5
C 12.1.1.0 is directly connected, Serial0/0
6
R 192.168.0.0/16 [120/1] via 12.1.1.2, 00:00:14, Serial0/0
c.RIPv2手工汇总实例
RIPv1和RIPv2都会在主类网络的边界汇总,区别在于RIPv2的自动汇总可以关闭,并支持手工汇总。
利用RIPv2完成下面配置,在关闭自动汇总前和RIPv1路由表结果一样,关闭自动汇总后RIPv2就能很好的支持不连续的子网了:
R1配置:
01
R1(config)#
int
s 0/0
02
R1(config-if)#
ip
add
12.1.1.1 255.255.255.0
03
R1(config-if)#
no
shut
04
R1(config-if)#
int
lo
0
05
R1(config-if)#
ip
add
192.168.1.1 255.255.255.128
06
R1(config-if)#
no
shut
07
R1(config-if)#router
rip
08
R1(config-router)#
ver
2 /使用RIPv2/
09
R1(config-router)#
no
auto-summary
/关闭自动汇总/
10
R1(config-router)#
net
192.168.1.0
11
R1(config-router)#
net
12.0.0.0
12
R1(config-router)#
end
R2配置:
01
R2(config)#
int
s 0/1
02
R2(config-if)#
ip
add
12.1.1.2 255.255.255.0
03
R2(config-if)#
no
shut
04
R2(config-if)#
int
s 0/0
05
R2(config-if)#
ip
add
23.1.1.2 255.255.255.0
06
R2(config-if)#
no
shut
07
R2(config-if)#router
rip
08
R2(config-router)#
ver
2
09
R2(config-router)#
no
auto-summary
10
R2(config-router)#
net
12.0.0.0
11
R2(config-router)#
net
23.0.0.0
12
R2(config-router)#
end
R3配置:
01
R3(config)#
int
s 0/1
02
R3(config-if)#
ip
add
23.1.1.3 255.255.255.0
03
R3(config-if)#
no
shut
04
R3(config-if)#
int
lo
0
05
R3(config-if)#
ip
add
192.168.1.129 255.255.255.128
06
R3(config-if)#
no
shut
07
R3(config-if)#router
rip
08
R3(config-router)#
ver
2
09
R3(config-router)#
no
auto
10
R3(config-router)#
net
23.0.0.0
11
R3(config-router)#
net
192.168.1.0
12
R3(config-router)#
end
配置完成后在R1/R2/R3上分别查看路由表:
01
R1#
show
ip
route
02
03
23.0.0.0/24 is subnetted, 1 subnets
04
R 23.1.1.0 [120/1] via 12.1.1.2, 00:00:11, Serial0/0
05
12.0.0.0/24 is subnetted, 1 subnets
06
C 12.1.1.0 is directly connected, Serial0/0
07
192.168.1.0/25 is subnetted, 2 subnets
08
C 192.168.1.0 is directly connected, Loopback0
09
R 192.168.1.128 [120/2] via 12.1.1.2, 00:00:11, Serial0/0
10
11
R2#
show
ip
route
12
13
23.0.0.0/24 is subnetted, 1 subnets
14
C 23.1.1.0 is directly connected, Serial0/0
15
12.0.0.0/24 is subnetted, 1 subnets
16
C 12.1.1.0 is directly connected, Serial0/1
17
192.168.1.0/25 is subnetted, 2 subnets
18
R 192.168.1.0 [120/1] via 12.1.1.1, 00:00:15, Serial0/1
19
R 192.168.1.128 [120/1] via 23.1.1.3, 00:00:10, Serial0/0
20
21
R3#
show
ip
route
22
23
23.0.0.0/24 is subnetted, 1 subnets
24
C 23.1.1.0 is directly connected, Serial0/1
25
12.0.0.0/24 is subnetted, 1 subnets
26
R 12.1.1.0 [120/1] via 23.1.1.2, 00:00:26, Serial0/1
27
192.168.1.0/25 is subnetted, 2 subnets
28
R 192.168.1.0 [120/2] via 23.1.1.2, 00:00:26, Serial0/1
29
C 192.168.1.128 is directly connected, Loopback0
从三个路由的路由表输出,进一步证实了RIPv2关闭总汇后能够支持不连续的子网。但同时也带来一个问题,路由表变大了,如果R1上面有多个接口属于不同子网,那么R1将向其他路由通告这些接口所处的子网,下面这个实例将演示如何进行手动汇总来减小路由表的大小,拓扑如下图所示:
首先不使用手动汇总,配置各路由:
R1配置:
01
R1(config)#
int
s 0/0
02
R1(config-if)#
ip
add
12.1.1.1 255.255.255.0
03
R1(config-if)#
no
shut
04
R1(config-if)#
int
lo0
05
R1(config-if)#
ip
add
192.168.1.1 255.255.255.240
06
R1(config-if)#
no
shut
07
R1(config-if)#
int
lo1
08
R1(config-if)#
ip
add
192.168.1.17 255.255.255.240
09
R1(config-if)#
no
shut
10
R1(config-if)#
int
lo
2
11
R1(config-if)#
ip
add
192.168.1.33 255.255.255.240
12
R1(config-if)#
no
shut
13
R1(config-if)#
int
lo
3
14
R1(config-if)#
ip
add
192.168.1.49 255.255.255.240
15
R1(config-if)#
no
shut
16
R1(config-if)#router
rip
17
R1(config-router)#
no
auto
18
R1(config-router)#
ver
2
19
R1(config-router)#
net
12.0.0.0
20
R1(config-router)#
net
192.168.1.0
21
R1(config-router)#
end
R2配置:
01
R2(config)#
int
s 0/1
02
R2(config-if)#
ip
add
12.1.1.2 255.255.255.0
03
R2(config-if)#
no
shut
04
R2(config-if)#
int
s 0/0
05
R2(config-if)#
ip
add
23.1.1.2 255.255.255.0
06
R2(config-if)#
no
shut
07
R2(config-if)#router
rip
08
R2(config-router)#
ver
2
09
R2(config-router)#
no
auto
10
R2(config-router)#
net
12.0.0.0
11
R2(config-router)#
net
23.0.0.0
12
R2(config-router)#
end
R3配置:
01
R3(config)#
int
s 0/1
02
R3(config-if)#
ip
add
23.1.1.3 255.255.255.0
03
R3(config-if)#
no
shut
04
R3(config-if)#
int
lo
0
05
R3(config-if)#
ip
add
192.168.1.129 255.255.255.128
06
R3(config-if)#
no
shut
07
R3(config-if)#router
rip
08
R3(config-router)#
ver
2
09
R3(config-router)#
no
auto
10
R3(config-router)#
net
192.168.1.0
11
R3(config-router)#
net
23.0.0.0
12
R3(config-router)#
end
配置完成后,查看一下R3的路由表:
01
R3#
show
ip
route
02
03
23.0.0.0/24 is subnetted, 1 subnets
04
C 23.1.1.0 is directly connected, Serial0/1
05
12.0.0.0/24 is subnetted, 1 subnets
06
R 12.1.1.0 [120/1] via 23.1.1.2, 00:00:24, Serial0/1
07
192.168.1.0/24 is variably subnetted, 5 subnets, 2 masks
08
R 192.168.1.32/28 [120/2] via 23.1.1.2, 00:00:24, Serial0/1
09
R 192.168.1.48/28 [120/2] via 23.1.1.2, 00:00:24, Serial0/1
10
R 192.168.1.0/28 [120/2] via 23.1.1.2, 00:00:24, Serial0/1
11
R 192.168.1.16/28 [120/2] via 23.1.1.2, 00:00:26, Serial0/1
12
C 192.168.1.128/25 is directly connected, Loopback0
13
/R3上学到了R1上的4条路由/
下面在R1的s0/0接口上使用手动汇总:
注意!汇总是在路由的外出接口上面做的,如果有多条外出接口,就要在每个接口上执行手动汇总。
01
/在R1 s0/0接口上配置汇总/
02
R1(config)#
int
s 0/0
03
R1(config-if)#
ip
summary-address
rip
192.168.1.0 255.255.255.192
04
05
/等待R3收敛后(差不多要3~4分钟左右),查看R3的路由表,就只能看到R1汇总后的一条路由条目了/
06
R3#
show
ip
route
07
08
23.0.0.0/24 is subnetted, 1 subnets
09
C 23.1.1.0 is directly connected, Serial0/1
10
12.0.0.0/24 is subnetted, 1 subnets
11
R 12.1.1.0 [120/1] via 23.1.1.2, 00:00:15, Serial0/1
12
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
13
R 192.168.1.0/26 [120/2] via 23.1.1.2, 00:00:15, Serial0/1
14
C 192.168.1.128/25 is directly connected, Loopback0
d.路由翻动
当路由的接口在"UP"和"DOWN"之间快速变换时,就会产生路由翻动,而路由汇总除了可以减小路由表大小,还能有效的将上游路由从路由翻动问题中隔离出来;比如在上面这个实例中,没使用手动汇总前,不停的开启关闭R1上的loopback 0就会造成R2和R3不停的接收新的路由更新,它们的处理器将不停的工作,影响网络性能;当使用汇总后,虽然R1的直连路由不停的发生变化,但是汇总路由没有发生任何变化,所以R2和R3也不会时不时的收到lo0的网络不可达或可达的更新了。
0×3.RIPv2高级配置
a.RIPv2路由验证
使用下面这个拓扑来完成RIPv2路由验证实验:
R1配置:
01
R2(config)#
int
lo
0
02
R2(config-if)#
ip
add
192.168.1.1 255.255.255.0
03
R2(config-if)#
no
shut
04
R2(config-if)#
int
s 0/0
05
R2(config-if)#
ip
add
12.1.1.1 255.255.255.0
06
R2(config-if)#
no
shut
07
R2(config-if)#router
rip
08
R2(config-router)#
net
12.0.0.0
09
R2(config-router)#
net
192.168.1.0
10
R2(config-router)#
version
2
11
R2(config-router)#
exit
12
R2(config)#
key
chain
test1 /创建密钥链test1/
13
R2(config-keychain)#
key
1 /配置密钥链中的
key
1/
14
R2(config-keychain-
key
)#
key-string
ccna1 /配置密码串/
15
R2(config-keychain-
key
)#
end
16
R2#
conf
t
17
R2(config)#
int
s 0/0 /在与R2相连的串口中配置使用密钥链test1进行验证/
18
R2(config-if)#
ip
rip
authentication
key-chain
test1
19
R2(config-if)#
ip
rip
authentication
mode
md5 /使用MD5验证/
20
R2(config-if)#
end
21
22
/*
23
- 验证模式分为两种,一种是text明文验证,一种是md5验证,本实验使用了md5验证
24
- 另外,两端使用的密钥链中的密码串必须相同,并且验证模式也要相同,才能验证成功。
25
*/
R2配置:
01
R2(config)#
int
s 0/1
02
R2(config-if)#
ip
add
12.1.1.2 255.255.255.0
03
R2(config-if)#
no
shut
04
R2(config-if)#
int
lo
0
05
R2(config-if)#
ip
add
192.168.2.1 255.255.255.0
06
R2(config-if)#
no
shut
07
R2(config-if)#router
rip
08
R2(config-router)#
version
2
09
R2(config-router)#
net
12.0.0.0
10
R2(config-router)#
net
192.168.2.0
11
R2(config-router)#
exit
12
/暂时不执行下面的配置,大家可以查看下此时R1和R2是否可以通过RIP学习到对方路由/
13
R2(config)#
key
chain
test2 /test2是密钥名,只起到标识作用/
14
R2(config-keychain)#
key
1
15
R2(config-keychain-
key
)#
key-string
ccna1 /密钥字符串
"ccna1"
必须和R1相同/
16
R2(config-keychain-
key
)#
end
17
R2#
conf
t
18
R2(config)#
int
s 0/1
19
R2(config-if)#
ip
rip
authentication
key-chain
test2
20
R2(config-if)#
ip
rip
authentication
mode
md5 /验证模式也必须相同/
21
R2(config-if)#
end
可以将R2的密钥字符串配置成和R1不同的字符,或者将R2改成text明文验证,然后开启"debug ip rip"查看输出,将会看(invalid authentication)验证失败的消息。
b.IPv1和RIPv2的共存
利用上面的RIPv2路由验证实验的拓扑图来完成下面的RIPv1和RIPv2共存的实验,实验之前先将这两台路由器重新关闭再启动,清空它们的配置:
R1配置:
01
R1(config)#
int
s 0/0
02
R1(config-if)#
ip
add
12.1.1.1 255.255.255.0
03
R1(config-if)#
no
shut
04
R1(config-if)#
int
lo0
05
R1(config-if)#
ip
add
192.168.1.1 255.255.255.0
06
R1(config-if)#
no
shut
07
R1(config-if)#router
rip
/并没有启动RIPv2,默认使用RIPv1/
08
R1(config-router)#
net
12.0.0.0
09
R1(config-router)#
net
192.168.1.0
10
R1(config-router)#
end
R2配置:
01
R2(config)#
int
s 0/1
02
R2(config-if)#
ip
add
12.1.1.2 255.255.255.0
03
R2(config-if)#
no
shut
04
R2(config-if)#
int
lo0
05
R2(config-if)#
ip
add
192.168.2.1 255.255.255.0
06
R2(config-if)#
no
shut
07
R2(config-if)#router
rip
08
R2(config-router)#
version
2 /开启了RIPv2/
09
R2(config-router)#
net
12.0.0.0
10
R2(config-router)#
net
192.168.2.0
11
R2(config-router)#
end
分别查看R1、R2的路由表:
01
/发现R1上面能学习到R2上面的回环接口/
02
R1#
show
ip
route
03
04
12.0.0.0/24 is subnetted, 1 subnets
05
C 12.1.1.0 is directly connected, Serial0/0
06
C 192.168.1.0/24 is directly connected, Loopback0
07
R 192.168.2.0/24 [120/1] via 12.1.1.2, 00:00:20, Serial0/0
08
09
/R2上面什么都学不到,这是为什么呢?/
10
R2#
show
ip
route
11
12
12.0.0.0/24 is subnetted, 1 subnets
13
C 12.1.1.0 is directly connected, Serial0/1
14
C 192.168.2.0/24 is directly connected, Loopback0
为什么R2学不到任何R1的路由信息?分别查看R1和R2的协议情况:
01
/*
02
- 可以看到R1
"send version 1, receive any version"
03
- 也就是说,R1发送版本1的更新,接收任何版本(V1,V2)的更新,
04
- R1配置的是RIPv1,而R2配置的是RIPv2,当R2发送过来v2版本的更新时,
05
- R1照样接收它,这就是R1为什么能学到R2的回环接口的原因。
06
*/
07
R1#
show
ip
protocols
08
Default
version
control: send
version
1, receive any
version
09
Interface Send Recv Triggered RIP Key-
chain
10
Serial0/0 1 1 2
11
Loopback0 1 1 2
12
13
/*
14
- 而R2上面的RIPv2协议默认只能
"send version 2, receive version 2"
15
- 也就是发送版本2和接收版本2,R1发过来的版本1的更新直接被忽略了。
16
*/
17
R2#
show
ip
protocols
18
19
Default
version
control: send
version
2, receive
version
2
20
Interface Send Recv Triggered RIP Key-
chain
21
Serial0/1 2 2
22
Loopback0 2 2
如果一端配置的是RIPv1,另一端配置的是RIPv2,可以通过下面的方法让它们通信;
在R1上的每个外出接口(如果有多个)上配置发送版本1和版本2的更新,或者在R2的外出接口上配置接收版本1和版本2的更新;
1
/在运行RIPv1的一端,让它同时发送版本1和版本2的更新/
2
R1(config)#
int
s 0/0
3
R1(config-if)#
ip
rip
send
version
1 2
4
5
/或者在运行RIPv2的一端,让它同时接收版本1和版本2的更新/
6
R2(config)#
int
s 0/1
7
R2(config-if)#
ip
rip
receive
version
1 2
这样,两端就都能学到对方的路由条目了。