RIP(Routing Information Protocol)叫做路由信息协议,他算是一种很简单的内部网关协议,他是一种基于跳数作为度量值来计算到达目的网络距离,基于距离矢量算法来计算路由转发路径的。
RIP基本原理:
RIP是典型的距离矢量算法的协议,虽然现在使用的很少,但是他也是一个比较重要的路由协议,由简入难嘛,先理解了简单的路由协议才能更好的了解后续更复杂的路由协议。距离矢量算法的特点就是会泛洪自己整个路由表给自己的邻居路由器。并且根据距离来计算最优路径,这个距离的算法就是每经过一个路由器设备就算一跳,最大是15跳,16跳在RIP协议里面就意味着目的不可达。 RIP版本 RIP路由协议,有两个版本,RIPv1、RIPv2 我们这里所讲解的一些 RIP 的基本原理,这些都是按照RIPv1的工作原理来讲解,RIPv2 只是 RIPv1 版本的升级版本,基本原理不会有很大的变化。 RIPv1和RIPv2的区别:
共同点 |
---|
1、报文格式一致 2、报文类型一致,都是Reques和Response 3、采用的度量值算法一致,最大15跳,16跳不可达 4、定时器一致| |不同点| 1、报文更新不一致:RIPv1采用广播,RIPv2采用组播 2、传递路由是否可以携带掩码:RIPv1采用的是有类路由不传递子网掩码,RIPv2采用的是无类路由传递子网掩码。 3、RIPv1无法关闭自动汇总,且不支持手动汇总。RIPv2都支持。 4、RIPv1不支持路由标记,RIPv2支持路由标记。 5、RIPv1报文中不包包含下一跳属性,RIPv2支持报文携带下一跳属性 6、RIPv2新增了身份验证功能。RIPv1不支持。
还有一种版本是支持 IPv6 的 RIPng ,这个其实就是可以理解为 RIPv2 的 IPv6 版本。
RIP初始化流程
设备运行RIP协议后,会从每个参与协议的接口上以广播的形式发送路由请求。设备收到这个请求后,会将自己完整的路由表以广播的形式给予响应,收到对端的响应后,再根据路由协议计算,把对应路由写入到自己的路由表内。自己计算得出最后的路由表后,会把这个路由表的信息按照发送方式逐条扩散。
RIP协议中一些涉及到的一些名词
邻居: 在RIP协议中,邻居设备可以理解为直连设备。
周期更新: 在开启了RIP路由协议的路由器,会每隔一个特定的时间周期,来发送路由更新信息,确保路由信息的同步工作,在RIP协议中这个周期默认为30s。
Metric: 度量值在RIP路由协议中,这个就是跳数,每经过一台路由器就会加1,15跳为最后一台设备,16跳就是不可达的距离了。
广播更新: 路由器向目标255.255.255.255 的地址发送报文,网络中的所有设备都会接收到这个报文,RIPv1默认采用的就是广播更新,会极大程度耗费网络性能。
组播更新: 路由器向目标为 224.0.0.9 的地址发送报文,网络中只有监听了这个组播地址的设备才会接收到,RIPv2默认是组播更新。
泛洪路由表: 路由器将学习到的路由放进自己的路由表内,然后将路由表所有的路由条目进行传输,直到整个网络全部都学习到。
更新定时器: 用于触发更新报文的发送,若定时器超时则会发送Response,默认时间为30s
老化定时器: RIP设备如果在老化时间没有收到某条路由Response报文,就会把这条路由从路由表中删除,然后启动垃圾收集定时器。老化时间默认180s。
垃圾收集定时器: 在垃圾收集定时器内还没有收到邻居对于这条路由的更新报文,那么将会彻底删除,默认时间为120s。
RIP存在的问题:
看了上面一些基本知识介绍后,大家可以自己先想一下RIP可能会存在那些问题。
RIP协议第一个问题就是收敛时间太久,对于一个路由协议来说周期性的30s路由更新,而且还是路由表全部内容都发送给邻居,也就是每次都是覆盖的方式去更新自己的路由表。 15跳度量值限制了RIP协议网络的可扩展性,仅允许路由器的直径不得超过15跳。 距离矢量路由协议对传递过来的路由信息并不会去验证传递过来的路由器的身份是否是可信的,若对端是个仿冒的路由器发来的路由信息,他也会直接覆盖自己本身的路由信息,当然这种情况还是比较少见的,但是若这是某一条错误的路由信息,导致的后果也是一样的,这条路由还是会存在网络中,就算你自己认识到这条是失效的,因RIP协议路由信息的更新方式,这条会一直存在RIP协议中。
RIP防环机制:
上面的几个问题,收敛时间可以通过修改计时器来解决,跳数限制网络环境,这些在一些较为简单的网络环境中还是可以忽略不计的。但是唯有路由环路这个,这个需要单独拎出来讲讲。
看下面所对应的图,三台路由器都运行了RIP协议,路由信息也完整更新并稳定下来了,这个时候 R3 去往 10.10.10.0/24 的路由条目出现了故障,这个时候 R3 会将此路由标记为不可达,并在下一个更新周期发给 R2 ,但是这个时候 R3 收到了 R2 关于 10.10.10.0/24 的路由信息条目的更新报文,R3 会重新学习这条路由信息并把出接口下一跳改为 R2 的接口,这个时候若 R2 有一个数据包需要发往 10.10.10.0/24 网段时会出现什么情况呢?将会出现 R2 把数据包发往 R3 ,R3 查看到 10.10.10.0/24 的网络下一跳接口是 R2 ,将会把数据包又发给 R2 ,这样不停的循环,直到这个数据包的 Metric 到达最大值,也就是 15 跳之后,才会认为次路由不可达。
RIP 协议本身的算法是并不具备解决环路的,但是他提供了四种机制来解决这种环境情况,分别是:水平分割、毒性逆转、最大计数器、触发更新。
水平分割:
在同一个接口上接收到的路由信息,不会再从这个接口上传递出去。
如下图所示;当 R1 从自己接口 Eth 0/0/0 收到 R2 传递过来的 10.10.18.0/24 的路由信息,并不会再从 Eth 0/0/0 传递这条路由给 R2 。通过这种方式来防止协议环路的产生。
毒性逆转:
毒性逆转,他的工作方式跟水平分割恰巧相反,R1 会从源接口发出去,不过会把这条 10.10.18.0/24 路由跳数设置为 16 ,然后再发回给 R2 ,告诉 R2 路由器这条 10.10.18.0/24 的路由,通过 R1 是无法到达的。
最大计数器:
这里最大计数器就是指的 RIP 协议中所限制路由最大跳数为 16 跳的一个限制,就是为防止上述那种路由信息来回反复传递的情况,当邻居设备收到这条 16 跳的路由信息,应该立刻从自己的路由表中删除此路由信息,在 RIP 网络中 16 跳的路由也被称为毒化路由。
触发更新:
当 RIP 网络中当路由表中某条路由条目发生变化时,比如度量值变化、学习或者删除某条路由的时候,就立刻向邻居路由器发送更新路由的信息,不会去等到 RIP 定时器的时间,这样做的好处虽然不能根本解决环路,但是可以极大程度上减少环路的存在。 触发更新机制的方式分为两种; 1、当路由信息发生变化时,立刻向邻居路由器发送更新报文。 2、当路由下一跳不可达的时候,立刻把此路由的度量值标记为 16 跳,并发送给邻居。