RIP(Routing Infomation Protocol,路由信息协议)是一种较为简单的内部网关协议(Interior Gateway Protocol,IGP),主要用于规模较小的网络中,比如校园网和结构较为简单的地区性网络。对于更为复杂的环境和大型网络场景,一般不使用RIP,而是使用更为先进、可靠的OSPF协议。由于RIP协议的配置简单,协议理解也较为容易,我们从RIP学起可以更快入手路由协议族。
RIP是一种典型的距离向量(Distance-Vector)协议,它使用一种非常简单的度量(metric)来计算路由开销--路由跳数,也就是到达目的地址所需要经过的设备节点数(网段跳越点),取值0-15,数值16表示无穷大,也就是网络不可达,基于这一点,RIP也只能适用在简单网络环境和小型网络中。RIP规定,路由器到与它直连网段的跳数为0,通过与其直连的路由器到达另一个网络的跳数为1,其余的以此类推。
RIP协议使用UDP 520端口来发送和接收协议报文。RIP协议每隔30s以广播的形式发送一次,为了防止广播风暴出现,后续的广播报文将做随机延后再发送。再RIP中,如果一条路由在180s内没有被刷新,这条路由的metric将被设置为16,即不可达,接下来将进入老化时间,如果120s内没有收到路由信息,则从路由表内删除。
RIP至今已经经历了RIPv1,RIPv2,RIPng版本,其中RIPng适用于IPV6。通常我们所说的RIP协议则是RIPv1和v2,v2相对于v1有了很多方面的补充和加强。两个版本之间的主要差异是:v1是有类别路由协议,v2是无类别路由协议。v2还具备了其他的优势:
管理距离是人为指定的一个数字,每种路由协议都有自己的管理距离,数字越小,优先级越高。
每条消息包含一个命令标识command,一个版本号verison,还有路由条目,最大支持25条。每个路由条目包括地址簇标识Address Family Identifier,AFI,路由可达的IP地址和路由的跳数。
命令command:只取值1或者2:1标识该消息是请求消息request,2表示该消息是响应消息response。其他的取值都不被使用。
版本号version:对于v1或者v2,该字段取值对于1或2.
地址簇标识AFI:对于IP地址,该字段取值2;
IP地址:路由的目的地址,这一项可以使主网络地址,子网地址或者主机地址,表示路由器自己知道的网络。
度量Metric:在RIP中指的就是跳数hop,该字段取值1-16之间。
如果某路由器必须发布大于25条路由的更新信息,那么必须产生多条rip信息。由于历史原因,v1的报文中有很多的unused区域,这有点不合理,值得一提,有些路由器支持查0检验,对于这些区域进行0值校验CHECK ZERO。
v2的消息格式基本和RIPv1相同,但是v2使用了那些0值区域字段。
v2协议已经对v1进行了非常多的扩展,都是使用v1中未使用的字段提供的。V2和V1一样,更新报文中最大可以携带25条路由条目,也是用UDP520端口号。对于两个版本的报文格式,可以发现,command,verison,AFI,ip address,metric字段都是没有变化的。v2多定义了路由标记(Route Tag),子网掩码(Subnet Mask),下一跳(Next Hop)。
路由标记(Route Tag):这个字段用于标记外部路由或重分布到RIPv2协议中的路由。默认的情况是使用这16位的字段来携带从外部路由选择注入到RIP中的路由的自主系统号,虽然RIP协议在自己并不使用这个字段,但是在多个地点和某个RIP域相连的外部路由,可能需要使用这个路由标记字段通过RIP域来交换路由信息。这个字段也可以用来把外部路由编成“组”,以便在RIP域中更容易控制这些路由。
子网掩码(Subnet Mask):这个字段确定了IP地址的网络和子网部分的32位掩码。正是因为这个字段的提出,让v2可以识别变长子网,让RIP支持无类子网。
下一跳(Next Hop):如果下一跳存在的话,它将标识一个比通告路由更好的下一跳。这里指出的下一跳地址,其度量值比同一个子网通告的路由器更靠近目的地。如果这个字段设置为0,说明通告路由器的地址是最好的下一跳地址。
在RIPv2中,对于路由协议的安全提供了保障。这个是v1不具备的。所谓路由安全,指的是一台路由器接收非法路由更新报文的可能性。 非法路由更新报文可能来自某个网络攻击者或者具有故障的路由器。RIPv2协议能够通过更新报文所包含的口令来验证某个路由选择更新的源的合法性。
v2是通过更改RIP消息中原来正常情况下第一个路由条目的的字段来支持认证功能的,如上所示。在含有认证的单个更新报文中,最大可以携带的路由条目变成了24个。认证的识别是通过设置地址簇标识符字段为全1(0xFFFF)。对于简单的口令认证,认证的类型(Authentication)是2(0x0002),对于MD5复杂认证的报文,则是3(0x0003)剩余的16个8bit字段携带一个最多16个字符的口令。口令在字段中按照左对齐的方式,如果一个口令小于16个字节,那么字段中没有使用的位将被设置为0来填充。
RIP受四个定时器控制,分别是Update、Timeout、Suppress和Garbage-Collect。
RIP是一种基于D-V算法的路由协议,由于它向邻居通告的是自己的路由表,若是某条路由发生故障,在自身向邻居通告故障之前,收到了邻居关于这条路由的通告报文,则会发生环路。RIP通过以下机制来避免环路的产生。
下面列一个例子便于理解(图片截取自论文《Linux下RIP路由的实现》--胡峰,诚挚感谢!!!):
网络拓扑图如下:
均为10.1.x.x网段,接下来列举每个时间周期内的A、B、C、D路由表变化:
RIP路由总结暂时就这么多,若有心得,以后补充。
【参考文献】
Linux下RIP路由的实现 胡峰
H3C RIP技术白皮书XXX
华为路由书籍XXX