前文我们了解了动态路由的基本概念,以及动态路由和静态路由的区别,优缺点,动态路由的分类,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14995317.html;今天我们主要来聊一聊动态路由协议中的RIP协议;
什么是RIP?RIP是Routing Information Protocol 首字母缩写,翻译成中文就是路由信息协议;它是一种基于距离矢量算法的动态路由协议,使用跳数作为衡量到达目标网络的距离。其特点是配置简单,易于维护和适合应用在较小的网络环境中;它有两个版本RIPV1和RIPV2两个版本,它是应用层协议,工作在udp的520端口,主要用来发现和维护去往目标网络的最短路径(路由的学习和维护);支持水平分割、毒性逆转和触发更新等防环机制;
RIP的工作原理
RIP的工作原理很简单,我们在路由器上启用rip进程,宣告网络以后,路由器首先会发送路由更新请求,收到请求的路由器会发送自己的RIP路由进行响应,收到路由更新包的路由器会对应的路由信息更新到自己的路由表中;当网络稳定后,各路由器会时隔30s,周期性的发送自己的路由更新信息;
实验:如下图拓扑环境,各路由器都运行rip,然后抓包看看具体的工作过程
配置各路由器的接口ip以及名称
配置R1
<Huawei>sys Enter system view, return user view with Ctrl+Z. [Huawei]sys R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 1.1.1.1 24 Jul 13 2021 19:20:53-08:00 R1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interface GigabitEthernet0/0/0 has entered the UP state. [R1-GigabitEthernet0/0/0]q [R1]dis ip int b *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 2 The number of interface that is UP in Protocol is 2 The number of interface that is DOWN in Protocol is 2 Interface IP Address/Mask Physical Protocol GigabitEthernet0/0/0 1.1.1.1/24 up up GigabitEthernet0/0/1 unassigned down down GigabitEthernet0/0/2 unassigned down down NULL0 unassigned up up(s) [R1]
配置R2
<Huawei>sys Enter system view, return user view with Ctrl+Z. [Huawei]sys R2 [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 1.1.1.2 24 Jul 13 2021 19:21:35-08:00 R2 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interface GigabitEthernet0/0/0 has entered the UP state. int [R2-GigabitEthernet0/0/0]g0/0/1 [R2-GigabitEthernet0/0/1]ip add 2.2.2.2 24 Jul 13 2021 19:21:36-08:00 R2 %%01IFNET/4/LINK_STATE(l)[1]:The line protocol IP on the interface GigabitEthernet0/0/1 has entered the UP state. [R2-GigabitEthernet0/0/1]q [R2]dis ip int b *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 3 The number of interface that is DOWN in Physical is 1 The number of interface that is UP in Protocol is 3 The number of interface that is DOWN in Protocol is 1 Interface IP Address/Mask Physical Protocol GigabitEthernet0/0/0 1.1.1.2/24 up up GigabitEthernet0/0/1 2.2.2.2/24 up up GigabitEthernet0/0/2 unassigned down down NULL0 unassigned up up(s) [R2]
配置R3
<Huawei>sys Enter system view, return user view with Ctrl+Z. [Huawei]sys R3 [R3]int g0/0/0 [R3-GigabitEthernet0/0/0]ip add 2.2.2.3 24 Jul 13 2021 19:22:05-08:00 R3 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interface GigabitEthernet0/0/0 has entered the UP state. [R3-GigabitEthernet0/0/0]q [R3]dis ip int b *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 2 The number of interface that is UP in Protocol is 2 The number of interface that is DOWN in Protocol is 2 Interface IP Address/Mask Physical Protocol GigabitEthernet0/0/0 2.2.2.3/24 up up GigabitEthernet0/0/1 unassigned down down GigabitEthernet0/0/2 unassigned down down NULL0 unassigned up up(s) [R3]
提示:可以看到3台路由器各自的相关接口都正确配置了ip地址和名称;
配置R1路由器上的RIP ,并宣告对应的网络,然后抓包看看对应能抓到什么包?
提示:可以看到当R1运行rip,并宣告网络以后,对应就能抓到一个request包,其他的都是response包,并且在R1会每隔30秒发送一次响应包;在抓包的信息中,我们也能清楚的看到rip发送请求和响应包目标地址都是255.255.255.255,这个地址就是全网广播;默认没有配置RIP的版本时,默认运行的是RIPv1的版本;以此同时我们也能清楚的看到RIP工作在udp的520端口;
配置R2的rip,并宣告对应接口的网络,然后抓包分析
提示:同样的原理,在R2配置好RIP以后,对应在R1的接口上也能收到对应R2发送过来的请求包和响应包,并且也能看到R1的响应包;
查看R1的路由表
[R1]dis ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 8 Routes : 8 Destination/Mask Proto Pre Cost Flags NextHop Interface 1.1.1.0/24 Direct 0 0 D 1.1.1.1 GigabitEthernet0/0/0 1.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 1.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 2.0.0.0/8 RIP 100 1 D 1.1.1.2 GigabitEthernet0/0/0 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 [R1]dis ip rout pro rip Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Public routing table : RIP Destinations : 1 Routes : 1 RIP routing table status : <Active> Destinations : 1 Routes : 1 Destination/Mask Proto Pre Cost Flags NextHop Interface 2.0.0.0/8 RIP 100 1 D 1.1.1.2 GigabitEthernet0/0/0 RIP routing table status : <Inactive> Destinations : 0 Routes : 0 [R1]
提示:可以看到现在R1的路由表中学习到R2上的2.2.2.2 的路由;
查看R2的路由表
[R2]dis ip routing Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 10 Routes : 10 Destination/Mask Proto Pre Cost Flags NextHop Interface 1.1.1.0/24 Direct 0 0 D 1.1.1.2 GigabitEthernet0/0/0 1.1.1.2/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 1.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 2.2.2.0/24 Direct 0 0 D 2.2.2.2 GigabitEthernet0/0/1 2.2.2.2/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 2.2.2.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 [R2]dis ip rou pro rip [R2]
提示:在R2上并没有发现学习通过RIP学习到R1的路由,其原因是R1上只宣告了一条和R2直连的网络,默认情况下,路由器它不会学习和当前接口是直连的路由,所以在R2上我们是看不到通过RIP学习到的1.0.0.0的路由;
在R3上运行RIP,并添加一个lo3回环口,配置其ip地址为3.3.3.3 24,并宣告对应的网络,看看各路由器是否能够相互学习到自己非直连的路由信息呢?
[R3]int lo3 [R3-LoopBack3]ip add 3.3.3.3 32 [R3-LoopBack3]rip 1 [R3-rip-1]net 2.0.0.0 [R3-rip-1]net 3.0.0.0 [R3-rip-1]d th [V200R003C00] # rip 1 network 2.0.0.0 network 3.0.0.0 # return [R3-rip-1]dis ip int b *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 3 The number of interface that is DOWN in Physical is 2 The number of interface that is UP in Protocol is 3 The number of interface that is DOWN in Protocol is 2 Interface IP Address/Mask Physical Protocol GigabitEthernet0/0/0 2.2.2.3/24 up up GigabitEthernet0/0/1 unassigned down down GigabitEthernet0/0/2 unassigned down down LoopBack3 3.3.3.3/32 up up(s) NULL0 unassigned up up(s) [R3-rip-1]
提示:RIP宣告网络只需宣告其主类即可;所谓主类是根据其ip地址的分类,如A类地址是从1-126,B类是从128-191,C类是从192-223;
查看R2 是否学习到3.3.3.3/32的路由呢?
提示:可以看到R2的路由表中就有通过RIP学习到了3.0.0.0/8的路由;
查看R1的路由表
提示:可以看到在R1的路由表中也通过RIP学习到了到达3.0.0.0/8的路由;
查看R3的路由表
提示:R3也通过RIP学习到了1.0.0.0/8的路由;通过上述实验我们可以看到,当路由器运行了RIP进程,并宣告了对应接口上的网络以后,对应路由器首先会发送请求路由信息包,然后自己每隔30秒将自己宣告的网络对应的路由全网广播(ripv1);收到路由更新包的路由器会将其对应的路由信息更新到自己的路由表中;
RIP度量
RIP使用跳数作为度量值来衡量到达目标网络的距离,默认缺省情况下,直连网络的路由器跳数为0,但路由器发送到路由更新时,会把其度量值加1;
验证:在上述实验环境中,在R2上抓包,看看3.0.0.0/8这条路由的跳数是多少?
提示:可以看到在R2上抓包,看到3.0.0.0/8这个目标网络的跳数为1,其原因是在R3的路由表中3.0.0.0的路由其跳数为0,在R3发送该条路由信息时,会将其跳数加1,所以R2接收到3.0.0.0这条路由时,其跳数为1;
验证:按照上述的理论,我们在R1上抓包,看看对应3.0.0.0这个目标网络的路由是不是2?
提示:可以看到了到达3.0.0.0的网络,跳数为2;说明在R2发出路由更新包时,将其路由的跳数加1,所以到达R1时就变为2了;同时我们也看到上述的抓包信息中,并没有抓到R1发送到路由更新包,其原因是R1上值宣告了和R2直连的一条网络,对于R2来说,并没有值得学习的路由,所以R1也干脆不发了(默认情况下,如果使用RIPv2版本,配置的有认证,R1还是会发送路由更新信息);
RIP规定超过15跳的网络为不可达网络;这句话的意思也就告诉我们了在默认情况下,到达目标网络的路由器不能超过16个;同时我们可以理解当我们要在RIP中删除一条路由信息,RIP会将对应的路由信息的跳数置为16跳;
验证:还是上述的实验,我们在R2上抓包,然后把R3 上的3.0.0.0从R3的RIP进程删除,看看R2 收到的路由更新包对应3.0.0.0的跳数是多少?
提示:可以看到对应在R3被取消宣告的3.0.0.0网络,在R3发送时将其跳数置为16跳,意思就是告诉R2 3.0.0.0网络不可达;此时在R2的路由表中就不会存在3.0.0.0网络的路由;
验证:查看R2的路由表,看看对应3.0.0.0网络的路由是否还存在?
提示:可以看到在R2的路由表中并没有发现3.0.0.0的路由;说明R2理解了R3发送到路由更新,将其3.0.0.0从路由表中删除;这也说明了跳数为16跳的路由在RIP中没有任何意义,当然也不会被其他路由器学习并存放在路由表中;
RIPv1和RIPv2 的区别
从上面的实验和抓包我们可以看到RIPv1默认是把路由请求和路由更新发送给目标地址为255.255.255.255(广播),并且在对应的报文中,并没有掩码,只有ip地址,其原因是RIPv1是有类路由协议,它默认会根据ip地址的分类默认添加/8或/16或/24的掩码,这也说明了RIPv1它不能运行在非默认掩码的网络环境中,即不支持vlsm(可变长子网掩码,就是子网划分,将一个子网划分为多个子网)和cidr(无类域间路由,和子网划分相反,是将多个子网聚合为一个子网);除了上述的2各特点,它还不支持认证;
RIPv2的特点,它弥补了RIPv1版本的缺陷,首先它的报文不是全网广播,而是将路由请求和路由更新发送到224.0.0.9这个组播地址,只有运行RIPv2版本的RIP进程会从这个组播地址学习路由;其次RIPv2是无类路由协议,所谓无类动态路由协议就是指对应路由信息在报文中除了有ip地址,它还携带掩码,这也意味着RIPv2支持vlsm和cidr;除此RIPv2支持明文认证和md5密文认证,从某些角度讲要比RIPv1安全;
验证:在R1上抓包,然后更改R2 上的RIP进程,让其运行为v2 版本,看看对应和v1版本的数据包有什么不同?
RIPv2的数据包
RIPv1的数据包
提示:从上面抓包来看,V1的数据包是全网广播,并且路由信息不携带掩码;v2的数据包不是全网广播,而是发送给224.0.0.9这个组播地址,并非且对应路由信息中有携带掩码;
在R1上查看路由表
提示:在R1的路由表中我们可以看到有两条由RIP学习过来的路由,其中一条的掩码为8,另一条为24;为什么会有两条路由呢,其原因是v2版本学习到的是24为掩码,而v1版本学习到的是8为掩码,从路由器的路由规则来讲,24为掩码优先匹配(最长掩码匹配原则嘛),所以当路由器从RIPv2切换为v1时,原来24掩码的路由不会立马被路由器删除(老化时间到了会被删除);反之,如果路由器从RIPv1切换成RIPv2,对应/8的路由会立马被删除;
RIPv1报文格式
RIPv1字段解释
RIPv2报文格式
RIPv2报文字段解释
RIPv2认证功能的配置
在R2上配置简单明文认证功能
提示:配置RIP认证,我们需要在对应的接口上配置;上述命令中simple表示简单明文认证,除此RIP还支持md5认证,后面的plain表示在配置信息中以明文的方式回显,所以上述命令表示的意思是在g0/0/0这个接口上开启rip认证,认证模式为简单明文认证,并在配置信息中以明文的方式回显;
验证:我们在R1上抓包,看看对应R2发送到数据包有什么特点?是否能够抓到密码呢?
提示:可以看到我们在R1上抓包,是能够看到R2发送到认证信息,并且从路由更新包中也能清楚的看到对应的密码;
更改R2上RIP认证模式为md5认证,并在配置信息回显以明文方式显示
再次在R1上抓包,看看是否能够抓到R2发送到认证密码呢?
提示:再次在R1上抓包就看不到对应的密码了;接下来我们看看R1的路由表,看看是否能够学习到R2上的路由呢?
提示:可以看到在R1上此时并无法学习到R2上的路由;原因是R1上没有配置认证;
在R1上配置简单明文认证,并在配置信息中以密文方式回显
提示:后面的cipher的作用就是用来配置在配置信息中以密文的方式显示;这是一种防止密码泄露的一个安全措施吧;
此时R1和R2都配置了认证,并且密码都相同,在R1上是否能够学习到R2上的路由呢?
提示:虽然R1上的认证和R2上的认证密码都是admin,但是他们的使用的认证模式不一样,所以还是导致R1无法学习到R2的路由;
配置R1的认证模式为md5,并在回显时以密文方式
提示:现在R1和R2的认证方式和认证密码都相同,唯一不同的是一个回显明文显示,一个回显密文显示,我们再来看看R1是否能够学习到R2的路由呢?
提示:现在我们在R1上学习到R2上的路由;通过上述实验我们可以总结,在RIP中做认证,必须满足两个条件,第一认证模式必须相同,其次就是认证的密码必须相同,回显相同和不同不影响认证;这两个条件必须同时满足,认证才会通过,否则认证通不过;