1 为什么需要路由协议
- 我们之前的静态路由和ip地址的配置都能够修改路由表,看似可以在任何复杂的网络里只要通过静态路由配置,肯定能够使得全网互联,但是仅仅凭借静态路由的配置工作量极大,而且容易出错,因此需要使路由器能够自己通过路由协议动态地获得某个路由条目。
- 路由协议减轻了路由配置的麻烦和工作量。
- 路由条目的来源
(1)直连接口所在的网段。
(2)静态路由手动配置获得的。
(3)动态路由协议自动获得的。 - 路由协议有以下特点
(1)都有自己特殊的数据层。
(2)通过广播或者组播的方式发送数据包。
2 RIP协议简介
- RIP特点
(1)适用于小型网络,最大跳数15跳(16跳视为不可达)
(2)RIP是基于UDP的,使用源端口和目的端口号520
(3)在CISCO IOS平台上的管理距离为120
(4)RIP协议有3个版本,ripv1,ripv2,ripng(用在ipv6里)
(5)通过广播(v1)或者组播(v2)的方式发送,所有的路由器接收到rip路由更新数据包都可以打开读取rip信息。
- 工作过程,路由表交换
(1)初始状态
在各个路由器上启动rip协议
R1(config)#router rip
R1(config-router)#network 192.168.12.1
R1(config-router)#network 192.168.1.1
R2(config)#router rip
R2(config-router)#network 192.168.12.2
R2(config-router)#network 192.168.23.3
R2(config)#router rip
R2(config-router)#network 192.168.12.2
R2(config-router)#network 192.168.23.3
(2)第一次交换
(3)经过一些交换以后,收敛(交换)完成
3.基础命令
(1)进入rip协议
R1(config)#router rip
(2)协议下宣告网段(V1下会自动汇总,V2可以关闭自动汇总并且手动指定子网掩码).作用是从这个接口可以发出rip更新数据包,并且把这个网段添加到rip更新数据包里。
R1(config-router)#network 192.168.1.1
(3)查看rip数据库,和路由表里没有多大区别。
R1#show ip rip database
3 RIPv1与v2的区别
在协议下通过命令切换到v2
R1(config-router)#version 2
ripv1与ripv2数据包比较发现
- v1使用广播更新,v2使用组播更新。组播地址224.0.0.6.
- 查看数据包里的网段信息。正常情况下应该network本路由器上的ip地址。如果ip地址不是本路由器的,network之后也不会再数据包里出现。
在R1上添加环回接口 1.1.1.1 并且进入rip
R1(config)#int lo0
R1(config-if)#ip add 1.1.1.1 255.255.255.0
R1(config-if)#router rip
R1(config-router)#network 1.1.1.1
(1)默认情况下,v1和v2里的宣告都是主类方式的宣告,意思就是不管宣告的是网段还是ip地址,最后在数据包里出现都是A,B,C类地址所在的网段。
(2)v2可以携带子网掩码,可以关闭自动汇总,命令是
R1(config-router)#no auto-summary
这样可以在宣告网段时可以根据路由表中ip地址所在的网段方式进行划分。
- v1数据包里没有下一跳信息,他只知道出接口,会产生不必要的arp解析,导致arp表条目被撑爆。v2里有下一跳信息,他知道下一跳的ip地址。这个类似于静态路由的两种配置方式的比较。
4 RIP的汇总
- 关闭了路由自动汇总之后,会在数据包和接收的路由器的路由表里显示每个条目的详细信息,并且宣告这些ip地址。根据本机路由表的路由条目会在发送的rip更新数据包里会显示详细的条目。
R1(config-router)#int lo1
R1(config-if)#ip add 172.168.1.1 255.255.255.0
R1(config-if)#int lo2
R1(config-if)#ip add 172.168.2.1 255.255.255.0
R1(config-if)#int lo3
R1(config-if)#ip add 172.168.2.1 255.255.255.0
2. 手动对路由进行汇总,在接口进行汇总。影响数据包里的内容。R2上的条目也变得精简了。
R1(config)#int e0/0
R1(config-if)#ip summary-address rip 172.168.0.0 255.255.252.0
3.下放默认路由
R1(config)#router rip
R1(config-router)#default-information originate
5 RIP的口令验证
- (1)在接口上设置,要求从这个接口发出的rip更新数据包都要加上口令,接受的接口也必须有口令,并且对了,对方才能正确解析数据包信息。从这个接口获得的rip更新数据包必须也有对应的口令,才能正确解析数据包。
(2)简单来说,相连的接口必须要有同样的口令或者不用口令,才能互相使用rip更新数据,否则收到了数据包也没有用。
(3)只有ripv2可以使用口令验证。因此要使用口令验证就必须是ripv2。否则会出现一些奇怪的问题,不能相互学习。 - 创建验证 钥匙链。一个验证可以有多个密码,必须把每个密码都对上,才算验证成功。好像一串钥匙一样,必须这个验证的每个key都相同才算验证成功。
在R1上创建一个如下的口令。
key chain mykeys
key 1
key-string cisco
key 2
key-string huawei
- 在rip里使用明文口令。从这个接口发出的rip更新数据包都是明文的。有点low,密码被抓个包就被抓出来了,在R2上配置相同的口令就可以互相发送路由更新包。
R1(config)#int e0/0
R1(config-if)#ip rip authentication mode text
R1(config-if)#ip rip authentication key-chain mykeys
3. 在rip里使用密文口令,使用密文口令两边都要使用密文的。
R1(config-if)#ip rip authentication mode md5
R1(config-if)#IP rip authentication key-chain mykeys
6 RIP的防止环路的机制
- 环路产生的原因
- 防环机制1
最大跳数
一个路由最远可以到15跳的地方,如果跳数是16跳,就会认为不可达
水平分割
如果从接口上收到某路由的更新,那么就不会将该路由再发回去
毒化路由
如果某个接口down了,就会立即更新该接口的网段,但是跳数是16,这样邻居收到后就立即删除
触发更新
如果路由发生了变化,立即进行更新,而不用等待30s
抑制计时器
180s没有收到路由更新,就会判断可能失效,240s没有收到就会直接删除
毒性逆转
和水平分割矛盾,只能二选一。
如果从接口上收到某路由的更新,那么就立即从收到的接口将该路由发回去,但是跳数是16,这样就不会从方向去学习路由了。
3.可以查看路由表获得这条条目的时间.
(1)每30s发送一次路由更新包,正常情况下的条目时间都在30s以下。
(2)超过30s没有收到条目的更新包,还会暂且相信条目存在.
(3)超过180s,虽然还可以出现在路由表里,但是不可用了。
(4)超过240s,彻底放弃这条路由
7 RIP的缺陷
- 距离矢量协议,判断线路的好坏只依靠跳数来决定,经过几个路由器度量值就是几。不考虑带宽等其他因素的影响。这样判断线路太片面了。
- 例如下面的实例中,A-F虽然下面的线路j经过路由器数目多,但是线路带宽大呀,应该这条线路更好,传输更快。