路由信息协议
网际网路协议套组 |
---|
应用层 |
传输层 |
网路层 |
连结层 |
路由信息协议(英语:Routing Information Protocol,缩写:RIP)是一种内部网关协议(IGP),为最早出现的距离向量路由协定。属于网路层,其主要应用于规模较小的、可靠性要求较低的网络,可以通过不断的交换信息让路由器动态的适应网络连接的变化,这些信息包括每个路由器可以到达哪些网络,这些网络有多远等。
虽然RIP仍然经常被使用,但是由于收敛速度较慢和支持的广播网络规模有限等缺点,许多人认为它将会而且正在被诸如OSPF和IS-IS这样的路由协议所取代。当然,我们也注意到EIGRP的存在,它属于与RIP相同的基本协议类别,但更能适应不同网络环境。
历史
RIP所使用的路由算法是Bellman-Ford算法.这种算法最早被用于一个计算机网络是在1969年,当时是作为ARPANET的初始路由算法。
RIP是由“网关信息协议”(Xerox Parc的用于互联网工作的PARC通用数据包协议簇的一部分)发展过来的,可以说网关信息协议是RIP的最早的版本。后来的一个版本才被命名为“路由信息协议”,是Xerox网络服务协议簇的一部分。
运作原理
每隔30秒会与相邻的路由器交换子讯息,以动态的建立路由表。
RIP封包格式
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | command (1) | version (1) | must be zero (2) | +---------------+---------------+-------------------------------+ | address family identifier (2) | must be zero (2) | +-------------------------------+-------------------------------+ | IP address (4) | +---------------------------------------------------------------+ | must be zero (4) | +---------------------------------------------------------------+ | must be zero (4) | +---------------------------------------------------------------+ | metric (4) | +---------------------------------------------------------------+
RIP规定度量值取0~15之间的整数,大于或等于16的跳数被定义为无穷大。
版本
目前RIP共有三个版本,RIPv1、RIPv2、RIPng。
RIPv1
RIPv1使用分类路由,定义在《RFC 1058》中。在它的路由更新(Routing Updates)中并不带有子网的资讯,因此它无法支援可变长度子网掩码。这个限制造成在RIPv1的网路中,在同级网路下无法使用不同的子网掩码。换句话说,在同一个网路下所有的子网路数目都是相同的。另外,RIPv1的协议报文中没有验证字段,所以RIPv1不支持验证。
RIPv1是一个基于UDP的路由协议,并且RIPv1的数据包不能超过512字节(RIP报文头部占用4个字节,而每个路由条目占用20个八位组字节。因此,RIP消息最大为4+(25*20)=504个字节,再加上8个字节的UDP头部,所以RIP数据报的大小(不含IP包的头部)最大可达512个字节。)。
RIPv2
RIPv2在RIPv1的基础上改进如下几点:
- 支持外部路由标记(Route Tag),可以在路由策略中根据Tag对路由进行灵活的控制。实际上不同RIP进程间相互引入路由也可以使用Tag。
- 报文中携带掩码信息,支持路由聚合和CIDR。
- 支持指定下一跳,在广播网上可以选择到目的网段最优下一跳地址。
- 支持以组播方式发送更新报文,只有运行RIPv2的设备才能收到协议报文,减少资源消耗。
- 支持对协议报文进行验证,增强安全性。
RIPng
RIPng(Routing Information Protocol next generation)在RFC 2080中被定义,主要是针对IPv6做一些延伸的规范。与RIPv2相比下其最主要的差异是:
- RIPv2 支援RIP更新认证, RIPng 则不支持,因为IPv6路由器理应会使用IPsec来进行身份验证;
- RIPv2 容许给路由器附上任何标签, RIPng 则不容许;
- RIPv2 在每个路由表项中都保存下一跳的信息,RIPng 是对一组路由表项指定下一跳信息;
- RIPv2 使用UDP端口520和多播地址224.0.0.9通信,RIPng 则使用UDP端口521和多播地址FF02::9通信
RIP协议定时器
RIP在更新和维护路由信息时主要使用以下4个定时器:
- 更新定时器:当此超时器超时时,立即发送路由更新报文,缺省每30s发送一次。
- 老化定时器:RIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。当学到一条路由并添加到RIP路由表中时,老化定时器启动,如果老化定时器超时,设备仍没有收到邻居发来的更新报文,则把该路由的度量值置为16,并启动垃圾收集定时器。
- 垃圾收集定时器:如果在垃圾收集时间内仍没有收到原来不可达到路由的更新,该路由将被从RIP路由表彻底删除。
- 抑制定时器:当RIP设备收到对端的路由更新,其度量值为16。则对应路由进入抑制状态,并启动抑制定时器,缺省值为180s。这时,为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由度量值小于16的更新,也不接受。当抑制超时器超时后,就重新接受对端发送的路由更新报文。
防止网络环路
由于路由器可能收到它自己发送的路由信息而造成网络环路,为了提高RIP协议性能而使用以下措施:
- 水平分割:水平分割指的是RIP从某个接口学到的路由,不会从该接口再发回给邻居设备。在帧中继和X.25等NBMA网络中,水平分割功能缺省为禁止状态。
- 毒性逆转:毒性逆转指的是RIP从某个接口学到路由后,将该路由的开销设置为16(即指明该路由不可达),并从原接口发回邻居设备。
- 滞留计时器(Hold-down timer):一但抑制计时器被触发后,那么将会引起该路由进入长达180秒(即6个路由更新周期)的抑制状态阶段。在抑制计时器超时前,路由器不再接收关于这条路由的更新信息。
- 触发更新:触发更新是指路由信息发生变化时,立即向邻居设备发送触发更新报文,通知变化的路由信息。(触发更新不会触发接收路由器重置自己的更新定时器)
相似协定
一个比RIP更强大,且同样基于距离矢量路由协定的协定,是思科专有的IGRP。思科在其现时发行的软件中已再没有对IGRP提供支援,而且由EIGRP──一只彻底地重新设计的路由通讯协定所取代。不过它与IGRP的关系就只有命名上的相似,亦纯粹是因为EIGRP依然是基于距离矢量路由协定的缘故。