基础通信学习之RIP路由技术
- RIP路由协议
- RIP基本原理路由信息协议RIP一种相对简单的动态路由协议,但有着广泛的应用。RIP是一种基于D-V算法的路由协议,它通过UDP交换路由信息,每隔30s向外发送一次更新报文。如果路由器经过180s没有收到来自对端的路由更新报文,则将所有来自此路由器的路由信息标志为不可达,若在其后的120s内仍未收到更新报文,就将该条路由从路由表中删除。 RIP使用跳数(Hop Count)来衡量到达目的网络的距离。在RIP中,路由器到与它直接相连网络的跳数为0,每经过一个路由器跳数加1,其余以此类推。为限制收敛时间,RIP规定metric取值为0-15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。 RIP处于UDP的上层,RIP所接收的路由信息都封装在UDP的数据报文中,RIP在80号端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其他路由器。通过这种方式,达到全局路由的同步。 为提高性能,防止产生路由环路,RIP支持水平分割、毒性逆转和触发更新。另外,RIP还允许引入其他路由协议所得到的路由。RIP路由表初始化过程如图 ![]()  具体过程如下: - RIP启动时的初始路由表仅包含本路由器的一些直连接口路由。
- RIP启动后向各接口广播一个请求(Request)报文。
- 邻居路由器的RIP从某接口收到Request报文后,根据自己的路由表形成响应(Response)报文,向该接口对应的网络广播。
- RIP接收邻居路由器回复的包含邻居路由器路由表的Response报文,形成自己的路由表。
- RIP根据D-V算法的特点,将协议的参加者分为主动机和被动机两种。主动机主动向外广播路由刷新报文,被动机被动地接收路由刷新报文。一般情况下,PC端作为被动机,路由器则既是主动机又是被动机,即在向外广播路由刷新报文的同时,接收来自其他主动机的D-V报文,并进行路由刷新。
 如图所示展示了RIP路由表的更新过程。 - RIP以30s为周期用Response报文广播自己的路由表。
- 收到邻居路由器发送而来的Response报文后,RIP计算报文中的路由项的度量值,比较其与本地路由表中路由项度量值的差别,更新自己的路由表。
- 报文中路由项度量值的计算:metric=MIN( metric+cost,16 ) , metric为报文中携带的度量值信息,cost为接收报文的网络的度量值开销,默认为1( 1跳),16代表不可达。
 ![]()  当本路由器从邻居路由器收到路由更新报文时,根据以下原则更新本路由器的RIP路由表。 - 对本路由表中已有的路由项,当该路由项的下一跳是该邻居路由器时,不论度量值增大或是减少,都更新该路由项(度量值相同时只将其老化定时器清零)。当该路由项的下一跳不是邻居路由器时,只在度量值减少时更新路由项。
- 对本路由表中不存在的路由项,在度量值小于16时,在路由表中增加该路由项。
- 路由表申的每一路由项都对应一个老化定时器,当路由项在180s内没有任何更新时。定时器超时,该路由项的度量值变为不可达(16)。
- 某路由项的度量值变为不可达后,该度量值在Response报文中发布4次(120s),之后从路由表中清除。
 
- RIP报文格式RIP包括RIPv1和RIPv2两个版本,RIPv1 不支持可变长子网掩码(VLSM), RIPv2支持可变长子网掩码,支持路由聚合与无类域间路由(CIDR),同时RIPv2支持明文验证和MD5密文验证。 RIPv1使用广播发送报文,RIPv2则有两种传送方式,分别为广播方式和多播方式,默认采用多播发送报文,RIPv2的多播地址为224.0.0.9。多播发送报文的好处是, 在同一网络中那些没有运行RIP的网段可以避免接收RIP的广播报文。另外,多播发送报文还可以使运行RIPv1的网段避免错误地接收和处理RIPv2中带有子网掩码的路由。 R1Pv1的报文格式如图,每个报文包括一个命令标识(Command )、一个版本号(Version) 和路由条目(最大25条 ),每个路由条目包括地址族标识(Address Family ldentifier)路由可达的IP地址和路由跳数(Metricl。如果某台路由器必须发送大于25条路由的更新消息,那么必须产生多条RIPv1报文。 从图中可以看出,RIP报文的头部占用 4个字节,而每个路由条目占用 20个字节,因此,RIP报文的大小最大4+25x20=504字节,再加上8个字节的UDP头部,RIP数据报文(不含IP包的头部)的大小最大为512字节。 每个字段的值和作用的详细介绍如下。 Command一一只能取1或者2, 1表示该消息是请求消息, 2表示该消息是响应消息。路由器或者主机通过发送请求消息向另一个路由器请求路由信息, 对端路由器使用晌应消息、回答。但是,大多数情况下路由器不经请求就会周期性地广播响应报文。 ![]()  RIPv1报文格式 Version一一对于RIPv1, 该字段的值为1。 Address Family Identifier (AFI)一一对于IP,该项为2。 IP Address一一路由的目的地址。这项可以是网络地址,主机地址。 Metric------1-16之间的跳数 RIPv2的报文格式如下图所示, 相对于RIPv1的报文格式,RIPv2增加了几个字段。 Route Tag一16位,用于标记外部路由,或者标记路由引入到RIPv2协议中的路由。 Subnet Mask一-32位, 确认IP地址的网络和子网部分的32位的掩码。 NextHop-32位,下一跳,为32位的IP地址。 ![]()  
- RIP防环路机制RIP作为距离矢量路由协议有一个很重要的概念—环路避免机制。为提高性能,防止产生路由环路 ,RIP支持水平分割、毒性逆转和触发更新。 网络故障 可能会使路径与实际网络拓扑结构不一致,导致网络不能快速完成收敛,这时,就可能会发生路由环路现象,如下图用了一个简单的网络结构来说明路由环路的产生。 ![]()  在图中,在网络11.4.0.0发生故障之前,所有的路由器都具有正确一致的路由表,网络是收敛的。在本例中.路径开销用跳数来计算,所以,每条链路的开销是1。路由器RTC与网络11.4.0.0直连, 跳数为0。路由器RTB经过路由器RTC 到达网络11.4.00,跳数为1。路由器RTA经过路由器RTB到达网络11.4.0.0,跳数为2。 如果网络11.4.0.0发生故障.就可能会在路由器之间产生路由环路,下面是产生路由环路的步骤。 1.当网络11.4.0.0发生故障,路由器RTC最先收到故障信息,路由器RTC把网络11.4.0.0设置为不可达 ,并等待更新周期到来,通告这一路由变化给相邻路由器。如果,路由器RTB的路由更新周期在路由器RTC之前到来,那么路由器RTC就会从路由器RTB那里学习 到去往11.4.0.0的新路由(实际上,这一 路由已经是错误路由了)这样路由器RTC的路由表中就记录了一条错误路由(经过路由器RTB,可去网络11.4.0.0,跳数增加到 2)。 2.路由器RTC学习了一条错误信息后,它会把这样的路由信息 再次通告给路由器RTB,根据通告原则,路由器RTB 也会更新这样一条错误路由信息,认为可以通过路由器RTC去往网络11.4.0.0,跳数增加到3。这样,路由器RTB认为可以通过路由器RTC去往网络11.4.0.0,路由器RTC认为可以通过路由器RTB去往网络11.4.0.0,就形成了环路。 如上所述,发生路由环路时,路由器去往网络11.4.0.0的跳数会不断地增大,网络无法收敛。为解决这个问题,会给跳数定义一个最大值。在RIP中,允许的跳数最大值为16。在图中,当跳数到达最大值时,网络11.4.0.0被认为是不可达的,路由器会在路由表中显示网络不可达信息,并不再更细到达网络11.4.0.0的路由。 通过定义最大值,距离矢量路由协议可以解决发生环路时路由权值无限增大的问题,同时也校正了错误的路由信息。但是,在最大权值到达之前,路由环路还是会存在的。也就是说,以上解决方案只是补救措施.不能避免环路产生,只能减轻路由环路产生的危害。因此路由协议的设计者又提供了诸如水平分割、触发更新等多种降低环路产生概率的方案。 1.接触环路方法—水平分割 水平分割是在距离矢量路由协议中最常用的避免环路发生的解决方案之一,分析产生路由环路的原因,其中一条就是路由器将从某个邻居学到的路由信息又告诉了这个邻居。水平分割的思想就是在路囱信息传送过程中,不再把路由信息发送到接收此路由信息的接口上,如图所示。 ![]()  上图中。路由器RTC通告给路由器RTB去往网络11.4.0.0的路由,路由器RTB 会把此路由信息传递给路由器RTA。同时,在没有水平分割的情况下也会 再传回给路由器RTC。 在网络11.4.0.0没有崩溃时,路由器RTC不会接收路由器RTB传递来的去往网络11.4.0.0的路由信息。因为,路由器RTC有度量更小的路由。 但如果路由器RTC 到达网络11.4.0.0的路由崩溃了,路由器RTC上维护的直连路由会失效,此时接收到路由器RTB传递来的去往网络11.4.0.0的路由信息 ,会误以为可以通过RTB到达网络11.4.0.0,从而学习11.4.0.0的网段路由。这样路由器RTB认为可以通过路由器RTC去往网络11.4.0.0,路由器RTC认为可以通过路由器RTB去往网络11.4.0.0,就形成了环路。 使能水平分割后,路由器不允许把从一个接口进来的更新再从这个接口转发出去。在上图中,路由器RTB从路由器RTC那里学习到了去往网络11 4.0.0的路由 基于水平分割原则,路由器RTB不再把去往网络11.4.0.0的路由信息传回给路由器RTC,从而在一定程度上避免了环路的产生。 2.解除环路方法—路由抑制。 路由抑制(Route Poisoning )是对水平分割的补充,可以在一定程度上避免路由环路产生 ,同时也可以抑制因复位接口等原因引起的网络动荡这种方法在网络故障或接口复位时抑制相应的路由,同时启动抑制时间控制路由器在抑制时间内不要轻易更新自己的路由表,从而避免环路产生,抑制网络动荡,如图所示。 当网络11.4.0.0发生故障时,路由器RTC将其路由选择表中到该网络的路径开销设为16(即不可达),以抑制该路由。这样路由器 RTC将不会接收该网络邻接路由器通告的关于网络11.4.0.0 的更新。路由器RTB收到路由器RTC发送的关于到网络11.4.0.0的路径开销为无穷大的通告后,向路由器RTC发送一个被称为毒性逆转(Poison Reverse )的更新,指出网络11.4.0.0是不可达的。这一消息违反了水平分割的规则,但却是旨在确认网段上的所有路由器都已经收到有关路由被抑制的信息。 ![]()  3.解除环路方法—抑制时间 路由抑制可以在一定程度上避免路由环路产生,同时也可以抑制因复位接口等原因引起的网络动荡。这种方法在网络故障或接口复位时抑制相应的路由,同时启动抑制时间,可以控制路由器在抑制时间内不要轻易更新自己的路由表. 从而避免环路产生、抑制网络动荡。如图所示。 ![]()  - 当网络11.4.0.0发生故障时,路由器RTC抑制自己路由表中相应的路由工页,也就是在路由表中使到达网络11.4.0.0的路径开销是无穷大(也就是不可达),同时启动抑制时间。在抑制时间结束之前的任何时刻,如果从同一相邻路由器(或同一方向)又接收到此路由可达的更新信息,路由器就将网络标识为可达,并删除抑制时间。
- 如果接收到其他的相邻路由器的更新信息, 且新的权值比以前的权值好, 则路由器就将更新路由表,接收这一更优的路由,并删除抑制时间。
- 在抑制时间结束之前的任何时刻, 如果从其他的相邻路由器接收到路径可用的更新信息,但新的权值没有以前的权值好,则不接收此更新路由。如果在抑制时间过后,路由器仍能收到该更新路由信息,则路由器将更新路由表。
- 解除环路方法—触发更新
 触发更新机制是在路由信息产生某些改变时立即发送给相邻路由器称为触发更新的信息。路由器检测到网络拓扑变化后,立即依次发送触发更新信息给相邻路由器,如果每个路由器都这样做,这个更新会很快传播到整个网络。如图所示,网络11.4.0.0不可达了,路由器RTC最先得到这一信息,于是路由器RTC立即通告网络11.4.0.0不可达信息,路由器RTB接收到这个信息,就从so口发出网络11.4.0.0不可达信息,路由器RTA从EO口通告此信息,环路问题也就避免了。 ![]()  使用触发更新方法能够在一定程度上避免路由环路发生。但是,仍然存在以下两个问题。 - 包含有更新信息的数据包可能会被丢掉或损坏。
- 如果触发更新信息还没有来得及发送,路由器就接收到相邻路由器的周期性路由更新信息,使路由器更新了错误的路自信息。
 为解决以上的问题,通常将抑制时间和触发更新相结合。抑制时间有一个规则就是,当到某一目的网络的路径出现故障时,在一定时间内,路由器不轻易接收到这一目的网络的路径信息。因此,将抑制时间和触发更新相结合就确保了触发信息有足够的时间在网络中传播。 如图所示,路由器RTC发现网络11.4.0.0出现故障后,立刻将其到该网络的路由删除,然后向路由器RTB发送一条触发更新,指出到网络11.4.0.0的路由开销值为无穷大,以抑制该路由。路由器RTB收到触发更新后启动自己的抑制定时器,将网络11.4.0.0标记为可能已出现故障,同时向路由器RTC发送一条反向抑制更新,然后向路由器RTA发送一条触发更新,指出网络11.4.0.0不可达。路由器RTA也将网络11.4.0.0的路由置为抑制状态,并向路由器RTB发送-条反向抑制更新。 ![]()  当然上述这些措施都不能保证RIP不存在无限计数问题,因此RIP依然需要设置一个最大跳数。 
- Rip故障案例分析路由协议故障处理一般分为两个方向, 接收方向和发送方向。针对RIP,在进行故障处理时,也需要考虑这两个方面的原因。RIP故障案例的典型组网如图所示。 ![]()  在图中,RTA与RTB通过Serial接口连接,RTA和RTB上分别配置了两个Loop back接口,IP地址规划见图。完成配置后,发现路由器之间无法正常学习到路由。 针对此类故障有以下处理思路。 - RIP路由接收故障处理思路
 - 检查入接口网段是否在RIP中宣告。
- 检查入接口工作是否正常。
- 检查对方的发送版本号和本地接口的接收版本号是否匹配。
- 检查入接口是否配置了undo rip input命令。
- 检查在RIP中是否配置了策略来过滤掉收到的RIP路由。
- 检查入接口是否配置了rip metricin命令,使得接收到的路由的度量值大于15。
- 检查接收到的路由度量值是否大于15。
- 检查在路由表中是否有从其他协议学到的相同路由。
 (2)RIP路由发送故障处理的思路。 1. 检查出接口网段是否在RIP中宣告。 2. 检查出接口工作是否正常。 3. 检查出接口是否配置了silent -interface命令。 4. 检查出接口是否配置了undo rip output命令。 5. 检查出接口是否配置了水平分割命令。 IP目前的应用场景较少,路由无法正常学习是RIP非常典型的一种故障现象。 在处理此类故障的时候,可以采用上述思路对路由的接收和发送进行逐一排查和定位。 
 
                    
                     
                    
                 
                    
                
 





 
			 
			 
			 
			 
			
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号