RIP
协议
概述
:RIP(Routing Information Protocol)
路由信息协议
,
简单的内部网关
IGP
(Interior Gateway Protocol),
基于距离矢量
(Distance-Vector)
算法
,
通过
UDP
报文进行信息传送
,
端口号为
520
。由于是距离矢量算法,它是使用跳数(Hop Count)来度量距离。即路由器与它直接相连的网络跳数为0,经过一个路由器的网络跳数为1,规定不能超过15跳。如果大于等于16跳即认为不可达。
1、RIPv1、RIPv2
RIPv1是有类路由协议(Classful Routing Protocol),只能以广播方式发送报文信息。因为它的报文格式不包含掩码信息,只能识别A、B、C的有类地址。同时也不支持路由聚合和连续子网。
而RIPv2是无类路由协议(Classless Routing Protocol),对比RIPv1,它功能更多
l
能够标记外部路由。
l
能够路由聚合和CIDR(Classless Inter-Domain Routing)。
l
能够自定义下一跳。
l
能够组播发送更新报文,组播地址224.0.0.9。
l
能够对协议报文进行验证,有明文验证和MD5验证两种方式。
2、对IPv6的支持
为了支持新一代IP地址IPv6,RIP协议对IPv4协议扩展成为RIPng。
l
新的UDP端口号:521。
l
使用组播地址FF02::9。
l
支持128比特的前缀地址长度及掩码长度。
l
下一跳地址采用128比特的IPv6地址。
l
使用前缀为FE80::/10的源地址发送RIPng路由更新报文。
3、RIP路由表
RIP路由表项包括以下信息:
l
目的地址
l
下一跳地址
l
转发报文接口
l
Metri值(0~15)
l
路由时间,是指从路由最新的一次修改到目前经过的时间长。
l
路由标记,用于区分内部、外部路由协议路由。
4、RIP定时器
RIP路由器之间的报文传送受三个定时器的约束,这三个定时器是Update、Age、Garbage-Collect。
l
Update:更新时间,定时触发更新报文的发送。
l
Age:老化时间,在该时间内路由器没收到邻居发来的更新报文则认为该路由不可达。
l
Garbage-Collect:垃圾超时时间,该时间内不可达路由器没收到来自同一邻居的更新报文则认为该路由器已经从路由表中彻底删除。
三个定时器的关系如图1:
图 1
5、RIP1报文格式
RIP报文包括头部(Header)和多个路由表项(Route Entries),一个RIP报文最多只能有25个路由表项,而RIP1数据包不能超过512字节。如图2:
图 2
命令(Command):
长度8bit,是标识报文类型,包括有Request报文,用来向邻居请求路由信息;还有Reponse报文,发送自己的路由信息。
版本(Version):
长度8bit,说明RIP的版本号,包括RIP1、RIP2。
地址系列(Address family identifier):
长度32bit,是地址系列标识,当值为2时表示IP协议,值为0时是Request报文。
IP地址:
长度32bit,即路由的目的地址。
度量(Metric):
长度32bit,路由的开销。注意Request报文的值是16。
6、RIPv2报文格式
如图3所示:
图 3
RIPv2的报文格式比RIP1多出了以下路由项:
外部路由标记(Route Tag):
长度16bit.
子网掩码(Subnet Mask):
长度32bit,目标地址的子网掩码。
下一跳地址(Next Hop):
长度32bit,最佳的下一跳地址。
7、RIPv2验证报文格式
前面说过RIPv2能够支持报文验证,它是使用第一个路由表项(Route Entry)作为验证,同时将地址系列标记的值设置为0xFFFF作为标记。如图4:
图 4
注意不同的路由项:
验证类型(Authentication Type):
长度16bit,验证类型,验证类型有明文验证和MD5验证。
验证字(Authentication):
长度16bit,验证字,当使用明文验证时包含了密码信息。
8、RIPng报文格式
RIPng:路由选择信息协议下一代(应用于Ipv6),是基于IPv6的网络协和算法的协议。它的报文由头部(Header)及多个路由表项RTEs(Route Table Entry)组成。同一RIPng报文中,RTE的最大值由接口MTU值决定。报文格式如图5:
图 5
8.1、RTE的格式
RIPng有两类RTE:
1)下一跳RTE:位于一组具有相同下一跳的“IPv6前缀RTE”的最前面,它定义了下一跳的IPv6地址。如图6:
图 6
IPv6下一跳地址:
长度16字节,表示下一跳的IPv6地址。
必须为0:
长度16bit,必须为零的字段。
2)IPv6前缀RTE:位于某个“下一跳RTE”的后面,同一个“下一跳RTE”后面可以有多个不同的“IPv6前缀RTE”。如图7:
图 7
外部路由标记(route tag):
长度16bit,外部路由标记,区别外部路由。
前缀长度(prefix):
长度8bit,表示IPv6地址的前缀长度。
度量值(Metric):
长度8bit,表示路由的度量值。
9、RIP协议的工程过程
9、1 RIP协议运行、路由计算过程
1)路由器配置好RIP后,向相邻路由器发送Request报文。RIPv2将Request报文发往组播地址224.0.0.9;RIPv1要按照RIP出策略发布。RIPv1的路由与接口IP地址掩码比较后再发布,具体方式:
l
如果发布的路由地址与接口IP地址是同一类网段且掩码相同,则依照掩码位发布路由;若掩码位不同,则按原来类网的掩码发布。
l
如果此路由地址与接口IP地址非同一类网段,则依照自然类掩码聚合后发布。
2)相邻RIP路由器接收到Request报文后,发送包含本地路由信息表的Reponse报文,同时进行路由计算。同理的,RIP还需按照接口的入策略发布,具体方式:
l
如果此路由与接收接口IP地址同一类网段,则依照掩码位接收此路由;若非同一类网段,则依照自然类网段接收。
l
若路由器的路由表中有相同网段的直连子网路由,则接收此路由;若没有,则拒绝此路由。
3)路由器收到相邻路由器发回来的报文后,修改本地路由表。
4)路由器修改完本地路由表后便向相邻路由器发送触发更新报文,广播修改的路由信息,依此类推,最终使得各路由器都能保持最新的路由信息。
9.3 RIP的请求报文、响应报文
RIP的不同版本,发送的请求Request报文、响应Reponse报文的版本也有所不同:
l
RIPv1广播RIPv1报文,接收广播RIPv1报文;
l
组播RIPv2组播发送RIPv2报文,接收组播RIPv2报文;
l
广播RIPv2发送广播RIPv2报文,接收RIPv1、RIPv2报文;
l
没配置RIP版本,则广播发送RIPv1报文,接收广播RIPv1、广播RIPv2报文。
9.4 RIP报文认证
RIP报文认证分两种:
l
若路由器没配置RIPv2报文认证,RIPv1报文、没配置认证的RIPv2报文都能被接收,而配置认证的RIPv2报文即将被丢弃。
l
若路由器配置了RIP报文认证,配置认证的RIPv2报文能被接收,没配置认证及认证错误的RIPv2报文即将被丢弃。
9.5 RIPng报文处理过程
请求(Request)报文
配置好RIPng的路由器启动或需更新路由信息时,一般通过组播发请求(Request)报文。
收到请求(Request)报文的RIPng路由器对其中的RTE进行处理。若收到的请求(Request)报文只有一项RTE且IPv6前缀及前缀长度为0、度量为16,则把本地路由器的当前全部路由信息以响应(Reponse)报文发送回发送请求的路由器。若有多项RTE的话,则对逐项RTE处理,对每项路由开销值更新,最后同样方式反馈给请求路由器。
响应(Reponse)报文
响应(Reponse)报文包含有本地的路由表信息,产生于:
l
对某一个Request报文响应
l
作为更新报文周期性地发出
RIPng路由器会根据收到的响应(Reponse)报文更新自己路由表。另外,RIPng路由器会对收到的响应(Reponse)报文进行有效性检查以保证路由准确性。没有通过检查的报文会被忽略掉。
10、RIP协议高级特性
10.1 RIP路由聚合
路由聚合是同一类网段内的不同子网间的路由向外发布时聚合成一条类网段掩码的路由。其实只有RIPv2支持路由聚合,前面从RIPv2的报文格式知道它带有掩码位,所以能支持子网划分。而RIPv1报文没有带掩码位,故不能发布聚合路由。
10.2 如何防止路由环路
由于RIP是一种基于矢量距离(D-V)算法的路由协议,路由器间相互转告自己的路由表,存在着路由循环的可能。
要避免路由环路的产生,可以采取以下的方法:
l
度量无穷大(Counting to infinity):将度量值设置等于16 ,意思为不可达(infinity).当出现路由环路时,设置某个路由度量值为16将某路由不可达。
l
水平分割(Split Horizon):当RIP路由器从某个接口学到某路由项后,将不会再从该接口发回路由项给邻居路由器。
l
毒性反转(Poison Reverse):RIP路由器从某个接口学到路由项后,就将该路由度量值设置为16,从该接口发回给原来的邻居。
本文转自 独钩寒江雪 51CTO博客,原文链接:http://blog.51cto.com/bennie/269056,如需转载请自行联系原作者