RIP:路由信息协议,距离矢量型协议,使用跳数作为度量,基于UDP520端口工作,管理距离120。使用周期(30s)和触发更新
触发更新:用于结构突变时,进行及时的重新收敛,告诉全部路由器有一个网段发生了变化。
周期更新:用于保活、保证数据收到,解决没有收到确认包的情况,但是占用带宽。
RIP存在三个版本:
基于IPv4工作的:V1、V2版
基于IPv6工作的:NG版
特点\版本 | V1 | V2 |
---|---|---|
类别 | 有类别 | 无类别(携带掩码) |
支持 | 支持连续性子网 | 支持VLSM、仅支持CIDR,不支持超网 |
更新方式 | 广播更新 255.255.255.255 |
组播更新 224.0.0.9 |
是否支持认证 | 否 | 是 |
图中总共有五个网段,1、3、5是环回,2、4是它们之间的直连路由。R1和R2都有2网段,因此R1需要把自己的 1.1.1.0/24网段告诉R2,数据包就像图中那样,包中的信息包含1.1.1.0/24网段,数据包包含传输协议,源目端口,源IP、源MAC,组播更新地址等。
R2在收到R1的包后,就知道了这个包是从自己的S0/0口进来的,R1发送的地址是12.1.1.1/24,信息中包含了到1.1.1.0/24的度量值为1跳。就会产生一个
R 1.1.1.0/24 [120/1] S0/0 12.1.1.1的路由表
这个包再由R2转发给R3时,源IP被修改为23.1.1.1/24,跳数也被修改为第2跳了。最后R3学到1.1.1.0/24的路由。同理,所有的路由都可以按照这样的方式倒出全部的路由。当R1、R2、R3上都有5条路由时,即它们获得了整个拓扑的路由,也就意味着它们收敛完成。
(1)毒性逆转水平分割:
触发更新:当有路由器断开了某个网段时,该路由器会发送更新包,更新包中包含断开的网段和16跳的跳数,来告诉其它路由器此网段已不可达。收到的路由器作为回应需要将这条更新包再发送给发给自己的路由器,来作为确认自己收到了。这才是破环机制的核心机制。
(2)跳数限制——15跳
(3)水平分割——从此口进,不从此口出。不能完全解决问题,因为这个仅适用于防止直线、星形拓扑。
水平分割的核心作用:
①消除重复更新量
②在MA网络中消除重复更新量(MA:多路访问网络,在一个网段中,可连接的节点数量不限制)
(4)抑制计时器——平常不工作,但是遇到跳数无征兆增大,表示网络已经出环,此时抑制180s后重新收敛寻找新网段。
首先我们要知道RIP的周期更新时间为30S,且每台路由器并不是同时更新的,它们错开了更新时间。
按照上图:如果R3突然断掉了3.3.3.0/24网段,在它自己的30s倒计时为0时,它将这条消息发给了R2,此时R2距离刚更新过了13s。然后过了7秒钟,R1发包告诉R2它可以到3.3.3.0/24网段,度量值为3跳,这时距离R2更新的时间还剩10s。
此时R2会认为自己去3.3.3.0/24网段下一跳是12.1.1.1,但是它不知道R1去往3.3.3.0/24网段的下一跳也是它自己。这就导致出环了,这还没完,R2更新后,它会显示自己有去往3.3.3.0/24的路由告诉R3,最后这个图都陷入到了出环中。
出环的原因就是我收到的信息就是我刚刚删除的,甚至是我刚刚共享给你的。
(1)RIPv1:
R1(config)#router rip
R1(config-router)#version 1
R1(config-router)#network 1.0.0.0
R1(config-router)#network 12.0.0.0
1# 启动RIP协议
2# 选择RIP版本为1,若不进行版本选举,默认为升级版本1(注意不是普通版本)
3# 宣告的意义:
1、激活接口——使接口具有接收和发送路由信息的能力
2、路由或拓扑——不宣告某个接口,会导致该接口的信息无法传输给其他路由器
RIP在宣告时,只能定义主类的范围
(2)RIPv2:
r1(config)#router rip
r1(config-router)#version 2
r1(config-router)#no auto-summary
r1(config-router)#network 172.16.0.0
r1(config-router)#network 192.168.1.0
#3关闭自动汇总——关闭后会携带精确掩码,不关闭会携带主类掩码
(1)RIPV2的认证——运行于RIP协议的邻居间,进行身份的核实。 认证≠加密
先定制keychain,再进入和邻居相连的接口上调用
R1(config)#key chain xxx 钥匙库的名字为xxx,邻居可以不同
R1(config-keychain)#key 1 key 1第1把钥匙,邻居必须相同
R1(config-keychain-key)#key-string cisco123 钥匙为cisco123,邻居必须相同
R1(config)#interface f0/0 进入和邻居相连的接口上调用
R1(config-if)#ip rip authentication key-chain xxx 明文认证双方需一致
R1(config-if)#ip rip authentication mode md5 密文认证双方需一致
(2)RIPV2的手工汇总——在更新源路由器上所有更新发出的接口上配置
R1(config)#interface f0/0
R1(config-if)#ip summary-address rip 2.2.2.0 255.255.254.0
(3)被动接口——仅接受不发送路由协议信息,只能用于连接用户的接口,不得用于连接邻居的接口。
R1(config)#router rip
R1(config-router)#passive-interface lo0
(4)缺省路由——在边界路由器上配置RIP缺省后,内部的路由器将自动生成缺省路由指向边界路由器,边界路由器到达ISP的缺省路由,宣告手工静态配置
R1(config)#router rip
R1(config-router)#default-information originate
(5)加快收敛
RIP计时器 30s更新 180s失效 180s抑制 240s刷新(非cisco300s刷新)
计时器 | 注解 |
---|---|
180s失效 | 一次没收到更新并不能判断路由就没有了,有可能会因为网络卡了,所以给了6次机会。一旦6次机会都用完了,那么就判定这条路由失效了。紧接着会发再一条带毒的路由给其他邻居,告知其他邻居该路径已不可达。 |
180s抑制 | 平常不工作,正常情况下假设R1到达R2,跳数为1跳。但是跳数突然无征兆的变大,表示网络已经出环,此时抑制180s后重新收敛寻找新网段。 |
240s刷新 | 也就是会删除没有的路由条目 |
适当的修改计时器,可以加快设备的收敛速度,建议修改时维持原有的倍数关系,且不易修改的过小,否则会占用带宽资源,全网所有设备均需要修改。
R1(config)#router rip
R1(config-router)#timers basic 15 90 90 120
以上是我的CCNA分类中复制粘贴过来的内容,如需查看请点击这里:CCNA3:动态路由协议、RIP——路由信息协议而接下来的3个扩展配置,是CCNP相较于CCNA需要要补充的扩展配置:
由于RIP使用跳数作为度量,导致在选路的时候会出现选路不精确的现象,如下图:
上面的路跳数大,但是带宽好。路由器却选择了下面的路,这就需要我们来干涉选路了。
干涉原理:使用偏移列表的策略来实现:在控制层面流量的进或出接口上,加大流量中的度量值,然后来影响选路。在增加度量时,若多个设备均设置,度量将被叠加。
偏移列表缺陷:只能加大,不能减小,想修改其中一条路,就需要在另一条路上加大度量
控制层面是传路由表的方向(R4把它的环回传给R1),数据层面访问目标的方向(R1pingR4)。
层面 | 注解 |
---|---|
控制层面 | 针对路由协议而言,路由器通过IGP协议学习路由形成路由表即 |
数据层面 | 针对发送数据而言,控制层面构建路由表,为数据层面发送数据的提供服务,即没有控制层面形成路由表,数据层面无任何意义。 |
配置如下:
R1(config)#access-list 1 permit 3.3.3.0 (先使用ACL抓取到对应的网络号流量:相当于3.3.3.0 0.0.0.0)
R1(config)#router rip (再在rip中设置)
R1(config-router)#offset-list 1 in 2 serial 1/1
offset:偏移列表
1:ACL编号
2:度量再原有的基础上增加2
in:调用接口方向为入向
serial 1/1:入向的接口
这里我们要搭一个实验环境,底层配置如下图所示,然后R1运行RIPv1版,R2运行RIPV1+版,R3运行V2版。
宣告如下:
R1(config)#router rip
R1(config-router)#version 1
R1(config-router)#network 1.0.0.0
R1(config-router)#network 12.0.0.0
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
R3(config)#router rip
R3(config-router)#version 2
R3(config-router)#no auto-summary
R3(config-router)#network 23.0.0.0
R3(config-router)#network 3.0.0.0
宣告之后它们的路由表如下:
我们发现,只有R3的路由表是有问题的,没有收到之前R1、R2的路由。
我们再看一下它们的协议运行情况:
R1只收发1版本
V1+版:发V1,V1、V2都接受V2
收发关系\版本 | 标准V1 | 升级V1 |
---|---|---|
发送 | V1 | V1 |
接收 | V1 | V1、V2 |
无论设备当下使用的什么版本,所有接口可收发的版本信息均可修改,因此解决兼容性问题:
①可以让V1、V1+的设备模仿发送、接收V2的路由,但是无法携带掩码。
②V2可以正常发出和V1一样的路由。
R2(config)#int s0/1
R2(config-if)#ip rip send version 1 2
R2(config-if)#ip rip receive version 1 2
连续性子网: 母网相同,掩码长度一致 (只有连续子网可以进行汇总配置)。
比如下面这四个网段就是一个连续性子网。
我们以下面这个图为例,当这两台路由器均运行着V1版本的RIP的时候,就会导致R1没有学到1.1.2.0上的网段,R2没有学到R1上的网段。
底层配置如上图所示,宣告如下:
R1(config)#router rip
R1(config-router)#version 1
R1(config-router)#network 1.0.0.0
R1(config-router)#network 12.0.0.0
R2(config)#router rip
R2(config-router)#version 1
R2(config-router)#network 1.0.0.0
R2(config-router)#network 12.0.0.0
我们查看它们的路由表,发现它们确实没有学习到对方环回的网段。
原因如下:
从上面的宣告我们应该也可以看到,宣告的时候是1.0.0.0的网段,两台路由器之间,它们收到来自对端的路由时,发现和自己宣告的一样,根据RIP的水平分割规则,不再接收相同的路由,这就导致了网段没有完全学习到。
解决原理:
在V1的RIP中,若本地即将共享给邻居的路由与本地和邻居直连网段为连续子网,那么本地将携带主机位发送路由给邻居,邻居在接收到存在主机位的路由时,将使用与邻居直连网段的掩码来添加到这些路由中。
解决方案:
根据解决原理,我们可以将R1、R2之间的IP增加一个第2地址(或者直接覆盖原有IP),这样就可以与 R1、R2两个环回构造出了连续性子网,这样这3个网段就都处在同一个连续性子网中。
配置如下:
R1(config)#int s0/0
R1(config-if)#ip add 1.1.3.1 255.255.255.0 secondary
R2(config)#int s0/0
R2(config-if)#ip add 1.1.3.2 255.255.255.0 secondary
最后路由表全齐: