经过前面一系列基础的铺垫,终于要讲到动态路由了,而动态路由才是我们学习的重点,话不多说,开始正题。
RIP(Routing information Protocol)是早期第一代动态路由协议,是一种基于距离矢量(Distance-Vector)算法来计算到达目的网络的最佳路径路由协议,它通过UDP报文进行路由信息的交换,使用的端口号为520,RIP是基于跳数(最多支持15跳)来衡量到达目的地址的距离,称为度量值,RIP协议有多个版本,分为v1/v2/ng版。
RIPv1版本的RIP协议是支持有类ip地址的协议,在所有路由器上启动RIP协议,路由器便会自动向邻居通告自己所知道的路由信息,同时接收邻居通告过来的路由信息,最终自动建立完整的路由表。比如:路由设备R1,R2,R3都启动了RIP协议,然后它们都通告一遍自身的本地网络号,然后这些路由设备都会共享这些本地网络号。
路由器刚开始启动时,路由表中只会包含直连路由(相邻的邻居路由)。当R1设备和R2设备运行RIP路由协议之后, 路由器会发送Request广播报文(广播包都是以目标地址为255.255.255.255),用来请求邻居路由器的RIP路由。运行RIP的邻居路由器收到该Request广播报文后,会根据自己的路由表,生成Response报文进行回复。路由器在收到Response报文后,会将相应的路由添加到自己的路由表中。
当接收到响应路由时会依据度量值的大小来判断路由的好坏,把度量值小的路由放入路由表中,判断过程如下:
1.先查看自己的路由表中是否有该路由信息
2.如果没有就添加该路由
3.如果有,那么只在新度量值较小时才更新
RIP网络稳定以后,每个路由器会周期性地向邻居路由器通告自己的整张路由表中的路由信息,默认周期为30秒。邻居路由器根据收到的路由信息刷新自己的路由表。当检测到更新时,会向邻居发送触发更新,通知路由发生变化了。
RIP协议的特点从以下几个方面来说:
OSI层次:应用层协议,基于UDP端口520
算法特征:距离矢量协议
有类无类:RIPv1为有类、RIPv2为无类
运行范围:IGP内部网关协议
最佳路径:管理距离120、度量值:跳数(路由器的个数)
RIPv1路由协议的报文格式如图2所示:
RIP协议通过UDP交换路由信息, 端口号为520。 RIPv1以广播形式发送路由信息, 目的IP地址为广播地址255.255.255.255。
RIPv1报文格式中的字段说明:
Command:表示该报文是一个请求报文还是响应报文,1表示该报文是请求报文,2表示该报文是响应报文。
Version:表示RIP的版本信息,如果是使用RIPv1协议,那么该字段的值为1,RIPv2协议中该字段值为2。
Address Family Identifier(AFI) :表示地址标识信息, 对于IP协议,其值为2。
IP address:表示该路由条目的目的IP地址。 这一项可以是网络地址,主机地址。
Metric:标识该路由条目的度量值, 取值范围1-16。
一个RIP路由更新消息中最多可包含25条路由表项, 每个路由表项都携带了目的网络的地址和度量值。
选择R1设备配置ip地址:
//进入配置模式给f0/1口配置ip地址
R1#conf t
R1(config)#int f0/1
R1(config-if)#ip add 12.1.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#no shutdown
R1(config-if)#exit
//给f0/0口配置ip地址
R1(config)#int f0/0
R1(config-if)#ip add 13.1.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#no shutdown
R1(config-if)#exit
//给lo1口配置ip地址
R1(config)#int loopback 1
R1(config-if)#ip add 1.1.1.1 255.255.255.255
R1(config-if)#exit
R1(config)#exit
选择R3设备配置ip地址:
//进入配置模式给f0/0口配置ip地址
R3#conf t
R3(config)#int f0/0
R3(config-if)#ip add 13.1.1.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
//给f0/1口配置ip地址
R3(config)#int f0/1
R3(config-if)#ip add 23.1.1.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
//给环回口loopback配置ip地址
R3(config)#int loopback 1
R3(config-if)#ip add 3.3.3.3 255.255.255.255
R3(config-if)#exit
R3(config)#exit
R3#
R2设备配置的方式和上面是一样的,这里略过。
然后分别在R1,R2,R3每台设备上配置RIP路由协议。R1配置如下:
R1(config)#router rip //配置RIP协议时,使用router rip命令创建RIP进程,后面跟上数字2就是RIPv2,如果不写默认为RIPv1
R1(config-router)#network 12.0.0.0 //R1通告自己的网段
R1(config-router)#network 13.0.0.0
R1(config-router)#network 1.0.0.0
R1(config-router)#exit
R1(config)#
然后就使用了network命令通告自己的网段,因为使用的是RIPv1路由协议,所以在通告时不需要具体的路由条目如12.1.1.0,也不需要路由掩码。这是因为RIP协议很早就诞生了,是一个非常古老的协议,看不懂ip地址和子网掩码。对于A类地址来说,只看前8个网络位即可,其他位自动为0,同时也说明了RIPv1版协议不支持子网络划分,只能支持比较大的主类网络,比如A类,B类,C类。
也就是说,R1,R2,R3都宣告各自本地的主类网络号,然后它们之间就会共享这些本地的网络号。
R2配置如下:
R2(config)#router rip
R2(config-router)#network 12.0.0.0
R2(config-router)#network 2.0.0.0
R2(config-router)#network 23.0.0.0
R2(config-router)#exit
R2(config)#
R3配置如下:
R3(config)#router rip
R3(config-router)#network 13.0.0.0
R3(config-router)#network 3.0.0.0
R3(config-router)#network 23.0.0.0
R3(config-router)#exit
R3(config)#
在R1,R2,R3三个设备相继通告自己的网络后,它们会相互之间共享并学习这些路由信息,我们选择R1设备,然后通过show ip router命令查看R1的路由表信息:
通过图4中的路由表发现,R1学到了三条路由信息,分别是:2.0.0.0网段(从R2设备学到的路由),3.0.0.0网段(从R3设备学到的路由),23.0.0.0网段(R2和R3之间的路由)。
其中这条路由R 23.0.0.0/8 [120/1] via 13.1.1.3, 00:00:28, FastEthernet0/0的信息如下:
R:表示该路由条目是通过RIP路由协议学习到的
23.0.0.0:表示学到的目标路由信息
120:表示RIP默认的管理距离
1:表示该路由的度量值
via:表示经过,通过
13.1.1.3:表示下一跳地址
00:00:28:距离下一次更新时间还有3(30 - 28)s
FastEthernet0/0:表示路由器是通过f0/0路由接口学到这条路由的
如图5所示,然后R1直接去ping R3设备的环回接口时,测试成功,RIP部署实验完成。
R1#show run | include ip route //查看静态路由配置
R1#show run | section router rip //查看RIP配置
R1#show run | s r r //查看RIP配置 ,这是上面那种方式的简写,s = section ,r = router,r = rip
R2#show ip route static rip eigrp … // 查看静态RIP和EIGRP的路由
R2# show ip protocols //查看路由协议信息
No ip routing //关闭路由功能
ip routing //开启路由功能
debug ip rip //开启rip的debug模式
RIP路由分组也叫RIP路由更新包,一般有Request和Response两种数据包。这里,我们直接通过wireshark抓包工具抓取12.1.1.0/24网段的RIP数据包吧
Request分组是一个RIP请求分组,用于初始化时向相邻的路由器请求路由条目,换句话说,Request分组就是用于学习相邻路由器的路由信息,从而在最短的时间内了解整个网络的状况,这种方式也叫路由同步,路由收敛。
Response分组是一个RIP回复分组,用于更新/发送本地路由信息,一般有以下几点特征:
- 进行周期性的更新(25.5-30s):一般在25 - 30秒内都会就会更新一次路由表信息
- 广播更新(255.255.255.255):每次都会以广播的形式发送本地的路由更新包给相邻的路由器
- 不可靠更新(UDP):发送的RIP协议的Response数据报是基于UDP协议来发送的。